`
isiqi
  • 浏览: 16075666 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

MFC控件篇之对话框的应用

阅读更多
我认为初学者使用以对话框为基础的应用是一个比较好的选择,因为这样一来可以摆脱一些开发界面的麻烦,此外也可以利用ClassWizard自动的添加消息映射。

在VC中提供了生成“以对话框为基础的应用”的功能,你所需要选择的是在使用AppWizard的第一步选择“对话框为基础的应用”,VC会生成包含有应用派生类和对话框派生类的代码。在应用类的InitInstance()成员函数中可以看到如下的代码:

BOOL CMy58_s1App::InitInstance()
{
CMy58_s1Dlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
//dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
//dismissed with Cancel
}

return FALSE;
}

这是产生一个有模式对话框并创建它,在对话框返回后通过返回FALSE来直接退出。在设计时通过编辑对话框资源你可以设计好界面,然后通过ClassWizard映射消息来处理客户的输入,由于前几节已经讲过本节也就不再重复。

同样基于对话框的应用也同样可以使用属性对话框做为界面,或者是通过使用经过派生的通用对话框作为界面。

提示:当你使用有模式对话框时最开始是无法隐藏窗口的,而只能在对话框显示后再隐藏窗口,所以这会造成屏幕的闪烁。一个解决办法就是采用无模式的对话框,无模式的对话框在创建后是隐藏的,直到你调用ShowWindow(SW_SHOW)才会显示。相关代码如下:

BOOL CMy58_s1App::InitInstance()
{
//必须新生成一个对象,而不能使用局部变量
CMy58_s1Dlg* pdlg=new CMy58_s1Dlg;
m_pMainWnd = pdlg;
pdlg->Create();
return TRUE;
}

使用对话框作为子窗口

使用对话框作为子窗口是一种很常用的技术,这样可以使界面设计简化而且修改起来更加容易。

简单的说这种技术的关键就在于创建一个无模式的对话框,并在编辑对话框资源时指明Child风格和无边框风格,接下来利用产生一个CDialog的派生类,并进行相关的消息映射。在创建子窗口时需要利用下面的代码:

int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

//创建子窗口
m_dlgChild.Create(IDD_CHILD_DLG,this);
//重新定位
m_dlgChild.MoveWindow(0,0,400,200);
//显示窗口
m_dlgChild.ShowWindow(SW_SHOW);
return 0;
}

此外还有一中类似的技术是利用CFormView派生类作为子窗口,在编辑对话框资源时也需要指明Child风格和无边框风格。然后利用ClassWizard产生以CFormView为基类的派生类,但是由于该类的成员函数都是受保护的,所以需要对产生的头文件进行如下修改:
class CTestForm : public CFormView
{
//将构造函数和构析函数改为共有函数
public:
CTestForm();
virtual ~CTestForm();
DECLARE_DYNCREATE(CTestForm)
...
}

有关创建子窗口的代码如下:
int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

//对于CFormView派生类必须新生成对象而不能使用成员对象
m_pformChild = new CTestForm;
//由于CFormView的成员受保护,所以必须对指针进行强制转换
CWnd* pWnd=m_pformChild;
pWnd->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,CRect(0,210,400,400)
,this,1001,NULL);
return 0;
}

最后你会看到的窗口界面,上方的对话框子窗口和下方的FormView子窗口都可以通过资源编辑器预先编辑好。

提示:对于CFormView派生类必须新生成对象而不能使用成员对象,因为在CView的OnDestroy()中会有如下代码:delete this;所以使用成员对象的结果会造成对象的二次删除而引发异常。
分享到:
评论

相关推荐

    MFC控件与对话框

    MFC控件与对话框,教你编写MFC中基于对话框的应用程序

    实现MFC对话框应用 基础控件

    利用MFC实现的对话框操作,通过不同的控件的设置控制不同的绘图条件。对基本的控件都有涉及。

    基于MFC的对话框控件的应用程序

    基于MFC的对话框应用程序,简单的控件的使用,实现一个简单的计算器的功能。

    MFC案例_拥有控件提示信息对话框

    MFC的应用之案例——拥有控件提示信息对话框,采用C++的语言编写。

    MFC对话框编程入门

    一个关于MFC对话框相关编程的很好的入门教程,很详细,ppt中包括源码及截图,主要章节如下: 1. MFC及对话框概念 2. Dialog项目的创建与修改 3. MFC的消息处理 4. MFC控件数据交换

    MFC简单控件应用举例

    MFC简单控件 控件是一类用于显示数据、接受输入和完成操作的图形对象,一般放置在对话框或窗口中。

    VS2013-MFC-基于对话框编程

    该文档是关于MFC对话框编程的材料。文档中包括如何利用MFC 对话框进行编程,基于对话框编程的程序执行流程以及各种控件开发使用方法等。适合初学者使用

    MFC动态创建COMBOX控件以及CHECKBOX控件

    MFC实现动态创建COMBOX控件以及CHECKBOX控件的例子,还有在类里头创建线程的应用

    MFC 编程入门教程55篇完整版.pdf

    VS2010/MFC 编程入门之七(对话框:为对话框添加控件) VS2010/MFC 编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC 编程入门之九(对话框:为控件添加消息处理函数) VS2010/MFC 编程入门之十...

    mfc对话框及控件使用

    创建一个对话框应用程序。 要有自定义的对话框类并加以使用。 要有对Windows标准控件和通用控件的使用,功能自定义。

    MFC与数据库SQL连接建立MFC单文档应用程序,在程序中新建一个对话框,作为登陆对话框C++

    MFC与数据库SQL连接建立MFC单文档应用程序,在程序中新建一个对话框,作为登陆对话框,在SQL中进行配置,基于C++语言,进行编程,可通过登陆名与密码进入系统.zip

    建立一个基于对话框的MFC应用程序SCommTest

    建立一个基于对话框的MFC应用程序SCommTest 实例

    基于MFC的Socket对话框聊天程序(报告+代码+运行结果)

    基于网络聊天应用的普及,以VC++6.0为平台,采用MFC控件设计聊天程序的对话框实现基于TCP/IP协议的点对点聊天工具。本聊天工具通过输入服务器端的IP地址将客户端和服务器端连在一起,实现两者间的实时通信,并提供...

    VS2010-MFC编程入门

    VS2010-MFC编程入门之七(对话框:为对话框添加控件)-软件开发-鸡啄米 VS2010-MFC编程入门之八(对话框:创建对话框类和添加控件变量) VS2010-MFC编程入门之九(对话框:为控件添加消息处理函数)-软件开发-鸡啄米...

    MFC 对话框以及控件自动缩放类

    已经应用过,感觉很方便,只需定义一个该类的对象,将需要自动缩放的控件加入即可,详细操作,请查阅有关资料。

    基于mfc的学生信息管理系统

    ⑴ 利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件; ⑵ 设计通讯录的数据结构(如:以数组或者动态链表)和相应的类; ⑶ 完成对通讯录中记录的增加、修改、删除和显示。 ⑷ 将通讯录存入文件。...

    鸡啄米:VS2010-MFC编程入门教程(1-55).docx

    VS2010/MFC编程入门之七(对话框:为对话框添加控件) VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数) VS2010/MFC编程入门之十...

    MFC_对话框和常用教程.doc

    MFC_对话框和常用教程.doc对话框是Windows应用程序中最重要的用户界面元素之一,是与用户交互的重要手段,在程序运行过程中,对话框可用于扑捉用户的输入信息或数据。对话框是一个特殊类型的窗口,任何对窗口进行的...

    对话框中属性框控件

    将框架中常见的属性框控件应用到对话框中,编程环境:VS2003 MFC

    MFC程序开发参考大全 源码

     全书共分19章,包括MFC应用程序概述,C++面向对象程序开发,消息映射与命令处理,对话框程序设计,MFC通用控件,菜单,工具栏和状态栏设计,GDI绘图,文档,视图结构程序设计,MFC打印技术,文件与注册表操作,...

Global site tag (gtag.js) - Google Analytics