windows对话框程序设计
第03课 - 窗口创建

窗口创建
作者:李星华
纲目
Windows程序设计-基础教程
1
2 3
基础知识回顾
窗口概念
创建窗口
4
消息机制
2
Windows程序设计-基础教程
基础知识回顾
3
基础知识回顾
Windows程序设计-基础教程
匈牙利命名法是一种编程时的命名规范。基本原 则是:变量名=属性+类型+对象描述,其中每 一对象的名称都要求有明确含义,可以取对象名 字全称或名字的一部分。命名要基于容易记忆、 容易理解的原则。
27
人文改变历史, 科技创造未来!
28
窗口概念
7
窗口概念
Windows程序设计-基础教程
B A
C
D
8
E
窗口概念
Windows程序设计-基础教程
窗口是用户与计算机最重要的交互部分,它是屏 幕上的一个矩形区域,它接收用户的输入并以文 字或图形的形式显示输入的内容。
每当用户开始运行一个应用程序时,应用程序就 创建并显示一个窗口,当用户操作窗口中的对象 时,程序会作出相应反应。
// 注册窗口 RegisterClassEx(&wcex);
18
创建窗口
Windows程序设计-基础教程
创建窗口使用CreateWindow或 CreateWindowEx函数来实现。
19
显示及更新窗口
Windows程序设计-基础教程
显示及更新窗口需要使用ShowWindow、 UpdateWindow函数。
14
创建窗口
Windows程序设计-基础教程
Win32应用程序,窗口作为最主要的组成部分 ,创建过程会相对复杂一些,窗口创建需要五个 步骤:
06 Windows通用对话框

表5.6
字体对话框常用成员函数
成员函数 DoModal GetCurrentFont GetFaceName GetStyleName GetSize GetColor GetWeight IsStrikeOut IsUnderline IsBold IsItalic
功能描述 显示字体对话框 获取当前选定的字体名 获取选择字体的字体名称 获取选择字体的风格名称 获取选择字体的大小 获取选择字体的颜色 获取选择字体的磅数 字体是否具有删除线 字体是否具有下划线 字体是否加粗 字体是否倾斜
(9)为“替换”按钮处理单击事件,创建“替换”对话框。代码如下:
void CFindAndReplaceDlg::OnButton2() {
dlg = new CFindReplaceDialog; dlg->Create(FALSE,NULL); dlg->ShowWindow(SW_SHOW); find = FALSE; }
//创建文件并以写方式打开
m_RichEdit.GetWindowText(strText); //获得控件内文本
strcpy(write,strText);
file.Write(write,strText.GetLength()); //向文件中写入数据
file.Close();
//关闭文件
}
通过CFileDialog方法构造“另存为”对话框,使用GetPathName方法获得保存文件的路径,通过 GetWindowText方法获取Rich Edit控件中文本,再使用CFile类向文件中写入文本。 程序运行结果如图5.21所示。
long CFindAndReplaceDlg::OnFindReplace(WPARAM wParam, LPARAM lParam)
对话框及常用控件

2
对话框程序的创建
2.1 一个对话框程序 2.2 创建对话框资源模板 2.3 利用对话框类CDialog操纵对话框 2.4 初始化对话框 2.5 对话框的调用 2.6 对话框的消息处理
2.1
一个对话框程序
1.程序功能 该应用程序具有认证的功能:当该程序运行时,首先弹 出一个“密码验证” 对话框,让用户输入其用户名和密 码。用户需要输入用户名“good”和用户密码“ good ” 后才能进入主界面,若有一个输入错误,都不能进入。 2.程序类型
1.3 对话框的组成(续)
对话框类 从CDialog类派生的对话框类提供编程接口来 管理与对话框模板相关联的对话框。 CDialog 类的 许多成员函数与对话框编程密切相关,可供程序员 调用。由于对话框是一种窗口,因此相应的对话框 类必须与一个Windows窗口相联系,而对话框资源 模板就是用于创建这个 Windows窗口及其包含在其 中的控件。 对话框类可以看作对话框应用程序的一种程序 员接口,用户对应用程序操作,后台调用的都是该 类的成员函数来完成的。
可见在对话框的构造函数中主要是对对话框的数据成员变量 进行初始化。
2.4
初始化对话框(续)
2.在WM_CREATE的消息映射函数中初始化 由于对话框也是窗口,它在窗口创建时会收到 WM_CREATE 消息,该消息的响应函数是 OnCreate()。 这样,就能在窗口创建中做一些初始化工作。尽管用户 可能在 WM_CREATE 消息处理函数中进行一些数据成员 的初始化工作,但更通常的做法是在对话框中的所有控 件都建立起来之后,响应消息 WM_INITDIALOG 时,对 数据成员进行初始化。 3.在WM_INITDIALOG的消息映射函数中初始化 在对话框创建时,会收到 WM_INITDIALOG 消息,该 消息的响应函数是OnInitDialog()。在得到了
mfc对话框 析构函数

