关闭

Windows编程基础--第5节 MFC对话框程序

标签: mfcwindows对话框
1890人阅读 评论(0) 收藏 举报
分类:

模式对话框


对话框程序是MFC最重要的组成部分,也是Visual C++中唯一可以可视化设计的窗口程序,对话框主要有两类:

  • 模式对话框:必须关闭这个对话框才能继续操作父窗口或者上一级窗口
  • 非模式对话框:不影响父窗口或者上一级窗口,可继续操作父窗口或者上一级窗口,对话框程序也可以一直保留,无需关闭才能执行下一步;

接来下我们先一起学习模式对话框;

1. 新建项目

建立一个MFC的主对话框项目day04,参见上节,添加两个按钮,分别为“关于”,“聊天”,如图所示:
这里写图片描述

2. 添加关于对话框

在资源视图(ResourceView)中Dialog上右击->Insert Diallog,插入对话框,如图所示:
这里写图片描述
这里写图片描述

3. 添加关于对话框类

单击添加的关于对话框,执行View->Class Wizard,或者使用快捷键Ctrl + W打开类向导;
由于新的对话框不存在关联类,此时会提示创建一个与它相关联的类,选择Create a new class,单击OK创建关联类,如下图所示:
这里写图片描述
这里写图片描述
单击OK完成创建关联类;
这里写图片描述

3. 添加关于按钮消息事件

切换回主对话框,单击主对话框,执行View->Class Wizard,或者使用快捷键Ctrl + W打开类向导;选择关于按钮,增加clicked方法,然后Edit Code编辑关于按钮的响应方法,或者可以直接双击“关于”按钮就可以直接进入按钮点击方法,在day04Dlg.h中添加“#include AboutDlg.h”来引入对话框类,然后我们来编辑关于按键方法,创建一个模式对话框;

void CDay04Dlg::OnButtonAbout() 
{
    // TODO: Add your control notification handler code here
    CAboutDlg dlg;
    dlg.DoModal();
}

效果图:
这里写图片描述
至此,一个模式对话框就创建成功了,我们可以看到,我们必须关闭关于对话框,才能单击主对话框。

非模式对话框

现在我们来创建一个非模式对话框;

1. 添加聊天对话框

在资源视图(ResourceView)中Dialog上右击->Insert Diallog,插入对话框,如图所示:
这里写图片描述

2. 添加聊天对话框类

单击添加的关于对话框,执行View->Class Wizard,或者使用快捷键Ctrl + W打开类向导;
由于新的对话框不存在关联类,此时会提示创建一个与它相关联的类,选择Create a new class,单击OK创建关联类,如上面步骤3

3. 添加聊天按钮消息事件

切换回主对话框,单击主对话框,执行View->Class Wizard,或者使用快捷键Ctrl + W打开类向导;选择聊天按钮,增加clicked方法,然后Edit Code编辑关于按钮的响应方法,或者可以直接双击“聊天”按钮就可以直接进入按钮点击方法,在day04Dlg.h中添加“#include “Chat.h””来引入对话框类,然后我们来编辑聊天按键方法,创建一个非模式对话框;

void CDay04Dlg::OnButtonChat() 
{
    // TODO: Add your control notification handler code here
    CChat * pDlg = new CChat;
    pDlg->Create(IDD_DIALOG_CHAT);
    pDlg->ShowWindow(SW_SHOW);
}

效果图:
这里写图片描述
这里写图片描述
至此,一个非模式对话框就创建成功了,我们可以看到,我们打开聊天界面后还可以继续操作父窗口中的关于对话框,甚至还可以单击聊天对话框创建多个聊天界面;
这里写图片描述

项目源码可以访问我的码云

0
0
查看评论

windows编程---对话框

用过windows的对于对话框并不陌生,其主要用于完成特定的任务,是人机交互的一个方式。对话框可以分为两种:模态对话框和非模态对话框。 模态对话框也可分为两种,一种是系统方式的模态对话框,这种对话框只有当其结束时,你才能访问其他窗口,例如单击关机按钮时,出现的包含待机,重启,关机三个按钮的对话框。...
  • zzh19811015
  • zzh19811015
  • 2012-08-28 11:34
  • 1035

