首页 > 代码库 > 在单文档中显示我的第一个对话框

在单文档中显示我的第一个对话框

在单文档中显示我的第一个对话框

 技术分享 (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
}技术分享

在单文档中显示我的第一个对话框