程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 顯示非模式對話框實例

顯示非模式對話框實例

編輯:C++入門知識

使用API函數CreateDialog和CreateDialogParam。
結束非模式對話框使用DestroyWindow函數,而不是EndDialog函數。
非模式對話框建立後收到的第一條消息任然是WM_INITDIALOG。
如果資源中沒有指定WS_VISIBLE屬性,則非模式對話框創建後不會立刻顯示出來,要調用Showwindow函數才能讓其顯示。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
新建簡單的Win32項目ModallessDlg
向工程添加一個對話框資源,其ID為IDD_MAIN
將系統自動生成的ModallessDlg.cpp文件修改如下:
[cpp]
#include "tchar.h" 
#include "resource.h" 
 
///對話框過程,處理各種消息 
BOOL CALLBACK DlgProc(HWND hwndDlg ,UINT uMsg ,WPARAM wParam ,LPARAM lParam) 

    switch(uMsg) 
    { 
    case WM_CREATE: 
        OutputDebugString(_T("收到了WM_Create消息\n")); 
        break; 
    case WM_INITDIALOG: 
            OutputDebugString(_T("收到了WM_InitDialog消息\n")); 
            break; 
    case WM_COMMAND: 
        switch(LOWORD(wParam)) 
        { 
        case IDOK: 
            break; 
        case IDCANCEL: 
            DestroyWindow(hwndDlg); 
            //EndDialog(hwndDlg , 1); 
            return true; 
        } 
        break; 
        case WM_CLOSE: 
            DestroyWindow(hwndDlg); 
        //  EndDialog(hwndDlg , 0); 
            return true; 
        case WM_DESTROY: 
            OutputDebugString(_T("對話框即將被銷毀\n")); 
            PostQuitMessage(0); 
            return true; 
        default: 
            break; 
 
    } 
    return false; 

int APIENTRY WinMain(HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance, 
                     LPSTR     lpCmdLine, 
                     int       nCmdShow) 

    // TODO: Place code here. 
    ///創建非模式對話框 
[cpp] 
HWND hWnd = CreateDialogParam(hInstance,MAKEINTRESOURCE(IDD_MAIN) ,NULL ,DlgProc ,0); 
///顯示對話框 
[cpp] 
    ShowWindow(hWnd ,SW_SHOW); 
    MSG msg ={0}; 
    while(GetMessage(&msg,NULL,0,0)) 
    { 
        DispatchMessage(&msg); 
    } 
    OutputDebugString(_T("結束了\n")); 
    return 0; 

 

說明:
1、非模式對話框必須在WinMain函數中加上消息循環的處理,否則應用程序會立即退出。
2、若非模式對話框做主窗體,則必須在對話框結束前調用PostQuitMessage函數以投遞結束消息循環的消息。
3、非模式對話框也處理不到WM_CREATE消息。
******************************************************************************************
WM_CLOSE,調用DestroyWindow()                                                     **
DestroyWindow()又發送WM_DESTROY                                                **
響應WM_DESTROY,調用WM_QUIT                                                    **
GetMessage()發現WM_QUIT,退出程序                           **
******************************************************************************************
可以看出,程序一旦退出main(WinMain)函數,應用程序即會結束,所以在實際應用中大多數程序的main函數中都是一個循環, www.2cto.com
以持續完成需要的工作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved