一、添加“右键菜单”资源。
如题所示,菜单也是一种资源,所以:
第一步:在资源视图中new一个菜单Menu,属性中设置ID(此处为ID_MYMENU)。在菜单上添加子项并设置ID。
第二步:加载菜单,在CMainFrame中添加相应消息:
void CMainFrame::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
// TODO: 在此处添加消息处理程序代码
CMenu popupmenu;
popupmenu.LoadMenu(IDR_MYMENU);
popupmenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
}
第三步:打开菜单资源单击鼠标右键,添加“事件处理程序”。可以根据不同的需要添加不同的响应函数。
注意:添加的时候会选择类,如果想要在View中响应的话,就选择View。
二、添加“对话框”资源
第一步:在资源视图中new一个Dialog,设置ID。
第二步:右键,给这个对话框创建一个类。
第三步:在View中使用对话框。代码如下:
void CXXXView::OnAlllayer()
{
// TODO: 在此添加命令处理程序代码
//创建对话框资源,并弹出
CCXXXDlg m_Dlg;
m_Dlg.DoModal();
}
附加一:在Dialog中获取Doc中的成员变量
CMainFrame *pFrame=(CMainFrame*)AfxGetMainWnd();//获取框架窗口
CGraphicsEngineShowDoc *pDoc=(CGraphicsEngineShowDoc *)pFrame->GetActiveDocument();//获取文档
pDoc->m_ap->Create(m_name);//使用文档中的成员变量m_ap
当然了,如果你忘记包含头文件,依然会出错!这里需要的头文件有:
#include "MainFrm.h"
#include "XXXDoc.h"
#include "XXXView.h"
#include "F:\XXX\FF\CCC\EEE\m_ap所属类.h"
附加二:对话框的初始化问题
CWnd继承来的窗口,初始化一般是给WM_CREATE消息添加响应函数OnCreate()来实现的。
那么Dialog呢?它上面的控件可不止一个啊,如何有序初始化呢?到这里,应该想到重写虚函数了。
在头文件中声明: BOOL OnInitDialog();
在源文件中实现:(BOOL和TRUE是Windows自己定义的,实际上是int型;bool和true是C++语法中的类型变量,取值只有0和1。)
BOOL CCLayerDlg::OnInitDialog()
{
CDialog::OnInitDialog();//第一行,先调要基类的初始化函数!所谓“有序”初始化。
//初始化
return TRUE;
}