본문 바로가기

Programming/WinAPI

(11)
GetWindowText 사용법 어떤 윈도우(Form)의 텍스트(캡션)를 가져오고자 할때 우리는 GetWindowText 라는 API를 주로 사용합니다. GetWindowText 원형 int GetWindowText( HWND hWnd, LPTSTR lpString, int nMaxCount); 원형 int CWnd::GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const; void CWnd::GetWindowText( CString& rString ) const; 인수 ▶hWnd:윈도우 또는 컨트롤의 핸들 ▶lpString:캡션을 리턴받을 버퍼 ▶nMaxCount:버퍼의 크기 리턴 윈도우 핸들이 무효한 경우 0을 리턴한다. 성공한 경우 조사된 캡션의 길이를 리턴하되 널 종료 문자는 제..
MultiByteToWideChar 사용 ㅁ 사용방법(Char -> WCHAR(유니코드형식)) char* test = L"Test"; TCHAR* wcTest; //먼저 사이즈를 알아내서 메모리를 할당한다. int nLen = MultiByteToWideChar(CP_ACP, 0, test, strlen(test), NULL, NULL); wcTest = (TCHAR*)calloc(nLen*sizeof(TCHAR)); //스트링을 변환한다. MultiByteToWideChar(CP_ACP, 0, test, strlen(test), wcTest, nLen*sizeof(TCHAR)); ㅁ 사용예제(접속한 주소값 알아내기) char* ConnectUserAddr = ::inet_ntoa( fromAddr.sin_addr ); int iSrcLengt..
메시지 루프 및 MSG 구조체 ㅁ 윈도우즈를 메시지 구동 시스템(Message Driven System)이라고 하며 이 점이 도스와 가장 뚜렷한 대비를 이루는 윈도우즈의 특징이다 ㅁ GetMessage 함수는 읽은 메시지를 MSG형의 구조체에 대입해 주며 이 구조체는 DispatchMessage 함수에 의해 응용 프로그램의 메시지 처리 함수(WndProc)로 전달된다. ㅁ 윈도우즈 프로그램에서 메시지를 처리하는 부분을 메시지 루프라고 하며 보통 WinMain 함수의 끝에 다음과 같은 형식으로 존재한다.while(GetMessage(&Message,0,0,0)) { TranslateMessage(&Message); DispatchMessage(&Message); } BOOL GetMessage( LPMSG lpMsg, HWND hWnd..
CreateWindow Function HWND CreateWindow(lpszClassName, //lpszClassName 멤버의 이름 기입 lpszWindowName, //윈도우의 타이틀 바에 나타날 문자열 dwStyle, //윈도우의 형태를 지정하는 인수 x, y, nWidth, nHeight, //윈도우의 크기,위치를 지정(픽셀 단위를 사용) hwndParent, //부모윈도우가 있을 때 부모윈도우의 핸들지정 hmenu, //윈도우에서 사용할 메뉴의 핸들 hinst, //프로그램의 핸들을 지정한다 lpvParam) //CREATESTRUCT라는 구조체의 번지이며 특수한 목적에 사용 리턴 값 : CreateWindow 함수는 윈도우에 관한 모든 정보를 메모리에 만든 후 윈도우 핸들을 리턴값으로 넘겨준다.
WNDCLASS 구조체 windows.h에 다음과 같이 정의되어 있는 구조체이다.typedef struct tagWNDCLASS { UINT style; //윈도우의 스타일을 정의한다 WNDPROC lpfnWndProc; //이 멤버는 윈도우의 메시지 처리 함수를 지정한다 int cbClsExtra; //일종의 예약 영역이다 int cbWndExtra; //일종의 예약 영역이다 HINSTANCE hInstance; //이 윈도우 클래스를 사용하는 프로그램의 번호 HICON hIcon; //최소화되었을 경우 출력될 아이콘을 지정한다 HCURSOR hCursor; //윈도우가 사용할 마우스 커서 HBRUSH hbrBackground; //윈도우의 배경 색상을 지정 LPCSTR lpszMenuName; //프로그램이 사용할 메뉴를 ..
WndProc 메시지 처리 함수란 ㅁ WndProc 메시지 처리 함수란 메시지가 발생할 때 프로그램의 반응을 처리하는 일을 하며 WinMain 함수와는 별도로 WndProc이라는 이름으로 존재한다. 윈도우 프로시저(Window Procedure)라는 뜻이지만 통상 읽을 때는 "윈드프록"이라고 읽는다. WndProc은 WinMain에서 호출하는 것이 아니라 윈도우즈에 의해 호출된다. WinMain내의 메시지 루프는 메시지를 메시지 처리 함수로 보내주기만 할 뿐이며 WndProc은 메시지가 입력되면 윈도우즈에 의해 호출되어 메시지를 처리한다. 이렇게 운영체제에 의해 호출되는 응용 프로그램내의 함수를 콜백(CallBack) 함수라고 한다. WndProc의 인수는 모두 4개이며 MSG 구조체의 멤버 4개와 동일하다. hWnd는 메시지를 받을 윈..
WinAPI 에서의 접두어 의미 접두어 원래말 의미 cb Count of Bytes 바이트 수 dw double word 부호없는 long형 정수 h handle 윈도우, 비트맵, 파일 등의 핸들 sz Null Terminated NULL 종료 문자열 w Word 부호없는 정수형 i Integer 정수형 b Bool 논리형 -출처 : www.winapi.co.rk
WinAPI 기본적인 특징 ㅁ windows.h만 포함해 주면 된다. stdio.h나 conio.h, graphics.h 등을 포함해 줄 필요가 없다. ㅁ APIENTRY 지정자는 __stdcall형 호출 규약을 사용한다는 뜻인데 일단은 없다고 생각해도 무방하다 ㅁ 다음으로 차이나는 점은 프로그램의 시작점인 엔트리 포인트(Entry Point)가 main 함수가 아니라 WinMain이라는 점이다 ㅁ 하나는 프로그램의 시작점인 WinMain이며 나머지 하나는 WndProc이다. 도스에서는 main 함수만으로도 프로그램을 작성할 수 있지만 윈도우즈에서는 아주 특별한 경우를 제외하고는 이 두개의 함수가 모두 있어야 한다.

반응형