第6章 VC++和MFC之窗口和对话框编程

合集下载

vc++MFC基础教程

vc++MFC基础教程

1.2.3 编辑区
• 在Visual C++中,编写应用程序代码的位置就是编辑区。该编辑区的 功能十分强大,智能化程度也非常高。在编辑区内,除了能编写 C/C++语言外,还能编写SQL、HTML和VBScript等其他编程语言。 如下图所示。
1.2.4 联机帮助
• Visual C++6.0不像其他集成开发环境一样把帮助系统集成在开发环境 内部,而是提供了一个专门为Visual C++设计的MSDN类库。MSDN 虽然是一个独立的帮助系统,但却能很好地和Visual C++6.0集成在一 起。 • MSDN的使用方式有以下几种: • 单击【Help】|【Contents】命令; • 单击【Help】|【Search】命令; • 单击【Help】|【Index】命令; • 按下【F2】键。 • 通过上述几种命令方式,即可运行MSDN。
1.2.1 工作区窗口和输出窗口
• Find in Files 1和Find in Files 2:两个选项卡的作用相同,用于显示 从多个文件中查找字符串的结果。当用户想要查看某个函数或变量出 现在哪些文件中,单击【Edit】|【Find in Files】命令,弹出【Find in Files】对话框,如下图所示。在【Find in Files】对话框中的 【Find what】后的编辑框中,输入想要查找的内容,单击【Find】按 钮即可。查找到的内容会输出到Find in Files选项卡中。
第1章 Visual C++集成开发环境
• Visual C++是一个功能强大的可视化应用程序开发工具。其凭借强大 功能,受大了广大程序员的欢迎。当今流行的Visual C++的开发工具 是6.0版本。下面来介绍Visual C++ 6.0的一些基本情况。

Visual C 教学课件:第6章 基于对话框的应用程序

Visual C  教学课件:第6章 基于对话框的应用程序
|SBS_VERT, rt, this,IDS_DEMO);
第6章基于对话框的应用程序
6.3 滚动条控件 程序举例:
pMyScroll->SetScrollRange(SB_VERT, -100,100); // 设置滚动范围
// 设置滑动块位置 pMyScroller->SetScrollPos(0);
void ReplaceSel( LPCTSTR lpszNewText, BOOL bCanUndo = FALSE );
第6章基于对话框的应用程序
6.5 编辑框控件---成员函数
BOOL SetReadOnly( BOOL bReadOnly = TRUE ); void Copy( ); void Cut( ); void Paste( ); BOOL Undo( ); void Clear( );
DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
第6章基于对话框的应用程序
6.4 列表框控件---成员函数
int AddString( LPCTSTR lpszItem ); int DeleteString( UINT nIndex ); int InsertString( int nIndex, LPCTSTR lpszItem ); void ResetContent( ); int SelectString(int nStartAfter, LPCTSTR lpszItem );
第6章基于对话框的应用程序
教学重点 1、对话框基本概念
对话框设计、对话框初始化、数据交换机制 2、标准控件编程
按钮、滚动条、列表框、编辑框、组合框等 3、定时器消息编程

6vc对话框与控件

6vc对话框与控件
23
前一页
休息
6 对话框与控件
信息技术学院
技术要点总结:
对话框控件和相关MFC类(P155,表6-2) 用于对话框控件的CWnd成员函数(P155,表6-3) 对话框编辑器
控件工具箱:”右击工具栏/control” “Tools/Customize…/ToolsBars/Control” 修改控件的Tab键次序:”编排(Layout)/Tab Order”;或 Ctrl+D按新的次序依此用鼠标单击各个控件,新的Tab键 次序即可生成. 控件布局工具栏:P159,图6-5,设置Layout/Guide Setings 测试对话框:Ctrl+T

为MyHello程序添加”口令”对话框
11
前一页
休息
6 对话框与控件
信息技术学院
预备知识

对话框是实现人机交互的重要手段,对话框不但 可以接收消息,而且可以被移动和关闭.
1.对话框类型
无模式对话框 模式对话框

允许用户在该对话框 与应用程序其他窗口 之间的切换
不允许用户在关闭对话 框之前切换到应用程序 的其他窗口
编辑对话框属性 向对话框内添加控件 ——添加/选取/控件的布局/测试对话框 使用ClassWizard,为对话框资源创建一个新类CMyDlg,为控件 进行消息映射
afx_msg void OnButton1(); //向导完成 ON_BN_CLICKED(IDC_BUTTON1, OnButton1) //向导完成
name:m_Password Category: Value Variable type:CString
Variable
创建: DDX_Text(pDX, IDC_PASSWORD_EDIT, m_password)

