在单文档中显示我的第一个对话框
(2010-04-19 21:19:50)标签: it |
今天编写了在单文档中创建对话框以及调用对话框的代码,收获很多;
1:OnInitDialog函数的加载问题尤其是在VS上的加载;(这一点花了很长时间才查到资料)
OnInitDialog()函数是个virtual(虚函数),在它的类中用添加虚
函数的方法,会发现添加的虚函数里面没有这个函数,而这个
OnInitDialog函数是很有用的,在一般的添加进去的对话框的类中
是不会有这个函数的,必须手工增加进去,当然不用手工写代码,手
动添加时可能会出错.可以通过VC加进去,而要加的这个函数的名
字不是OnInitDialog,所以很难找到.其原因是因为要加的函数是
WM_INITDIALOG.
这个函数的添加方法是这样的,选择要加入函数的对话框,右键-
>ClassWiZard(类向导)->Message Maps(消息映射),对象里面选择
对话框,Messages(消息)里面选择WM_INITDIALOG,然后点Add
Function(增加函数),这样就映射到类中去了,它的函数名称是
OnInitDialog,而不是WM_INITDIALOG.这时可以点Edit Fuction,
编辑函数了.
Visual studio 没有旧风格class wizard了。所以无
法像VC6.0那样添加oninitdialog函数。其方法是:首先添加
CDialog对话框的类,方法是可以在对话框上点右键,在右键菜
单里点Add Class,然后打开刚才添加的类的头文件,在头文
件的类的声明区里按F4调出属性窗口,在属性窗口的工具栏里
找到Overrides点击它会切换到重写方法列表界面,在这个列
表里找到OnInitDialog,点后面的下拉组合框就有添加
OnInitDialog了,点一下就可以把这个方法重写到你的程序里
了。
还有两个要注意的问题是:
一个是:子对话框添加类后,打开此类的头文件,注意了:一定
要确认鼠标光标处于类声明的区域,这个时候再打开属性窗口,
点击工具栏上的Overrides(重写),里面可以找到
OnInitDialog.
如果鼠标没处在类声明的区域,属性窗口就显示的是当前头文件
的属性,工具栏是不会有Overrides(重写)这一项的。
另一个是:
ADD Class后 要在左边文件列表上面选择 show all files (显示所有文件)后 再打
开添加的类的头文件 ....这样才行的 .......
就是你为子对话框添加完类后,在vs的左边文件列表上选择show all files。
然后点击进去你添加的类的头文件。这时在(一般)右边的属性窗口里
会有一个图标(Overrides)点击它
2:由“在程序中调用对话框”所学习到的;
不同的域对应不同的头文件以及执行文件,eg:菜单中测试对话框对应的头文件就是MainFrm.h对应的执行文件是MainFrm.cpp而对于对话框中的控件对应的就是FirstDlg.h以及FirstDlg.cpp.
3:连接包含问题
当主菜单要与对话框进行连接时,在OnTestDlg函数的实现文件MainFrm.cpp的前面添加CFirstDlg类的包含语句:#include "FirstDlg.h"进行连接;
代码:
##include "FirstDlg.h"
void CMainFrame::OnTestDlg()
{
// TODO: 在此添加命令处理程序代码
CFirstDlg dlg; //定义对话框类对象;
dlg.DoModal();//显示对话框;
}
BOOL CFirstDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
CStatic *pWnd=(CStatic*)GetDlgItem(IDC_STATIC1);
pWnd->SetWindowTextW(_T("这是我的第一个对话框"));
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}