当前位置:编程学习 > C/C++ >>

显示模式对话框实例

模式对话框被创建后会立即显示出来,即使创建时没有指定WS_VISIBLE。
使用API函数DialogBox和DialogBoxParam。其中DialogBoxParam最常用。
调用EndDialog结束一个模式对话框.
对话框建立后收到的第一条消息是WM_INITDIALOG,所以对话框的初始化工作应该放在WM_INITDIALOG消息的响应函数中。
MFC中调用CDialog::DoMadal()可以创建并显示一个模式对话框。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
新建一个简单Win32项目ModalDlg
向工程添加一个对话框资源ID为IDD_MAIN
将系统生成的ModalDlg.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: 
            EndDialog(hwndDlg , 1); 
            return true; 
        } 
        break; 
        case WM_CLOSE: 
            EndDialog(hwndDlg , 0); 
            return true; 
        default: 
            break; 
 
    } 
    return false; 

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

    // TODO: Place code here. 
    ///显示模式对话框,***并等待****,直到对话框结束才返回 
    int nRet = DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_MAIN) ,NULL ,DlgProc ,0); 
    ///此函数的返回值是由EndDialog函数指定的,即:**nRet***的值由EndDialog指定 
    switch(nRet) 
    { 
    case 0 : 
        OutputDebugString(_T("标题栏的关闭按钮关闭了对话框\n")); 
        break; 
    case 1: 
        OutputDebugString(_T("取消按钮关闭了对话框\n")); 
        break; 
    } 
    return 0; 

 

说明:
1、模式对话框的WinMain函数简单了许多,这是因为系统已经在后台做了许多工作,甚至在WinMain中连消息循环代码都可以省掉。
2、模式对话框的消息消息处理过程返回值为BOOL
3、实际对话框过程并没有收到WM_CREATE消息,因为WM_CREATE消息发出时,对话框框架还没有建立,这条消息被系统内部处理了。

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