当前位置:编程学习 > 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.zzzyk.com
以持续完成需要的工作。

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,