VC6.0中应用程序对话框的创建过程.doc

VC6.0中应用程序对话框的创建过程.doc

VC中自己创建对话框的方法这里讲在VC中不需要打开MFC工程,通过代码直接创建一个对话框,我看这个对话框比MFC的漂亮多了,而且要写会代码不需要研究MFC就直接开发新的工程.先打开VC++ 6.0 版本, 第一步:创建一个工程名为:Main Dialog的Win32 Application。

创建过程如下:打开File菜单中New,选自Win32 Application,工程名为:Main Dialog,点击OK,再选自A simple Win32 application。

点击Finish,再点击OK.(见图1)第二步:创建资源脚本。

再打开File菜单中New,选自File选项的Resource Script(就是资源脚本),文件名为Dialog,点击OK。

(见图2)第三步:插入对话框。

刚才建立的脚本Dialog显示为Dialog.rc,就在Dialog.rc上面点击鼠标右键Insert(插入)Resource中选自插入Dialog(对话框),点击New(新建),这样对话框插入完毕。

(见图3)第四步:添加resource.h。

我们把第四步插入的对话框ID改为IDD_MAIN ,在FileView中有个Header Files的文件,上面点击右键,选择Add Files to Folder...(添加文件到目录),弹出一个工程目录窗口,中间找到resource.h,然后OK了(添加)。

(见图4)第五步:复制代码。

双击Main Dialog.cpp,我们写代码的位置出现了(见图5),那里有几行代码,把它们全部删掉,下面已经准备好的代码全部复制到那里,编译,执行,您的是否成功了?#include "stdafx.h"#include "resource.h"#include <windowsx.h>BOOL WINAPI Main_Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);BOOL Main_OnInitDialog(HWND hwnd,HWND hwndFocus,LPARAM lParam);void Main_OnCommand(HWND hwnd,int id,HWND hwndCtl, UINT codeNotify);void Main_OnClose(HWND hwnd);int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){DialogBox(hInstance,MAKEINTRESOURCE(IDD_MAIN),NUL L,Main_Proc);return 0;}BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){switch(uMsg){HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);}return FALSE;}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){return TRUE;}void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){switch(id){case IDOK:{MessageBox(hwnd,TEXT("Thank you build me!"),TEXT("Happy"),MB_OK);}break;default:break;}}void Main_OnClose(HWND hwnd) {EndDialog(hwnd, 0);}执行以后的对话框图(见图6)是不是比MFC的漂亮!这对话框的缺点就是弹出时不是出现在显示器中间而老是出在显示器左上角,我不知道怎么调整,可定有办法把它显示在中间,有人知道解决的技巧,请教一下,我对他必有回报,我自己知道的一些会献给他!。

MFC控件与对话框

MFC控件与对话框

