대화상자 기반의 프로그램
HWND_DESKTOP : 이 대화상자가 메인 윈도우가 되도록 한다.
예시) DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), HWND_DESKTOP, MainDlgProc);
모델리스형 대화상자
DialogBox 대신에 CreateDialog함수 이용.
HWND CreateDialog(HISTANCE, LPCTSTR, HWND, DLGPROC);
리턴 : 성공시 다이얼로그 핸들, 실패시 NULL
HINSTANCE : 대화상자 리소스를 가진 인스턴스 핸들
LPCTSTR : 대화상자 리소스 아이디
HWND : 대화상자를 소유한 부모 윈도우
DLGPROC : 메세지를 보낼 대화상자 프로시저 포인터
※ (모델리스형 대화상자의 메세지도 같이 날라오기 때문에)
메인 윈도우의 메세지만 forwarding되도록 처리한다.
While(GetMessage(&msg, NULL, 0, 0))
{
If(!IsWindow(hMDlg) || IsDialogMessage(hMDlg,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}BOOL IsWindow(HWND hWnd);
hWnd 핸들의 윈도우가 존재하는 지 확인한다.
리턴 : TRUE면 존재. FALSE면 존재하지 않음.
BOOL IsDialogMessage(HWND hDlg, LPMSG lpmsg);
대화상자를 위한 메세지인지 메인 윈도우의 메세지인지 검사. (모델리스 대화상자가 떠 있는 경우에만 해당)
리턴 : 메세지가 모델리스 다이얼로그에서 처리되었다면 TRUE, 그렇지 않으면 FALSE
HWND hDlg : 모델리스 대화상자 윈도우 핸들
LPMSG : GetMessage를 통해 받은 메세지 포인터
메세지
큐 메세지 : PostMessage함수에 의해 처리될 수 있는 메세지. 주로 사용자 입력으로부터 발생.
비큐 메세지 : 곧바로 윈도우 프로시저로 보내지는 메세지. SendMessage함수로 처리.
시스템은 쓰레드를 생성할 때 디폴트로 메세지큐를 가지지 않는 쓰레드 생성.
BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
현재 호출한 쓰레드 메시지 큐로부터 메세지를 받는다. 새로운 메세지가 들어올 때까지 리턴하지 않는다.
무한대기 -> Dead time비율이 높다.
LPMSG lpMsg : 메세지 정보를 받을 MSG 구조체의 포인터
HWND hWnd
: 윈도우의 메세지를 받게될 핸들. 이 윈도우는 현재 실행되고 있는 쓰레드에 속해야 한다.
: NULL이면 현재 실행되고 있는 쓰레드에 속한 어떤 윈도우든지 간에 메세지를 보낸다.
: -1이면 PostMessage(의 인수가 NULL)이나 PostThreadMessage에 의해 호출된 메세지만 수행된다.
wMsgFilterMin, wMsgFilterMax : 메세지를 골라서 가져오기 위한 필터값
BOOL PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);
메세지를 할당하고 쓰레드 메세지 큐를 검사하고 메세지가 있다면 그것을 얻는다. 즉시 리턴.
리턴 : 메세지가 있을 경우 TRUE, 없으면 FALSE
LPMSG lpMsg : 메세지 정보를 받을 MSG 구조체의 포인터
HWND hWnd
: 윈도우의 메세지를 받게될 핸들. 이 윈도우는 현재 실행되고 있는 쓰레드에 속해야 한다.
: NULL이면 현재 실행되고 있는 쓰레드에 속한 어떤 윈도우든지 간에 메세지를 보낸다.
: -1이면 PostMessage(의 인수가 NULL)이나 PostThreadMessage에 의해 호출된 메세지만 수행된다.
wMsgFilterMin, wMsgFilterMax : 메세지를 골라서 가져오기 위한 필터값
wRemoveMsg
: PM_NOREMOVE : 메세지 큐의 메세지를 지우지 않는다.
: PM_REMOVE : 메세지 큐의 메세지를 지운다.
'컴퓨터 공부 > Win32 API 프로그래밍' 카테고리의 다른 글
[5월 6일 1교시] 메세지2 (0) | 2009.05.06 |
---|---|
[스터디] 윈도우즈 API 정복2 - 35장 레지스트리. (0) | 2009.05.06 |
[5월 1일 2교시] 대화상자 1 (0) | 2009.05.01 |
[5월 1일 1교시] 컨트롤2 (0) | 2009.05.01 |
[숙제] 맵핑모드 (0) | 2009.05.01 |