当我在win32项目c++应用程序中单击菜单项时,如何编写代码来加载一个特殊的对话框?

How Can I write a code to load a special dialog when I click on a menu Item in win32 project C++ application?

本文关键字:加载 一个 对话框 代码 何编写 项目 c++ win32 应用程序 菜单项 单击      更新时间:2023-10-16

我在一个c++ win32项目工作。我有一个菜单栏;我想知道我如何加载一个特殊的对话框,我把它添加到我的资源之前,它的ID是IDC_FORMVIEW,当我点击菜单项,如"添加标记"。

你能告诉我怎么做吗?ON_COMMAND在这里有用吗?或者有另一种联系它们的方式?

非常感谢!对不起,我的英语不够好。

这取决于你的项目是MFC还是简单的Win32。

如果你的项目是MFC -打开你的菜单在资源视图(如果不可见的视图->资源视图)。选择菜单项IDC_FORMVIEW并右键单击。您可以选择"添加事件处理程序",其中包含一个可能放置处理程序函数的对话框列表。选择主窗口,点击"添加和编辑"。

如果你的项目是Win32 -你必须自己在WM_COMMAND处理程序中添加它,看看它是如何为IDM_EXIT完成的。

显示对话框:

对于MFC项目-选择对话框,选择添加类,为对话框选择一个名称,例如SomeDlg,向导将生成SomeDlg.h和SomeDlg.cpp。在主文件和菜单处理程序类型中包含SomeDlg.h:

 void CmainDlg::OnSomeDlg()
 {
   SomeDlg dlg;
   dlg.DoModal();
 }

对于Win32 -你必须使用对话框,看看IDM_ABOUT是如何做的。你必须定义你自己的对话框窗口回调:

 BOOL CALLBACK TestDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) 
 { 
    switch (message) 
    { 
            case WM_INITDIALOG:
                 MessageBox(0,_T("started"),0,0);
            break;
            case WM_COMMAND: 
                switch (LOWORD(wParam)) 
                { 
                    case IDOK: 
                    case IDCANCEL: 
                     EndDialog(hwndDlg, wParam); 
                    return TRUE; 
                } 
} 
return FALSE; 

}

然后像这样创建你的(模态)对话框:

case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    // Parse the menu selections:
    switch (wmId)
    {
    case IDM_TEST:
        if(DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd,     (DLGPROC)TestDlgProc)==IDOK)
        {
            MessageBox(0,_T("Closed with Ok"),0,0);
        }
    break;

看到http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996%28v=vs.85%29.aspx modal_box