【笔记】在单文档中添加“右键菜单”和“对话框”资源

一、添加“右键菜单”资源。

如题所示,菜单也是一种资源,所以:

第一步:在资源视图中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;
}

 

posted @ 2012-03-28 13:47  醪糟汤圆  Views(773)  Comments(0Edit  收藏  举报