mfc对话框析构函数MFC(Microsoft Foundation Classes)对话框是Windows编程中常用的一种界面设计方式。
在使用MFC对话框进行界面开发时,析构函数的作用是释放资源,避免内存泄漏等问题的发生。
本文将围绕“MFC对话框析构函数”展开讨论。
一、MFC对话框的基本概念与使用MFC对话框是Windows编程中常用的一种界面设计方式,它是由对话框资源(Dialog Resource)创建出来的窗口界面。
在使用MFC创建对话框界面时,我们可以使用MFC应用程序向导,或手动创建对话框类(如CDialog或其子类)。
在对话框类中,我们可以处理各种事件(如OnInitDialog、OnOk、OnCancel等),并在其中完成对话框的初始化、数据验证、数据传递等操作。
而析构函数则用于在对话框关闭时释放资源,确保程序的健壮性和稳定性。
二、MFC对话框析构函数的作用MFC对话框的析构函数作用是释放资源,避免内存泄漏等问题的发生。
在析构函数中,我们可以清理对话框内部创建的对象、关闭打开的文件、释放分配的内存等。
在具体实现中,我们可以通过以下步骤完成对话框的资源释放:1. 确定析构函数的名称和参数,例如:```CMyDlg::~CMyDlg(){// your code here}```2. 在析构函数中释放对话框内部创建的对象(如控件、字体、位图等),例如:```CMyDlg::~CMyDlg(){if (m_pMyControl){delete m_pMyControl;m_pMyControl = NULL;}}```3. 在析构函数中关闭打开的文件和数据库连接,例如:```CMyDlg::~CMyDlg(){if (m_pDB != NULL){m_pDB->Close();delete m_pDB;m_pDB = NULL;}if (m_pFile != NULL){m_pFile->Close();delete m_pFile;m_pFile = NULL;}}```4. 在析构函数中释放动态分配的内存,例如:```CMyDlg::~CMyDlg(){if (m_pData != NULL){delete[] m_pData;m_pData = NULL;}}```5. 避免异常或错误情况下资源的泄漏,例如:```CMyDlg::~CMyDlg(){try{// your code here}catch (...){// handle exceptions here}}```三、MFC对话框析构函数的注意事项在编写MFC对话框析构函数时,我们也需注意以下几点:1. 不要重复释放对象或内存。
Windows程序设计 第3章 对话框和常见控件

树形控件
树形控件(TreeCtrl)和下面要讲的列表控件(ListCtrl) 在系统中大量被使用,例如Windows资源管理器就是一 个典型的树形控件例子。 树形控件可以用于树形的结构,其中有一个根接点(Root) (Root) 然后下面有许多子结点,而每个子结点上有允许有一个 或多个或没有子结点。MFC中使用CTreeCtrl类来封装树 形控件的各种操作。通过调用 BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
滚动条控件
滚动条(Scroll Bar)一般不会单独使用,因为SpinCtrl 可以取代滚动条的一部分作用,但是如果我们需要自己生 成派生窗口,滚动条还是会派上一些用场。创建一个滚动 条可以使用成员函数: : BOOL CEdit::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
MFC 提供类CDialog作为对话框服务的基类,类CDialog将对话框模板与使 用对话框时必需熟悉的几种类方法进行封装。对于对话框中发送消息的的 控件,我们可创建相应的消息处理程序。MFC编译器提供的框架工具使得 我们把对话框中的控件消息映像到派生类的类函数变得简单、快捷。对话 框数据映像函数使用专门的值初始化对话框中的控件,接着检索数据并使 之有效。大多数对话框需要类成员变量来跟踪用户的输入,这些数据在数 据映像中使用,它们在对话控件与类变量之间自动映像数据。 为创建对话框,首先建立CDialog对象,然后创建和显示对话框窗口我们 有两种选择:一种方法是调用函数CDialog::DoModal()来创建有模式对话 框窗口,另一种方法是调用函数CDialog::Create()来创建无模式对话框窗口, 在上述两种情况之下,对话框对象先初始化,然后创建对话框以及它的控 件。 类CDialog成员函数Create()使用两种重载原形,最常用的一种如下: Create(UINT nIDTemplate, CWnd * pParentWnd=NULL); 其中,参数nIDTemplate是一个对话框模板的标识符, 参数pParentWnd是对话框所属的父窗口。
windows程序设计 (2)

