카테고리 없음

윈도우 핸들, 인스턴스, 클래스

에어버스 2016. 5. 22. 15:34

HWND hWnd = CreateWindow(...);

CreteWindow() 함수로 윈도우 만들고 만들어진 윈도우 핸들을 반환한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
...
   WNDCLASSEXW wcex;
   wcex.lpszClassName  = szWindowClass;
... 
   RegisterClassExW(&wcex); // 윈도우클래스 등록
...
   HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
...
cs

 

메인 윈도우 등록과 생성을 보여주는 코드이다.

1. 윈도우 인스턴스 (1행)

메인함수(wWinMain)의 인수로 받음.
프로그램이 여러번 실행되면 인스턴스는 실행된 횟수만큼 수가 된다.

2. 윈도우 클래스 이름 (8행)

윈도우 클래스 이름을 지정한 후 클래스를 등록한다.

3. 윈도우 핸들 (12행)

윈도우를 만들때 클래스 이름과 인스턴스를 인수로 지정하여 만들고, 만들어진 윈도우 핸들을 반환한다.
===============

1. 인스턴스 얻기
HINSTANCE hInstance = ::GetWindowLong(hWnd, GWL_HINSTANCE); // 핸들 필요

http://petra.tistory.com/825 - GetWindowLong 인수 플래그 참고

2. 클래스 이름 얻기
char ClassName[256];
::GetClassName(hWnd, ClassName, sizeof(ClassName)); // 핸들 필요

3. 클래스 정보 얻기
WNDCLASS WndClass;
::GetClassInfo(hIntance, ClassName, WndClass); // 인스턴스 필요