把CDialog对话框资源创建成CDialogBar
来源:互联网 发布:河南公务员网络培训 编辑:程序博客网 时间:2024/05/22 20:25
1. 创建对话框资源:在对话框资源编辑器内生成一个Dialog资源,并将其风格(Style)属性必须设置为Child,不能设置为Overlapped或Popup(把原有的Dialog属性改一下);
2. 建立关于次对话框的类CDlgMircoImage,由于可选项只有CDialog,没有CDialogBar;所以选择CDialog作为基类
3. 修改:修改派生类以CDialogBar为基类(添加手动)
如下;
1). class CDlgMircoImage : public CDialog 改为class CDlgMircoImage: public CDialogBar
2). 将CDlgMircoImage:: CDlgMircoImage (CWnd* pParent /*=NULL*/)
: CDialog(CDlgMircoImage::IDD, pParent)////修改(方法一:把CDialog改成CDialogBar;方法二:把这一行注释掉如//: CDialog(CDlgMircoImage::IDD, pParent))
{
//{{AFX_DATA_INIT(CDlgMircoImage)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
3). void CDlgMircoImage::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX); ///把这一行注释掉如// CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCurrentCheckDlg)
………..
//}}AFX_DATA_MAP
}
3). 重新初始化函数
首先在ClassWizard的MessageMap中对消息该CDlgMircoImage类的WM_INITDIALOG消息添加处理函数默认名为OnInitDialog。手工修改代码如下:
1、 添加消息映射函数。由于对话框形式的初始化函数消息并未加载到消息映射内,为此我们需要手工添加,要不然代码无法拦截该工具条的初始化消息,形式如下:
将BEGIN_MESSAGE_MAP(CDlgMircoImage, CDialogBar)
//{{AFX_MSG_MAP(CDlgMircoImage)
....... //添加:ON_MESSAGE(WM_INITDIALOG,OnInitDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
2修改OnInitDialog函数,此函数并未传递参数,但是在这里我们需要让它传递参数,代码如下修改
BOOL CDlgMircoImage::OnInitDialog(UINT wParam,LONG lParam)
{
//CDialogBar::OnInitDialog();
// TODO: Add extra initialization here
//以下部分手动添加
BOOL bRet = HandleInitDialog(wParam,lParam);
if (!UpdateData(FALSE))
{
TRACE("Init CDlgMircoImage Failed!");
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
4. 首先,在框架类的头文件内声明实例对象,本例实例化:CDlgMircoImage m_pNavigator;当然头文件中不可避免要包含新派生类的头文件。
其次,在框架类的OnCreate函数内创建对象并将对象绑定对话框资源。形式与创建ToolBar原理一样,本例实例如下:
if (!m_pNavigator.Create(this, IDD_DIALOG_IMAGE_MICRO
|CBRS_SIZE_DYNAMIC|CBRS_BOTTOM, IDD_DIALOG_IMAGE_MICRO))
{
TRACE0("Failed to CDlgMircoImage create bar!");
return -1;
}
5. 添加并修改框架类的OnCmdMsg虚函数:
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// TODO: Add your specialized code here and/or call the base class
if (m_pNavigator.OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))
return TRUE; //修改部分
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
- 把CDialog对话框资源创建成CDialogBar
- 将CDialog完美转换成CDialogBar
- 创建一个CDialog对话框与对话框销毁
- CDialog 非模态对话框的创建和销毁
- CDialog动态创建无资源工具条方法
- [MFC]CDialog类简介、创建模态对话框
- CDialog模态对话框
- 对话框和对话框类CDialog
- 对话框和对话框类CDialog
- 用对话框创建CDialogBar派生的类并在CReBar上添加
- 用对话框创建CDialogBar派生的类并在CReBar上添加
- 用对话框创建CDialogBar派生的类并在CReBar上添加
- 用对话框创建CDialogBar派生的类并在CReBar上添加
- 用vb使用对话框资源创建对话框
- 不使用对话框资源模版创建对话框
- 创建对话框资源(1)
- 创建对话框资源(2)
- MFC的对话框类CDialog
- ManyToMany(多对多)persistence
- JSP中getParameter和getAttribute区别
- C++ 对象的内存布局(下)
- GLSL教程 图形管线 顶点处理器
- OneToMany(一对多)
- 把CDialog对话框资源创建成CDialogBar
- 本地计算机无法启动 world wide web Publishing 服务错误127:找不到指定的程序
- C#中操作Word文档
- 大学生必犯的N大错误(开篇)
- Android里merge和include标签的使用
- 在linux下挂载WINDOWS共享
- PowerDesigner 数据模型 (CDM—PDM—SQL 脚本的转换流程 )
- 网站发布后,出现错误“应用程序中的服务器错误”未将对象引用设置到对象的实例
- mysql如何设置密码啊