MFC Windows程序设计--对话框,属性表

对话框1.模式 无模式属性表: CPropertySheet,CPropertyPage2.模式对话框创建模式对话框: 1.创建 对话框模板。 2.构造一个 CDialog或派生类对象,封装模板。 3.CDialog::DoModal,DoModal直到对话框被清除后才返回值,返回的是传给...
  • x13262608581
  • x13262608581
  • 2017-04-14 08:04
  • 329

MFC绘制有背景图像的对话框

实用,记上。 1、在网上找到合适的位图,并添加位图资源,例如命名为IDB_BACK1; 2、插入对话框,先拖放控件; 3、在对话框类添加两个变量,位图变量和画刷变量: CBitmap m_bmBack; CBrush m_brBack; 这里声明为类成员是为了避免函数运行完后局部变量被销...
  • hunterlew
  • hunterlew
  • 2014-11-17 10:45
  • 977

MFC基于对话框的的多点触控简单画图程序

原msdn地址 https://msdn.microsoft.com/zh-cn/library/ee851785.aspx 这是基于单文档的,于是想写一个基于对话框的。遇到以下问题解决: 重点问题:关于接收窗口触摸的消息,对话框是放在xxxDlg的OninitDialog中,以下是初始化...
  • PepperEggFriedRice
  • PepperEggFriedRice
  • 2016-05-26 15:32
  • 1043

再探MFC(一)基于对话框的MFC应用程序项目框架

大学毕设时学的MFC,工作头一年还用的MFC,之后再也用不到了.当时买的MFC书籍早就束之高阁了.现在需要开发一个简单的桌面程序,于是我又把MFC捡起来.MFC早已过时,不过如果开发简单的Windows桌面应用,MFC不失为一个简单的选择.
  • soliddream66
  • soliddream66
  • 2015-03-26 13:07
  • 2014

MFC中如何实现对话框的打印

我现在想要对一个对话框实施打印,但是只能打印对话框的一部分,请问如何修改下面程序 CRect m_rect; //获取图像的大小 MyStatic.GetClientRect(m_rect); CDC* pImageDC = MyStatic.GetD...
  • langbochi1386
  • langbochi1386
  • 2017-01-19 03:09
  • 169

MFC设置对话框程序重启并终止原有的程序

在进行相关设置后需进行程序的重启,先弹出对话框: if(MessageBox("更改设置后需重启程序","提示",MB_YESNO) == IDYES) { m_dlgSuperMarket.Restart();//重启程序 ::Ter...
  • liuhongwei_study
  • liuhongwei_study
  • 2012-12-25 16:15
  • 1006

windows基础编程 -- 资源

前言VC环境可以通过资源脚本文件(.rc)给当前程序添加资源,这些资源包括: Accelerator(加速键),Bitmap(位图),Cursor(光标),Dialog(对话框),HTML(网页脚本),Icon(图标),Menu(菜单),StringTable(字符表),ToolBar(工具栏),V...
  • diletrich
  • diletrich
  • 2016-02-18 23:17
  • 336

MFC对话框应用程序显示图像

1 首先创建一个基于对话框的
  • u011331383
  • u011331383
  • 2014-10-14 21:57
  • 1369

Qt5基础(二)编写Qt多窗口程序笔记

笔记中的所有资料原作者:yafeilinux(QT开源社区) 1.tr()函数 01:ui->pushButton->setText(tr("新窗口")); 为了简便,一般会直接在代码中使用中文,但是为了以后可以进行国际化翻译,在界面上显示的字符串一般使用tr()...
  • zhaoyuaiweide
  • zhaoyuaiweide
  • 2017-07-14 19:45
  • 500
    个人资料
    • 访问:40693次
    • 积分:697
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    文章分类