当我在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项目工作。我有一个菜单栏;我想知道我如何加载一个特殊的对话框,我把它添加到我的资源之前,它的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
相关文章:
- 如何在C++中使用pybind11加载一个pickle python列表
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 如何制作一个只包含字符的简单加载屏幕
- 试图用c++制作一个动画加载圈
- SFML 将图像从 txt 文件加载到矢量中仅加载最后一个图像
- C++/Win32 如何每秒加载一个函数
- C++指向一个字符串范围的指针(加载一个大文件)
- Boost.Graph:保存并加载一个名为Boost::adjacety_list的列表
- 正在加载一个程序集,该程序集与加载应用程序目录之外的目录中的其他程序集具有相关性
- 在运行时选择并加载一个备用共享库
- 我的应用程序正在加载一个dll以使用std::string
- 从QT资源中加载一个openCV Haarcascade
- 用DevIL在DDS文件中加载一个立方体映射
- 当我在win32项目c++应用程序中单击菜单项时,如何编写代码来加载一个特殊的对话框?
- c++中的多线程:加载一个大文件并执行一个函数
- 如何加载一个序列化的boost::变体
- 如何加载一个脚本文件
- 在c++中使用动态加载重新加载一个库
- 有没有可能每次都在一个随机地址加载一个FORTRAN DLL
- c++ #只包含加载一个命名空间