MFC弹出对话框几种方法总结

简介: 一、点击菜单按钮弹出对话框1、在资源视图中(.rc文件夹下)找到menu,选择需要弹框的菜单项;2、点击菜单项,修改菜单ID,在主程序中用ON_COMMAND()将ID和函数关联,要在主程序的头文件中声明被关联函数;...
一、点击菜单按钮弹出对话框
1、在资源视图中(.rc文件夹下)找到menu,选择需要弹框的菜单项;
2、点击菜单项,修改菜单ID,在主程序中用ON_COMMAND()将ID和函数关联,要在主程序的头文件中声明被关联函数;
例:
菜单ID和函数关联
ON_COMMAND(ID_Task,&CMFCExampleView::OnCreateTask)
声明函数
afx_msg void OnCreateTask();
3、在资源视图中(.rc文件夹下)添加Dialog,为对话框创建类(CAboutDlg);
4、在2中被关联的函数中写如下代码实现弹框
例:
void CMFCExampleView::OnCreateTask()
{
CAboutDlg dlg;
dlg.DoModal();
}
5、在对话框OnBnClickedOk()中写具体弹框实现内容;
注:
注意头文件的包含
二、用MessageBox()函数弹框
1、包含头文件
#include<windows.h>
2、例:
// LYZ modify 20170509
int result = MessageBox( TEXT("确定新建任务吗?") , TEXT("新建任务") ,MB_YESNO);
switch(result)
{
case IDYES:
{
//点击YES按钮的具体实现功能
CMFCExampleDoc* pVitaHypDoc =GetDocument();
pVitaHypDoc->getPostDoc()->getMesh()->DeleteAllData();
pVitaHypDoc->getPostDoc()->getResult()->clearData();
pVitaHypDoc->getTestDoc()->getMesh()->DeleteAllData();
pVitaHypDoc->getTestDoc()->getResult()->clearData();
pVitaHypDoc->getGroupManager()->removeAll();
pVitaHypDoc->m_vectorSensorLoadCaseManager.clear();
pVitaHypDoc->FlushAllSegment();
pVitaHypDoc->ClearCustomNotes();
UpdateCustomNote();
pVitaHypDoc->updateTxtNodes(NULL);
pVitaHypDoc->updateHoopsModel();
UpdateView();
((CMainFrame*)AfxGetMainWnd())->m_wndClassView.FillClassView();
((CMainFrame*)AfxGetMainWnd())->m_wndFileView.FillFileView();
break;
}
case IDNO:
break;
}
注意:
MessageBox()函数返回值是整型,参数含义百度了解!
三、MFC对话框鼠标右键弹出菜单,点击菜单弹出对话框
1、MFC对话框上点击鼠标右键,弹出菜单
(1)打开对话框,在对话框上右键选择类向导,选择消息并选择WM_RBUTTONDOWN(双击或选择添加消息处理程序)
则会在该对话框的.cpp文件中自动添加消息处理函数
// CChartDialog 消息处理程序
void CChartDialog::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值


CDialogEx::OnRButtonDown(nFlags, point);
}
(2) 添加右键弹出菜单,并添加响应函数
实现步骤:
a、新建一个菜单资源,IDR_TOOL_MENU
b、代码实现
void CChartDialog::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

CMenu menu; //定义下面要用到的cmenu对象
menu.LoadMenu(IDR_TOOL_MENU); //装载自定义的右键菜单 
CMenu *pPopup = menu.GetSubMenu(0); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
CPoint point1;//定义一个用于确定光标位置的位置 
GetCursorPos(&point1);//获取当前光标的位置,以便使得菜单可以跟随光标 

pPopup ->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,GetParent());//在指定位置显示弹出菜单


CDialogEx::OnRButtonDown(nFlags, point);
}
(3) 在资源视图中右键单击菜单项,选择添加事件处理程序
(4)在资源视图中为菜单中的每一项建立类向导,并添加Command响应函数,然后在这个函数中加入语句。
ON_COMMAND(ID_TOOL_DEL, &CDlgTool::OnToolDel)/
void CDlgTool::OnToolDel() 
{
AfxMessageBox("成功!"); 
}
发现问题
在上述步骤二中,
pPopup ->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y ,this);
this表示点击菜单的消息传递到本对话框,相应的改变其值也可以传递到其它对象。如GetParent(),传递到父对话框中。






相关文章
14 MFC - 普通按钮 CButton
14 MFC - 普通按钮 CButton
44 0
15 MFC - 编辑框CEdit
15 MFC - 编辑框CEdit
53 0
|
6月前
[MFC] A对话框调用B对话框
[MFC] A对话框调用B对话框
47 0
12 MFC - 非模态对话框
12 MFC - 非模态对话框
60 0
|
数据安全/隐私保护
MFC——对话框的创建及使用(下)
MFC——对话框的创建及使用
279 0
MFC——对话框的创建及使用(下)
|
测试技术 BI 区块链
MFC——对话框的创建及使用(上)
MFC——对话框的创建及使用
1251 0
MFC——对话框的创建及使用(上)
|
C++
基于MFC实现选项卡控件练习
基于MFC实现选项卡控件练习
72 0
基于MFC实现选项卡控件练习
MFC设置窗体大小SetWindowPos
SetWindowPos(NULL,0,0,200,300,SWP_NOMOVE);     表示不考虑(0,0),仅仅将大小改为200x300,位置不变    SetWindowPos(NULL,0,0,200,300,SWP_NOMOVE);    表示不考虑200X300,只是把位置挪到(0,0).
4127 0
在MFC对话框中添加状态栏
如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图)。 1. 首先,打开在资源视图的String Table并添加两个ID:ID_INDICATOR_NISH 和ID_INDICATOR_TIME,如下图 2.
1176 0
|
测试技术
MFC中为菜单或按钮添加快捷键功能
1、新建一快捷键资源,ACCELERATOR,关联相应的ID号,下图所示中,其中,第一个ID为自定义快捷键ID,按CTRL+R,此时响应该ID以应的消息响应函数, 第二个ID为菜单ID,此时按CTRL+V,调出ID_NETWORK_PING菜单对应的响应函数。
1377 0