티스토리 뷰

프로그래밍/API

모달리스다이얼로그

에어버스 2016. 4. 2. 12:27

프로그램이 종료가 되지않지 않는 한 IsDialogMessage() 는 항상 TRUE 값을 가지므로 무한 메시지루프 가능해짐.

모달과 모덜리스 차이점
1. WS_VISIBLE 기본값
2. 메시지 큐 사용
3. 모덜리스다이얼로그 종료시키기 위해 DestroyWindow(hDlg) 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
HWND hDlgModeless; // 외부변수
BOOL CALLBACK ColorScrDlg(HWND, UINT, WPARAM, LPARAM); // 모달리스다이얼로그 메시지 처리함수
 
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
...
    hDlgModeless = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, ColorScrDlg);
...
 // 기본 메시지 루프입니다.
    while (GetMessage(&msg, nullptr, 00))
    {
    if (hDlgModeless == 0 || !IsDialogMessage(hDlgModeless, &msg))
    { // 모달리스다이얼로그는 메시큐를 통해 메시지 전달됨
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    }
    return (int) msg.wParam;
}
 
BOOL CALLBACK ColorScrDlg(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    switch (iMsg)
    {
    case WM_INITDIALOG: // 다이얼로그 초기화
        ...
        return TRUE;
    case WM_CLOSE:
        DestroyWindow(hDlgModeless);
        break;
    }    
    return FALSE;
}
cs
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31