29
命令按钮( 命令按钮(PushButton) )
响应用户的输入, 响应用户的输入,触发相应的事件
CButton
复选(检查) 复选(检查)框 (CheckBox) )
用做选择标记,可以有选中、 用做选择标记,可以有选中、不选中和不确定三 CButton 种状态
2
常用控件
单选按钮( 单选按钮(RadioButton) ) 用来从两个或多个选项中选定其中一项 CButton (分)组框(GroupBox) 组框( ) 显示正文和方框, 显示正文和方框,主要用来将相关的一些控件聚成一 组 CButton
8
先创建对话框
在项目的资源视图中 选择Dialog 选择Dialog 项后,右 键单击选择插入 Dialog资源。 Dialog资源。 设置该对话框的 ID属性为: ID属性为: IDD_EX_DLGCTRLS_DI ALOG
9
添加对话框
10
运行效果
对话框在哪里?
11
(1)创建对话框类
在对话框资 源模板的空 白区域内双 击鼠标,或 右键添加类, 为对话框资 源创建一个 新类。
24
运ห้องสมุดไป่ตู้效果
25
添加编辑框
通过工具箱添加一个编辑框, 默认ID为:IDC_EDIT1,右 键为该编辑框添加关联变量。
26
单击计算按钮给编辑框关联的整型变量m_val1赋值 单击计算按钮给编辑框关联的整型变量m_val1赋值 ,并在编辑框中显示出来:
void CEx_DlgCtrls_DLG::OnBnClickedCalButton() CEx_DlgCtrls_DLG::OnBnClickedCalButton() { // TODO: 在此添加控件通知处理程序代码 //MessageBox(L"你按下了“计算”按钮!"); //MessageBox(L"你按下了“计算”按钮!"); UpdateData(); UpdateData(); 变量m_val1自动关联着编辑框,但编辑 自动关联着编辑框, 变量 自动关联着编辑框 m_val1=15; 框的内容要实时变化, 框的内容要实时变化,需要及时更新其 UpdateData(FALSE); UpdateData(FALSE); 数据内容。 数据内容。 }

高级语言程序设计第六章MFC编程基础

高级语言程序设计第六章MFC编程基础

MessageBox(str);
CFrameWnd::OnLButtonDown(nFlags,point);
}
2024/4/1
13
BOOL CMinApp::InitInstance() {
m_pMainWnd=new CMainFrame;//生成主窗口对象指针 m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); m_pMainWnd->UpdateWindow(); return TRUE; } CMinApp MyApp;//生成应用程序对象并执行应用程序
▪ 程序的退出方式:文件close命令,系统送出 WM_CLOSE,DefwindowProc对其处理,调 用DestroyWindow把窗口清除,后者送出 WM_DESTROY,程序调用 PostQuitMessage,其发送WM_QUIT, GetMessage获得后结束消息循环。
MFC程序与WIN32的对比(1)
2024/4/1
4
4 MFC体系结构
▪ MFC是个相当庞大的类库,各个类间的继 承与派生关系井井有条。
CObject类是MFC的基类,其它大部 分类都是从CObject派生而来的。CObject 类的派生类按功能可分为多个部分。下面 简要介绍部分常用的类的派生结构。
2024/4/1
5
4.1 窗口类
DECLARE_MESSAGE_MAP() 2、 建立消息与处理函数之间的映射 格式:
BEGIN_MESSAGE_MAP(子类名,父类名) //消息映射宏定义或消息映射语句(根据使用消息的多少,一般有若干个)
ON_…([消息名或控制号,处理函数名]) END_MESSAGE_MAP()

第六章 MFC与对话框编程

第六章  MFC与对话框编程
对分组框、静态文本框仅设置其标题(caption)属性 对编辑框(文本框)仅设置其ID属性 对一组单选按钮,每个单选按钮都设置其标题(caption)属性, 但仅设置该组第一个单选按钮的ID属性,仅选中该组第一 个单选按钮的Group属性和Tabstop属性 对复选框,设置其ID属性和标题(caption)属性 对组合框,设置其ID属性、初始化列表项和类型属性 对列表框,设置其ID属性、初始化列表项 对按钮,设置其ID属性和标题(caption)属性
一个创建模式对话框的实例(11 )
运行对话框
void CRegisterView::OnEditRegister() { CRegisterDialog dlg(this); if (dlg.DoModal()==IDOK) { CString str; GetWindowText(str); str+="姓名:"+dlg.m_strName+"\r\n"; str+="性别:";str+=dlg.m_nSex?"女":"男";str+="\r\n"; str+="婚否:";str+=dlg.m_bMarried?"已婚":"未婚";str+="\r\n"; str+="就业:";str+=dlg.m_nWork?"下岗":"在职";str+="\r\n"; str+="工作单位:"; str+=dlg.m_strUnit; str+="\r\n"; str+="单位性质:"; str+=dlg.m_strKind; str+= "\r\n"; str+="工资收入:"; str+=+dlg.m_strIncome; str+= "\r\n"; SetWindowText(str); } 在RegisterView.cpp文件的开头加入 #include "RegisterDialog.h" }

mfc对话框编程

mfc对话框编程

Ok按钮的消息处理函数
如果在编辑框上按回车键,对话框就关闭了。原因
是OK按钮是缺省按钮。作为缺省按钮,当你在对话 框上按了回车键后,就由你的缺省按钮的处理函数 来进行响应。在基类的OnOk函数中,关闭对话框。
WM_INITDIALOG
WM_INITDIALOG消息,是在对话框创建完成以及
它上面的控件创建完成,在显示之前发送的消 息。我们可以捕获这个消息。在这个消息处理
• 创建对话框窗口 :分有模式对话框的创建(DoModal)和 非模式对话框的创建(Create)
对话框的种类
•有模式对话框
用于交换一些重要信息,强制用户完成所要求的动作
有模式对话框在打开状态时,禁止用户在应用的其它 地方进行工作,但多数允许用户切换到其他的应用程 序中。
•无模式对话框
不禁止父窗口,它允许用户不需要关闭该无模式对话 框,就可返回到另一任务。Find对话框就是一例
对话框控件访问七种方式
• GetDlgItem()->Get(Set)WindowText( )
• GetDlgItemText()/SetDlgItemText( ) • GetDlgItemInt()/SetDlgItemInt( ) • 将控件和数值型变量相关联 • 将控件和控件变量相关联 要用到UpdataData函数,这个函数的作用是用来初始化数据
逃跑按钮的其他实现方法
可以只创建一个按钮,将这个按钮关联我们新创建 的类,然后跟踪鼠标移动消息,通过SetWindowPos
或MoveWindow函数来移动按钮实现。
GetClientRect(&rect)是得到窗口客户区域的大小,左上角坐标永远是 (0,0),右下角坐标是窗口的宽度和高度。 GetWindowRect(&rect)是得到整个窗口的大小和位置,左上角坐标和 右下角坐标,是相对于屏幕左上角来说的。 MoveWindow或 SetWindowPos中的 x,y坐标,对于对话 框来说,是相对于屏 幕左上角的,对于对 话框上的控件来说, 是相对于对话框的客 户区的左上角来说的
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

: 树式控件
: 选项卡控件
: 动画
: 多信息编辑
: 日期-时间选择器
: 月历
: IP地址
: 自定义控件
: 扩展组合框
2
选择
0
按钮
0
复选框
8 控
文本编辑框

组合框

列表框

分组框

..
单选按钮
静态文本框
图形控件
水平滚动条
垂直滚动条
滑块控件
微调控件
进度指示器控件
2
热键
0
列表控件
0
树形控件
8 控
选项卡控件
第6章 MFC编程实例之窗口和对话框编程
§6. 1 MFC编程实例之窗口程序
第一步:使用新建项目向导建立窗口程序框架
其中:1. 单个文档(SDI):只有一个视窗的窗口程序
2. 多个文档(MDI):可以有多个视窗的窗口程序
注:选择“文件—>新建/打开”
3. 多个顶级文档:可以有多个窗口(框架)的窗口程序
第三步:手工添加代码且生成解决方案(编译)和执行
编译、执行:“顶层菜单+1层菜单1”结果
执行:“顶层菜单+1层菜单2”结果
向工具栏中添加和编辑按钮
编译、执行结果⑴
执行结果⑵
直接点击“11”按钮运行结果:
直接点击“12”按钮运行结果:(参见程序“MfcWin(6-1)”)
注意:如果“按钮”是独立的(不同某菜单项关联),则需手工添 加代码来实现。参见附件:关于VC++杂谈(二)
注:本节仅以CFontDialog类为例进行讲解
步骤1:在CMfcWinView类中声明3个变量
步骤2:在CM3:在CMfcWinView类添加一个菜单命令,用于弹出 字体对话框并保存返回值
手工添加代码
步骤4:在CMfcWinView::OnDraw()函数中手工添加代码
编辑相应控件的标识符如下:
IDC_DISPLAY
IDC_PROGRESS IDC_MILLISECONT
IDC_START
使用添加成员变量向导 为控件标识符添加变量
(也可以手工添加)
其中: 标识符“IDC_DISPLAY” 添加int变量“m_Display” 标识符“IDC_MILLISECONT” 添加int变量“m_Millisecond” 标识符“IDC_PROGRESS”添加CProgressCtrl变量“m_CtrlProgress”

动画控件

扩展文本编辑框
具 箱
日期-时间选择器
..
月历控件
IP地址控件
扩展组合框
自定义控件
超文本连接控件
拆分按钮
网络地址控件
命令按钮空间
注:删除所有控件
添加控件如下:
其中:“线程 1”、 “线程 2”是分组框; “示例编辑框”(2个) 是文本编辑框; “时间/秒”是静态文本框; “开始”是按钮; 含有绿色的长方形图形是进度指示器控件(进度条)
生成的SDI项目
运行结果:
运行结果:
向导生成的SDI项目分析
生成了4+1个类
分析:“类视图”列表中4+1个类之间的关系如图:
CAboutDlg
其中:CMfcWinApp是主类相当于main()
第二步:向导+手工添加、编辑资源
添加标题
汉字是手工 添加的标题
编译、执行结果:
手工添加声明代码
/**********************自己手工书写的代码起始位置*********************/ //定义一个结构类型,类型名是“threadInfo”。注意:这个位置是在类的外部 struct threadInfo {
UINT nMilliSecond; //注:“typedef unsigned int UINT; ” CProgressCtrl* pctrlProcess; //声明一个进度条类“CProgressCtrl”指针对象
§6. 2 MFC对话框程序的实现
利用新建项目向导生成对话框程序框架
向对话框添加控件
6
: 选择
:图形控件
. 0
: 静态文本
: 编辑框

: 分组框
: 按钮
件 工
: 复选框
: 单选按钮

: 组合框
: 列表框

: 水平滚动条
: 垂直滚动条
..
: 微调按钮
: 进度指示器
: 滑块
: 热键
: 列表控件
注:或者双击开始按钮控件
手工编写实现代码
编译运行结果
注:参见程序“MultiThread(两个线程)”和“MThread(三个线程)”
§6. 3 窗口中对话框的实现
重新打开“MfcWin”项目
在对话框中添加一个树形控件和一个静态文本控件 并进行如下调整
树形控件的属性设置
静态文本控件的属性设置
行(处理)对话框以外的操作(事情) 例如,前面我们建立的对话框都是模态对话框 非模态对话框:采用异步调用方式,即在关闭这个对话框之前能够
进行(处理)对话框以外的操作(事情) 其中:
1.非模态对话框的建立不使用CDialog::DoModal函数,而是使 用CDialog::Create函数, Create函数原型如下:
为对话框资源添加类
为对话框添加类重载初始化函数
为树形控件标识符“IDC_TREE1”添加变量“m_TreeCtrl”
添加树形控件点击树节点时响应的事件处理程序
添加的结果
手工添加代码
编译、执行结果(注:参见程序“MfcWin(6-2) ”和“MfcWin(6-3)”)
说明:对话框分为两种类型,模态对话框和非模态对话框。 模态对话框:采用同步调用方式,即在关闭这个对话框之前不能进
给菜单标识符添加事件处理程序
编译、执行结果
使用添加资源向导在项目中 添加一个对话框资源且编辑对话框
编辑标题:属性的Caption中的“Dialog”改写成“测试“1MENU1”菜单项”
使用工具箱在对话框中添加两个Static Text控件,且编辑控件(在属性页中)如下
编辑属性ID中的“ID_DIALOG1”为“ID_MENU11_DLG”
//“pctrlProcess” };
UINT ThreadFunc2(LPVOID lpParam); //声明一个函数,将来做为第2个线程函数 //注意:这个位置也是在类的外部 //说明,工作者线程对应的函数的原型必须
//是:UINT <函数名>(LPVOID lpParam) //注意:“typedef void *LPVOID;”。 //即没有类型就意味着可以是任何类型 /**********************自己手工书写的代码结束位置*********************/
Create(UINT nIDTemplate, CWnd* pParentWnd = NULL)
⑴ nIDTemplat是对话框资源的ID ⑵ pParentWnd是指向窗口类对象指针,默认值NULL或this指
针(均表示当前窗口)。例如: Create(IDD_MENU11_DLG, NULL);
或 Create(IDD_MENU11_DLG,this); 2. 不能采用“依赖关系”同非模态对话框对象关联,可采用“关
联关系”或在函数中声明当前对话框类的指针对象与之关联。
例如:正确代码:
CDialog11 *pDlg11=new CDialog11; pDlg11->Create(IDD_MENU11_DLG,this); pDlg11->ShowWindow(SW_SHOW); 错误代码:
CWnd::DestroyWindow()
§6. 4 通用对话框的使用
通用对话框有: •CFontDialog类:用于选择字体对话框 •CColorDialog类:用于选择颜色对话框 •CFileDialog类:用于实现打开和保存文件对话框 •CFindReplaceDialog类:用于查找和替换文本对话框 •CPrintDialog类:用于打印和打印设置对话框 • 等等……
CDialog11 dlg11; dlg11.Create(IDD_MENU11_DLG, this); dlg11.ShowWindow(SW_SHOW);
注:课后练习,用“关联关系”实现上述关联
3. 当点击非模态对话框的“退出”按钮退出对话框,其结果是对 话框并没有真正退出(撤销),只是隐藏起来(不显示了)。 要想撤销非模态对话框,需要重载CDialog::OnCancel/OnOk函 数,并且在重载的函数中不要有以下语句: CDialog::OnCancel(); 和 CDialog::OnOk(); OnCancel和OnOk()函数均调用CDialog::EndDialog()函数来撤 销模态对话框,非模态对话框的撤销需调用以下函数来实现:
编译、执行结果
(注:参见程序“MfcWin(6-2) ”和“MfcWin(6-3)”)
课后练习
构造两个并行对话框之间的数据交换程序 程序运行结果,参见下页。
向菜单栏中添加菜单项
用鼠标把它拖到第一项,双击“1层菜单1”菜单项打开右面的属性页 将属性页之菜单编辑器中的ID中的标识符名“ID_32771”改写成“ID_MENU_11”
按照设置“1层菜单1”方法设置“1层菜单2”菜单项
编译、执行结果
使用添加事件处理程序(消息映射函数) 向导
相关文档
最新文档