05 윈도우 프로그램 유형4. 4
인스턴스
지금까지 작성해 보았던 프로그램을 그림으로 나타낸 것
앞으로 만들 프로그램에 대한 그림 그려봐!
하나의 어플리케이션 큐를
가지고 있는 프로그램
윈도우
프로시저
윈도우
HINSTANCE
HWND
5. 5
윈도우 두 개 이상
HWND
HWND
윈도우 1
윈도우 2
하나의 어플리케이션 큐를
가지고 있는 프로그램
윈 도 우
1 , 2 를
위 한
프로시저
HINSTANCE
윈도우 두 개 이상 포함된 프로그램
각 윈도우에서 발생한 이벤트는 어디서 처리 ?
6. 6
윈도우 프로시저도 두 개 이상
HWND
HWND
HINSTANCE
윈도우 1
윈도우 2
하나의 어플리케이션 큐를
가지고 있는 프로그램
윈도우 1
프로시저
윈도우 2
프로시저
각 윈도우에서 발생하는 이벤트 처리를 전담하는
윈도우 프로시저를 따로 따로
8. 8
윈도우 개수가 대략 30
숫자 9 버튼을 클릭하면
숫자 창에 9가 나타난다
버튼 하나 하나가 다 윈도우
9. 9
윈도우 두 개, 프로시저 한 개
윈도우 두 개 만들고 마우스 왼쪽 버튼 눌림에 대해
메시지 박스 출력
10. 10
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HWND _hWnd2;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE
hPrevInstance, LPSTR lpszArg, int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS WndClass;
WndClass.style = NULL;
WndClass.lpfnWndProc = WndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = "Hello";
if(!RegisterClass(&WndClass)) return NULL;
설명 편하게 하려고 전역변수 사용했음
hello로 등록할 윈도우
클래스로 부터 만들어
지는 윈도우의 메시지
처리를 담당하는 함수
11. 11
hWnd = CreateWindow(
"Hello",
"Hello",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL, NULL, hInstance,
NULL
);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
윈도우 생성하고 화면에 출력하는 코드
그렇다면 윈도우를 하나 더 만들려면…
윈도우 클래스 이름이
hello인 클래스를 이용
하여 윈도우 생성
12. 12
_hWnd2 = CreateWindow(
"Hello",
"Hello",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL, NULL, hInstance,
NULL
);
ShowWindow(_hWnd2, nCmdShow);
UpdateWindow(_hWnd2);
똑 같은 코드를 다시 한번 더. 간단하다
윈도우 클래스 이름이
hello인 클래스를 이용
하여 윈도우 생성
13. 13
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
switch(mesg)
{
case WM_LBUTTONDOWN:
MessageBox(hWnd, "왼쪽버튼 눌림", "알림", MB_OK);
break;
case WM_DESTROY :
PostQuitMessage(0);
return FALSE;
}
return DefWindowProc(hWnd, mesg, wParam, lParam);
}
14. 14
윈도우 구분 없이 마우스 왼쪽 버튼을 누르면 같은
대화상자 출력
다음에는 뭐 해볼까요 ?
각 윈도우 위에서 마우스 왼쪽 버튼 눌렀을 때 다른
내용의 대화상자 출력하게 만들어 봅시다
윈도우 프로시저가 한 개니까 당연
윈도우마다 윈도우 프로시저
따로 만들어 주자는 얘기