Windows程序设计简介Windows程序设计是指在Windows操作系统上开发和设计应用程序。
Windows操作系统提供了丰富的应用程序开发工具和API,使开发者能够利用各种编程语言(如C++、C#、等)开发功能强大、丰富多样的应用程序。
在Windows上进行程序设计可以涵盖很多方面,包括图形用户界面(GUI)设计、操作系统交互、网络通信、以及与硬件设备的交互等。
本文将重点介绍Windows程序设计的基本概念和一些常用的开发工具和技术。
开发工具在Windows上进行程序设计,可以使用各种开发工具和集成开发环境(IDE)来简化开发过程。
以下是一些常用的Windows程序设计开发工具:1.Visual Studio:Visual Studio是一套功能强大的集成开发环境,由Microsoft开发和维护。
它支持多种编程语言,包括C++、C#、Visual Basic等,并且提供了丰富的开发工具和调试功能。
2.Dev-C++:Dev-C++是一个免费开源的C++编程环境,它提供了一个简单易用的集成开发环境,并且可以方便地编译和调试C++程序。
3.Code::Blocks:Code::Blocks是一个开源的跨平台集成开发环境,支持多种编程语言,包括C++、C等。
它提供了丰富的插件和功能,可以方便地进行Windows程序设计。
除了以上列举的开发工具,还有其他一些可供选择的开发工具,开发者可以根据自己的需求和喜好来选择合适的工具。
Windows程序设计基础在进行Windows程序设计之前,了解Windows操作系统的基本概念和原理是非常重要的。
以下是一些Windows程序设计中常用的基础知识:1.Windows窗口:Windows窗口是Windows程序的基本界面单元。
每个窗口都有自己的窗口过程(WindowProcedure),用于处理窗口消息和事件。
2.控件和对话框:Windows程序中常用的GUI元素称为控件,如按钮、文本框、列表框等。
mfcwindows程序设计

mfcwindows程序设计全文共四篇示例,供读者参考第一篇示例:MFC(Microsoft Foundation Class)是微软公司提供的基于Windows操作系统的C++类库,用于开发Windows应用程序。
MFC 为开发者提供了丰富的类和函数,简化了Windows应用程序的开发过程,使开发者能够快速地创建功能强大的Windows桌面应用程序。
MFC的设计目标是提供一种易于使用的框架,使开发者能够专注于应用程序的逻辑功能而不必过多关心底层的Windows API。
MFC提供了一些基本的类,如CWinApp、CWinFrameWnd、CDialog等,开发者可以继承这些类并重载其成员函数来实现自己的逻辑。
MFC的开发流程通常是这样的:首先创建一个MFC应用程序工程,然后在工程中添加需要的资源和类文件,并通过类向导生成相应的类,最后编写具体的逻辑代码。
MFC应用程序通常包括菜单、工具栏、对话框、工具栏等界面元素,开发者可以通过拖拽控件来设计界面,通过消息映射机制来处理用户操作。
MFC的优点之一是它与Visual Studio集成得很好,可以通过IDE 直观地进行开发、调试和部署。
开发者可以使用可视化编辑器来设计界面,利用自动生成的代码框架来实现业务逻辑,以及通过调试工具来调试程序。
MFC还提供了强大的文档视图架构,使得开发者可以轻松地实现文档的编辑、显示和保存。
MFC还提供了许多方便的类和函数,如文件操作类CFile、字符串处理类CString、图形绘制类CDC等,这些类和函数大大简化了开发者的工作,提高了开发效率。
MFC还提供了许多常用控件和常用对话框,如按钮、编辑框、列表框、进度条,以及文件对话框、颜色对话框、字体对话框等,使开发者可以快速地实现各种功能。
MFC也有其局限性。
随着技术的不断发展,MFC的功能和性能已经逐渐落后于现代的开发框架,如WPF、WinRT等。
MFC的界面设计相对较为传统,不够现代化,而且在跨平台开发上也存在问题。
VBA对话框设计和使用技巧

VBA对话框设计和使用技巧VBA(Visual Basic for Applications)是一种用于Microsoft Office应用程序的编程语言。
它可以用于自动化任务、增强功能以及创建用户界面。
在处理各种应用程序任务时,对话框是一个重要的交互工具。
本文将介绍如何使用VBA来设计和使用对话框,以提高用户体验和效率。
一、对话框设计基础1. 对话框的目的:在开始设计对话框之前,我们需要明确对话框的目的。
对话框是用于与用户进行交互的窗口,可以用于输入数据、显示信息、进行选择等。
因此,我们需要确定对话框的用途和功能,以便正确地设计和使用它。
2. 对话框类型:VBA提供了几种常见的对话框类型,如消息框、输入框、文件对话框和用户自定义对话框等。
我们可以根据需要选择不同类型的对话框,以实现特定的功能。
3. 对话框控件:对话框由一系列控件组成,用于显示内容和接收用户的输入。
常见的对话框控件包括标签(Label)、文本框(TextBox)、复选框(CheckBox)、单选按钮(OptionButton)和按钮(CommandButton)等。
了解各种控件及其属性对于设计和定制对话框非常重要。
二、使用VBA创建对话框1. 创建基本对话框:在VBA中,我们可以使用`UserForm`对象来创建基本的用户界面。
打开VBA编辑器(Alt + F11),点击插入菜单中的用户窗体,选择“用户窗体”选项,即可创建一个新的用户窗体。
我们可以通过在用户窗体上添加控件、设置属性和编写代码来自定义对话框。
2. 控件添加和布局:通过拖拽和放置控件,我们可以向用户窗体中添加所需的控件。
可以使用“工具箱”中的工具来添加各种控件,并使用鼠标和键盘调整控件的大小和位置。
为了使对话框布局合理、美观,需要仔细选择和排列控件。
3. 设置控件属性:控件的属性决定了其外观和行为。
通过右键单击控件并选择“属性”,我们可以设置控件的名称、标签、大小、颜色、字体、可见性等属性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
函数的返回值 WM_PAINT WM_DESTROY 不需处理 WM_CREATE
对话框处理函数 BOOL 值
主窗口函数 LRESULT 值 处理
对话框消 息处理函 数具有与 主窗口函 数相似的 参数,但 两者存在 不同
未定义处理过程 若收到此消息,返回 调用 的默认处理 FALSE(return 0) DefwindowProc
……
LRESULT CALLBACK WndProc(……,……,……,……) { switch(message) {case WM_COMMAND: switch(LOWORD(wParam)) {case IDM_NEW: break; case IDM_OPEN: MessageBox(hwnd,"文件已经打开!","文件打开",MB_OK);break; case IDM_SAVE: MessageBox(hwnd,"文件保存成功!","文件保存",MB_OK);break; case IDM_SAVEAS: break; case IDM_CLOSE: break; case IDM_EXIT: SendMessage(hwnd,WM_DESTROY,0,0); break; case IDM_CUT: break; case IDM_COPY: break; 创建对话框 case IDM_PASTE: break; case IDM_DELETE: break; case IDM_ABOUT: DialogBox(hInst,"About",hwnd,(DLGPROC)DlgProc); break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; 12 }
IDM_NEW IDM_OPEN IDM_CLOSE IDM_SAVE IDM_SAVEAS
IDM_EXIT
IDM_CUT IDM_COPY IDM_PASTE IDM_DELETE
IDM_ABOUT
14
Menu ACCELERATORS { "^N", "^O", "^S", "^X", "^C", "^V", VK_DELETE, }
13
本例的资源程序代码如下: #include <windows.h> #include "7_3.h" Menu MENU DISCARDABLE { POPUP "文件(&F)" { MENUITEM "新建(&N)\t Ctrl+N", MENUITEM "打开(&O)\t Ctrl+O", MENUITEM "关闭(&C)", MENUITEM SEPARATOR MENUITEM "保存(&S)\t Ctrl+S", MENUITEM "另存为(&A)", MENUITEM SEPARATOR MENUITEM "退出(&X)", } POPUP "编辑(&E)" { MENUITEM "剪切(&T)\t Ctrl+X", MENUITEM "复制(&C)\t Ctrl+C", MENUITEM "粘贴(&P)\t Ctrl+V", MENUITEM "删除(&D)\t Del", } POPUP "帮助(&H)" { MENUITEM "关于(&A)...", } }
//对话框窗口处理函数 BOOL CALLBACK DlgProc(……,……,……,……) {switch(message) { //初始化对话框 case WM_INITDIALOG: return 1; //处理对话框消息 case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: //关闭对话框 EndDialog( hdlg, 0) ; return 1; } break ; case WM_CLOSE: EndDialog( hdlg, 0) ; return 1; } return 0; }
3. 构造对话框消息处理函数
对话框接收的消息都在相应的对话框消息处理函数中处理 BOOL CALLBACK DlgProc(……,……,……,……) { switch(message) { case WM_INITDIALOG :return 1; case WM_COMMAND switch (LOWORD (wParam )) { case …;break; case …;break; … } break; } return 0; }
5
4. 关闭对话框
调用函数EndDialog可以关闭对话框
EndDialog (hdlg,nResult) ;
对话框句柄
消息框是模态对话框的特殊形式,调用MessageBox生成消息框 int MessageBox (HWND hwnd, //拥有消息框的窗口 这些标识可 LPCTSTR lpszText, //消息框中显示的字符串 以组合使用 LPCTSTR lpszCaption,//作为标题的字符串 DWORD dwType //指定消息框的内容 )
8
创建模态对话框
可以使用以下函数 DialogBox() DialogBoxIndirect() DialogBoxIndirectParam() DialogBoxParam()
9
模态对话框应用实例
该对话框含有标题栏、系统菜单、简要信息及一个按钮控件。
10
#include <windows.h> #include "7_3.h" HINSTANCE hInst; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(……,……,……,……) { HWND hwnd ; MSG Msg ; HACCEL hAccel; WNDCLASS wndclass ; char lpszMenuName[]="Menu"; char lpszClassName[] = "模态对话框"; char lpszTitle[]= "模态对话框样例"; wndclass.style = 0; wndclass.lpszClassName = lpszClassName ; if(!RegisterClass(&wndclass)){MessageBeep(0);return FALSE;} hwnd = CreateWindow(……,……,……) ; ShowWindow( hwnd, nCmdShow); UpdateWindow(hwnd); hInst=hInstance; hAccel=LoadAccelerators(hInst,lpszMenuName); while( GetMessage(&Msg, NULL, 0, 0)) { if(!TranslateAccelerator(hwnd,hAccel,&Msg)) {TranslateMessage(&Msg); DispatchMessage( &Msg);} } return Msg.wParam; 11 }
15
模态对话框销毁
EndDialog,在OK,CANCEL按钮时调用 此处理
16
模态对话框作为主程序例子
对话框程序设计
1
对话框资源及其应用
一种弹出 式窗口 模式对话框 非模式对话框 允许用户在该对话 框与应用程序其他 窗口之间的切换 对话框资源通常有如下功能: 发送消息如警告消息、提示框消息 接收输入如用户输入的消息 提供消息如常见的“关于”对话框
2
不允许用户在关闭对 话框之前切换到应用 程序的其他窗口
与菜单资源相同
位置及外型尺寸
常用的有CAPTION(标题) 和STYLE(样式)
对话框样式可用组合样式,下面定义了含标题栏的弹出式对话框: STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
3
2. 显示对话框
在定义对话框资源后,可调用DialogBox函数在窗口中显示对话框 int DialogBox (HINSTANCE hInstance, //当前应用程序的实例句柄 LPCTSTR lpszDialogName,//对话框资源的名称 HWND hwndParent, //拥有该对话框的窗口句柄 WNDPROC lpDialogFunc) //对话框处理函数的地址
7
备注:
DialOgBox宏用CreateWindowEx函数创建对话框。 DialogBox函数然后把一个WM_INITDIALOG消息(和一个 WM-SETFONT消息,如果模板指定DS_SETFONT类型) 传递到对话框过程。不管模板是否指定WS_VISIBLE类型, 函数显示对话框,并且使拥有该对话框的窗口(也称属主 窗口)失效,且为对话框启动它本身的消息循环来检索和 传递消息。 当对话框应用程序调用EndDialog函数时,DialogBox 函数清除对话框户止消息循环,使属主窗口生效(如果以 前有效),且返回函数EndDialog调用中的nReSUlt参数。