VC++ MFC属性表对话框的运行机制
- 格式:doc
- 大小:27.50 KB
- 文档页数:2
VCMFC中的CComboBox控件使用详解VC/MFC中的CComboBox控件使用详解CComboBox控件详解CComboBox控件又称作组合框控件,其有三种形态可供选择,1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down list).CComboBox控件的常用设置属性说明:type属性:里面一共有三个选项.就是其三种形式, 我们常用的是后两种形态,其区别就是Dropdown的编辑区为可编辑控件,而droplist 为静态控件.Data属性:当程序初始化的时候,下拉列表将显示其属性里面的内容,内容用分号分隔.其属性只支持后2中形式,Sort 属性:对添加到下拉列表框中的数据自动进行排序,如果你不想他改变你的显示序列,把他设置成False.控件是一个窗口.其基类是为CWnd.所以CComboBox也可以使用CWnd的一些函数,它自己的函数有30几种.我写了一个示范程序,演示了一些常用的函数,你可以参考其代码看到其功能.注:m_cbox 为CComboBox控件的关联变量,m_end为EDIT控件的关联变量1.GetCount() 函数:用以获得列表框中的选项数目. int GetCount() const;(此乃函数原型,我会列在每条的后面) 下面的例子是程序中各个按钮里面的代码int i;CString str;i=m_cbox.GetCount();str.Format ("%d",i);m_end="一共有"+str+"个数据";UpdateData(FALSE);2.GetCurSel() 函数:用以得到用户选中下拉列表框中数据的索引值.返回的值是重0开始的,如果没有选择任何选项将会返回-1 Int GetCurSel() constint i;CString str;i=m_cbox.GetCurSel ();str.Format ("%d",i+1);if (i==-1) m_end="你什么都没有选";else m_end="你选的是第"+str+"项";UpdateData(FALSE);3.SetCurSel函数:选取列表框中的一个选项,索引从0开始,-1为什么都不选.当你需要把列表框中已经选取的内容清空时就可以使用这个函数;if(m_i<3) m_cbox.SetCurSel (m_i++);//m_i为int型变量用以计数else {m_cbox.SetCurSel (-1);m_i=0;}4.SetEditSel函数:设置编辑区中蓝色选中字段的长度, BOOL SetEditSel( intnStartChar,int nEndChar ); nStartChar是起始的位置,当设置为-1时为不选择任何字段,nEndChar是结束位置.还有一个对应的函数GetEditSel是取得其位置,在此不详解.m_cbox.SetEditSel (3,5);//在编辑框中打入一串数字在按此按钮就能看到效果//其作用就是选中第3到第5个字符作为热点5.Clear() Cut() Paste() Copy() 这四个函数我放在一起说,因为他们都是针对编辑框中选定的文字进行编辑的函数,很多初学者很不明白这4个函数,使用这些函数没有作用,其实不然,这些函数对于在编辑框中的内容不进行处理,他真正处理的是你用鼠标选中的内容,对于Clear()函数很多书中解释都是有误的,很多书中对他的解释是清除当前选中的文本,我认为这样的解释是有歧异的,真正的解释是把你刚选中的文本释放掉,也就是不选,而不是把选中的删除,真正的删除选中的文本的函数是Cut(),Copy()是复制选中的文本,Paste()是粘贴到光标处.其演示就不写在程序中,有兴趣的朋友可以自己试试.6.LimitText()函数.其作用是限制在编辑框中键入的文本长度,BOOL LimitText(int nMaxChars); 当nMaxChars为0时,不是不能输入,而是长度最大化为65535字节7.GetLBText()函数.其原型为void GetLBText( int nIndex, CString&rString ).nIndex为列表框中数据的索引值,rString 为字符串,其作用就是把索引号为nIndex的数据放到rString变量中.与其对应的GetLBTextLen(intnIndex)函数就是得到索引号为nIndex中数据的长度m_cbox.GetLBT ext (2,m_end); // GetLBText按钮UpdateData(0);CString str; //GetLBTextLen按钮int i=m_cbox.GetLBTextLen (2);str.Format ("%d",i);m_end=str;UpdateData(FALSE);8.AddString() DeleteString() InsertString() ResetContent() 四个函数放在一起,他们都是针对下拉列表框的处理函数, AddString(LPCTSTR lpszString) 是在列表框的尾巴添加一条数据,参数为字符串. DeleteString(UINT nIndex)为删除指定索引为nIndex的数据. InsertString(int nIndex, LPCTSTR lpszString)在索引nIndex处插入IpszString的内容. ResetContent()是清除列表框中所有的内容.9.SetDroppedWidth(UINT nWidth) 函数.用于设定下拉列表框的最小宽度,当下拉列表框中的数据很长不能完全显示时,我们可以使用这个函数把列表框的宽度设置的大些.同样GetDroppedWidth()是返回列表框的宽度.以下为总结了各大论坛中对CCombBox控件使用的问题.并给出了正解.1.关于CComboBox在对话框中没有下拉项目的问题答: 资源编辑器中对话框中CComboBox组件的垂直范围拉大了下,就看见字体了,看到那个向下的黑箭头了吗,点他下拉,嘿嘿就这么简单.2.请问怎样能让CCombobox记住用户的输入.下次使用时还有答: 要记住用户的输入必须用到文件读写,或者把内容添加到注册表中,我会在以后给出解决办法.3. CCOMBOBOX如何使它只读,不能编辑答: 看了本文的介绍也许你现在知道了, CCOMBOBOX有三种类型的,选择你需要的吧!4. 我要让界面一显示,就能在Combo框中显示默认的数据答: 你要在OnInitDialog里面加上我上面所提到的SetCurSel()函数就行了.5. 如何把选好的内容赋给变量答: 先给CCOMBOBOX设置一个CString关联变量,再添加事件处理函数CBN_ Selchange.使用UpdateData(FALSE)就行了.6. 在CComboBox组合框中,条目的对齐方式是左对齐,能设置为对中或者右对齐吗?答: 没有直接的方法,你必须自己对齐, 比如最大长度是10int i;String.Format("%10d", i);CComboBox->AddStringVC combobox 使用大全 ---------------------------------------------------一、如何添加/删除Combo Box内容1. 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。
mfc消息机制
MFC(Microsoft Foundation Class)是微软开发的一种面向对象的C++框架,用于Windows操作系统的应用程序开发。
MFC消息机制是MFC框架的核心之一,其基本原理是在窗口、控件等对象之间传递消息,以便处理事件和交互。
具体而言,MFC消息机制包括以下几个方面:1.消息循环:MFC使用一个消息循环来接受和处理Windows操作系统发送的Windows消息,处理完消息后将处理结果反馈给Windows操作系统。
2.消息映射:MFC中的控件和窗口都有一个关联的消息映射表,用于将Windows消息映射到应用程序代码中的相应处理函数上。
当某个控件或窗口收到消息后,根据消息类型在相应的消息映射表中查找对应的消息处理函数,并调用相应的处理函数处理消息。
3.消息类型:MFC处理的Windows消息类型包括键盘和鼠标消息、定时器消息、系统负载消息、窗口大小变化消息等等,具体的消息类型可以在MFC框架的文档中查找。
4.消息处理函数:MFC中的消息处理函数是C++成员函数,定义为afx_msg 修饰的函数,Windows消息处理函数命名时需要遵循一定的命名规则,例如OnPaint()函数用于处理绘图事件。
需要注意的是,MFC消息机制是针对Windows操作系统设计的,其他操作系统可能具有不同的消息机制。
此外,MFC框架已经不是微软推荐的最先进的应用程序开发框架,已经逐渐被其他框架和技术所取代,例如.NET Framework,WPF,UWP等。
VC通用对话框类CFileDlgCFileDialog类封装了Windows常用的文件对话框。
常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。
可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。
每种情况下,对话框都与标准MFC对话框一样工作。
因为它们都是CCommonDialog类的派生类。
要使用CFileDialog,先用CFileDialog构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的任何值,以初始化对话框控件的值或状态。
m_ofn结构是OPENFILENAME类型的。
要了解更多信息,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。
初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。
DoModal返回不论是用户选择了OK(IDOK)还是取消(IDCANCEL)按钮。
当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。
CFileDIalog包含许多保护成员,使你可以处理常用的共享冲突、文件名合法性检查、列表框改变通知。
这些保护成员对许多应用来说用处不大,因为缺省处理是自动的。
对这些函数来说,消息映射入口是不必要的,因为它们是标准虚函数。
可以使用Windows CommDlgExtendError函数判断在初始化对话框时是否是发生了错误,并获取关于错误的更多信息。
析构一个CFileDialog对象是自动,无须调用CDialog::EndDialog。
要使用户选用多个文件,可在调用DoModal之前设置OFN_ALLOWMULTISELECT标志。
你应提供文件名缓冲区来放置返回的多个文件名的列表,这通过用一个分配了的缓冲区指针替换m_ofn.lpstrFile来实现,要在创建了CFileDialog之后调用DoModal 之前进行此操作。
MFC六大核心机制1.消息映射机制:MFC使用明确的消息映射机制来处理用户界面和系统事件。
应用程序通过重写消息映射函数来处理不同的消息事件,如鼠标点击、按键操作等。
消息映射机制使得开发者可以方便地响应和处理不同的用户交互动作。
2. 文档视图(Doc/View)体系:MFC采用了文档视图体系,将应用程序数据(文档)和用户界面(视图)分离。
文档表示应用程序的数据,视图代表用户界面,通过文档视图模式可以实现多视图的显示和操作。
开发者可以自定义文档类和视图类,通过它们来管理和展示数据。
3.对象序列化机制:对象序列化是指将对象的状态转换为可以存储或传输的格式,以便于在不同的环境中恢复对象的状态。
MFC提供了强大的对象序列化支持,可以方便地对应用程序的数据进行存储和加载。
开发者只需将需要序列化的成员变量标记为可序列化,并实现相关的序列化函数即可实现数据的持久化。
4.多线程支持:MFC提供了多线程支持,使得应用程序可以在多个线程中同时执行任务。
开发者可以使用MFC提供的线程类来创建和管理线程,并通过消息机制进行线程间的通信。
多线程支持有助于提高应用程序的性能和响应能力。
MFC的运行时类是一组用于封装常用功能的类,包括字符串操作、容器类、文件I/O等。
这些类提供了方便、高效的操作接口,减少了开发者对底层操作的依赖。
开发者可以直接使用MFC提供的运行时类来简化开发过程。
6.扩展性:MFC提供了丰富的扩展性机制,包括自定义控件、自定义对话框、自定义视图等。
开发者可以通过派生已有的MFC类来创建自定义的控件或界面,以满足特定的应用程序需求。
扩展性机制使得开发者可以充分发挥自己的创造力和想象力,实现更加个性化的应用程序。
总结:MFC六大核心机制为开发者提供了丰富的类和功能,使得开发Windows图形界面应用程序更加简单和高效。
通过消息映射机制、文档视图体系、对象序列化机制、多线程支持、运行时类和扩展性机制,开发者可以轻松地实现各种应用程序的需求,并提供更好的用户体验。
mfc工作原理MFC(Microsoft Foundation Classes)是微软公司开发的一套用于Windows操作系统的应用程序框架,它在C++语言的基础上封装了一些常用的图形用户界面(GUI)功能,简化了Windows应用程序的开发过程。
本文将围绕MFC的工作原理展开阐述。
MFC的工作原理主要包括以下几个方面:1. 类库结构:MFC是一个面向对象的类库,它由一系列C++类组成。
这些类封装了Windows API的功能,提供了一种更加便捷的方式来创建和管理Windows应用程序。
MFC的类库结构包含了一些基本的类,如CObject、CWnd和CFrameWnd等,以及一些用于界面设计的类,如CButton、CEdit和CListBox等。
2. 消息映射机制:在MFC中,窗口类派生自CWnd类,通过消息映射机制来处理用户输入、系统消息等事件。
当用户操作窗口时,例如点击按钮、拖动滚动条等,系统会生成相应的消息,MFC会将这些消息映射到窗口类的成员函数上进行处理。
开发者只需重载对应的成员函数,就可以实现自定义的响应逻辑。
3. 对话框和控件:MFC提供了对话框和控件的封装,使得开发者可以方便地创建和管理用户界面。
对话框是一个独立的窗口,可以包含各种控件,如按钮、文本框、列表框等。
开发者可以使用MFC 提供的类来创建和设置对话框及其控件,通过消息映射机制来处理用户操作。
4. 文档视图模型(Document-View模式):MFC采用了文档视图模型来处理应用程序的数据和界面显示。
开发者可以通过MFC提供的类来创建文档类和视图类,文档类用于管理应用程序的数据,视图类用于显示和编辑数据。
MFC会自动处理文档和视图之间的关联,使得数据的修改能够实时反映到界面上。
5. 消息循环:MFC应用程序在启动后会进入一个消息循环,不断地接收和处理消息。
消息循环负责分发消息,并将消息传递给对应的窗口类进行处理。
MFC提供了一个消息映射表,用于将消息和相应的处理函数关联起来。
消息映射的实现Windows消息概述Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口。
这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows。
消息的分类队列消息和非队列消息从消息的发送途径上看,消息分两种:队列消息和非队列消息。
队列消息送到系统消息队列,然后到线程消息队列;非队列消息直接送给目的窗口过程。
这里,对消息队列阐述如下:Windows维护一个系统消息队列(System message queue),每个GUI线程有一个线程消息队列(Thread message queue)。
鼠标、键盘事件由鼠标或键盘驱动程序转换成输入消息并把消息放进系统消息队列,例如WM_MOUSEMOVE、WM_LBUTTONUP、WM_KEYDOWN、WM_CHAR等等。
Windows 每次从系统消息队列移走一个消息,确定它是送给哪个窗口的和这个窗口是由哪个线程创建的,然后,把它放进窗口创建线程的线程消息队列。
线程消息队列接收送给该线程所创建窗口的消息。
线程从消息队列取出消息,通过Windows把它送给适当的窗口过程来处理。
除了键盘、鼠标消息以外,队列消息还有WM_PAINT、WM_TIMER和WM_QUIT。
这些队列消息以外的绝大多数消息是非队列消息。
系统消息和应用程序消息从消息的来源来看,可以分为:系统定义的消息和应用程序定义的消息。
系统消息ID的范围是从0到WM_USER-1,或0X80000到0XBFFFF;应用程序消息从WM_USER(0X0400)到0X7FFF,或0XC000到0XFFFF;WM_USER到0X7FFF范围的消息由应用程序自己使用;0XC000到0XFFFF范围的消息用来和其他应用程序通信,为了ID的唯一性,使用::RegisterWindowMessage来得到该范围的消息ID。
消息结构和消息处理消息的结构为了从消息队列获取消息信息,需要使用MSG结构。
mfc的工作原理
MFC (Microsoft Foundation Class) 是微软公司开发的一种基于
类库的应用程序框架,用于构建Windows操作系统上的图形
用户界面(GUI)应用程序。
MFC的工作原理主要涉及以下
几个方面:
1. 封装了Windows API:MFC通过封装Windows API,提供
了一套更加简洁、易用的面向对象的编程接口,使开发者能够更方便地创建和管理窗口、对话框、控件以及其他GUI元素。
2. 事件驱动的编程模型:MFC采用了事件驱动的编程模型,
开发者可以通过重载消息映射表中的事件处理函数,响应用户的输入或系统的消息,例如点击按钮、键盘按键等。
这种模型使得开发者能够更加灵活地控制应用程序的行为。
3. 对象模型:MFC基于面向对象的编程思想,通过类的继承
和多态等机制,实现了可重用性和扩展性。
开发者可以通过创建和继承MFC的类,重写其成员函数来实现自定义的应用程
序逻辑。
4. 消息循环:MFC应用程序通过消息循环来处理用户的输入
和系统的消息。
消息循环负责从消息队列中获取消息,并将其分发给相应的窗口或控件进行处理。
开发者可以通过重载消息循环中的函数,定制应用程序的消息处理方式。
总的来说,MFC的工作原理是基于面向对象的编程思想和事
件驱动的编程模型,封装了Windows API提供了方便的编程
接口,通过消息循环处理用户输入和系统消息。
这样的设计使开发者能够更加简单地创建和管理GUI应用程序。
2.分析对话框和文档/视图结构运行机制及心得体会?对话框工作机制:在程序中运行模态对话框有两个步骤:在堆栈上以变量的形式构建一个对话框对象。
调用CDialog::DoModal ( )。
DoModal负责对模态话框的创建和撤销。
在创建对话框时,DoModal 的任务包括载入对话框模板资源、调用OnInitDialog初始化对话框和将对话框显示在屏幕上。
完成对话框的创建后,DoModal启动一个消息循环,以响应用户的输入。
由于该消息循环截获了几乎所有的输入消息,使主消息循环收不到对对话框的输入,致使用户只能与模态对话框进行交互,而其它用户界面对象收不到输入信息。
若用户在对话框内点击了ID为IDOK的按钮(通常该按钮的标题是“确定”或“OK”),或按了回车键,则CDialog::OnOK将被调用。
OnOK首先调用UpdateData(TRUE)将数据从控件传给对话框成员变量,然后调用CDialog::EndDialog关闭对话框。
关闭对话框后,DoModal会返回值IDOK。
若用户点击了ID为IDCANCEL的按钮(通常其标题为“取消”或“Cancel”),或按了ESC键,则会导致CDialog::OnCancel的调用。
该函数只调用CDialog::EndDialog关闭对话框。
关闭对话框后,DoModal会返回值IDCANCEL。
程序根据DoModal的返回值是IDOK还是IDCANCEL就可以判断出用户是确定还是取消了对对话框的操作。
2.文档/视图运行机制每个应用程序类(CwinApp的派生类)都保留并维护了一份所有文档模板的指针列表,这是一个链表结构。
应用程序为所要支持的每个文档类型动态分配一个CMultiDocTemplate 对象,CmultiDocTemplate(UINT nIDResource,CruntimeClass * pDocClass,CruntimeClass * pFrameClass,CruntimeClass * pViewClass );并在应用程序类的CWinApp::InitInstance成员函数中将每个CMultiDocTemplate对象传递给CWinApp::AddDocTemplate。
cmfcbutton 用法CMFCButton是MFC库中的一个重要控件,用于创建和编辑按钮。
在Windows应用程序开发中,CMFCButton控件常用于图形用户界面(GUI)中,为用户提供交互操作。
本篇文档将详细介绍CMFCButton的基本用法、属性和方法。
一、基本用法1.创建CMFCButton对象:在MFC应用程序中,通常在对话框或窗口类中声明CMFCButton对象。
例如,在对话框类的头文件中,可以添加如下代码:CButton*m_pButton;然后可以在类的实现文件中进行初始化。
2.设置按钮属性:使用SetStyle()和SetKind()方法设置按钮的样式和类型。
例如,将按钮设置为文字按钮,可以使用SetStyle(BS_PUSHBUTTON)和SetKind(MK_BUTTON)。
3.添加按钮消息处理函数:为按钮添加单击事件处理函数,可以使用AddWindowMessage()方法添加WM_COMMAND消息。
例如,添加WM_COMMAND消息后,需要在类中添加一个处理函数,用于处理单击事件。
1.Caption:设置按钮显示的文字。
2.Style:设置按钮的样式,包括按钮类型(pushbutton、checkbutton、dropdownbutton等)和显示方式(system-icon、custom-icon、text等)。
3.Bitmap:设置按钮显示的位图。
4.Pushed:获取或设置按钮是否被按下。
1.SetBitmap():设置按钮显示的位图。
2.SetPushButton()和SetCheckBox():设置按钮为单选框或复选框样式。
3.DrawItem()和PaintItem():重载这两个方法,自定义按钮的绘制和渲染。
4.Enable()和Disable():启用或禁用按钮。
5.SetWindowText()和GetWindowText():设置或获取按钮显示的文字。
第五章对话框和常用控件对话框是Windows应用程序中最重要的用户界面元素之一,是与用户交互的重要手段,在程序运行过程中,对话框可用于扑捉用户的输入信息或数据。
对话框是一个特殊类型的窗口,任何对窗口进行的操作(如:移动、最大化、最小化等)都可在对话框中实施,一般来说,在对话框中通过各种控件(如:按钮、编辑框、列表框、组合框等)来和用户进行交互。
控件是在系统内部定义的用于和用户交互的基本单元。
一、对话框的使用Visual C++提供的对话框编辑器能“可视”地进行设计、编辑,并可用ClassWizard为对话框从CDialog基类中派生一个类,MFC的CDialog类封装了用于对话框的显示、关闭等操作的许多功能函数,例如:DoModal函数用来显示模式对话框并返回用户操作的结果。
1、模式对话框(为186附加举例页)所谓模式对话框是指,当对话被弹出时,用户必须在对话框中进行相应的操作,在退出对话框之前,对话框所在的应用程序不能继续执行。
平常我们所见到的对话框大多是模式对话框。
例:模式对话框(通过菜单命令弹出)1)建一个单文档(SDI)应用程序2)创建对话框模板Insert→Resource→选中Dialog→单击New拖过一个静态文本,鼠标对准它,按右键点properties改标题为“新建模式对话框”。
3)鼠标右键对准对话框的任何位置单击,选择properties选项,设置ID为IDD_MYDIALOG 4)给对话框创建类双击新建对话框的任何位置,单击OK,写类名为“CMyDlg”,保证”CDialog”作为该类的基类。
5)创建菜单命令:a)打开资源编辑器的菜单项Menub)双击IDR_MAINFRAMEc)双击右边空白菜单,点开pop_up(让它是空白),在名字处写”弹出对话框(&A)”,ID 处写ID_PUPDIALOG6)将菜单命令连接到主框架程序中,完成ID_PUPDIALOG的消息映射:View→ClassWizard→保证Class name里是CMainFrame,在ObjectIDs里找到ID_PUPDIALOG点黑→Messages里(右边)点COMMAND建立主框架对象方法并加代码:void CMainFrame::OnPupdialog(){ CMyDlg MyDlg;MyDlg.DoModal(); //DoModal()是CDialog类成员函数,通过调用该//函数将显示对话框。
MFC列表框控件的使用1. 介绍MFC(Microsoft Foundation Classes)是微软公司提供的一套用于开发Windows 桌面应用程序的C++类库。
MFC列表框控件是其中的一种常用控件,它可以用来显示和编辑列表中的项。
在本文中,我们将学习如何使用MFC列表框控件来创建、显示和操作列表中的数据项。
2. 创建列表框控件首先,我们需要在对话框资源中添加一个列表框控件。
打开Visual Studio,创建一个新的MFC应用程序项目,并选择对话框作为应用程序类型。
然后,在资源视图中双击IDD_DIALOG1以打开对话框编辑器。
在工具箱中找到列表框控件(List Box),并将其拖放到对话框上。
3. 设置属性选中刚刚添加的列表框控件,在属性窗口中可以设置其各种属性。
3.1 样式(Style)样式属性定义了列表框的外观和行为。
常见的样式包括:•单选(Single):只能选择一个项。
•多选(Multiple):可以选择多个项。
•排列(Sort):自动按字母顺序排序。
•水平滚动条(Horizontal Scrollbar):显示水平滚动条。
•垂直滚动条(Vertical Scrollbar):显示垂直滚动条。
3.2 数据源(Data)数据源属性定义了列表框中显示的数据项。
可以通过以下几种方式设置数据源:•字符串数组(String Array):将一个字符串数组赋给列表框。
•整数数组(Integer Array):将一个整数数组赋给列表框,每个整数对应一个数据项。
•数据库记录集(Database Recordset):将数据库查询结果赋给列表框。
3.3 绑定变量(Bound Variable)绑定变量属性定义了与列表框关联的变量。
当用户选择某个项时,该变量会被更新。
可以使用以下几种类型的变量:•字符串变量(String Variable):保存选中项的文本。
•整数变量(Integer Variable):保存选中项的索引。
MFC六大核心机制MFC(Microsoft Foundation Classes)是微软公司开发的一套基于C++语言的应用程序框架。
它提供了一系列类和函数库,方便开发人员构建Windows应用程序。
MFC框架包含了许多核心机制,下面将介绍其中的六大核心机制。
一、消息映射机制:消息映射机制是MFC框架的核心之一,它用于处理Windows消息。
Windows操作系统是事件驱动的,应用程序需要响应来自用户的输入或系统的消息。
通过消息映射机制,开发人员可以向MFC框架注册处理特定消息的函数,当该消息发生时,框架将自动调用相应的函数进行处理。
开发人员只需要在类的消息映射表中添加相应的消息与处理函数的映射关系,就可以实现消息的处理。
二、文档/视图机制:文档/视图机制是MFC框架中用来管理应用程序数据和图形界面显示的一种机制。
应用程序的数据和用户界面是相互独立的,通过文档/视图机制可以将二者进行分离。
开发人员可以创建一个或多个文档类来管理数据,同时可以创建一个或多个视图类来负责显示用户界面。
MFC框架会自动处理数据和界面之间的同步,例如当数据发生变化时,会自动更新界面;当用户修改界面时,会自动更新数据。
三、消息响应机制:消息响应机制是MFC框架中用来处理用户输入和系统消息的一种机制。
开发人员可以通过消息响应机制,将特定的消息与相应的处理函数进行关联,当该消息发生时,框架会自动调用相应的处理函数。
例如,开发人员可以通过响应鼠标点击消息来实现用户点击按钮的响应,或者通过响应键盘输入消息来实现用户输入的响应。
四、对象模型机制:对象模型机制是MFC框架中用来管理对象的一种机制。
MFC框架使用了一种轻量级的对象模型,对象之间的关系通过继承和组合来实现。
开发人员可以创建自己的类并继承自MFC提供的基类,以实现各种功能。
MFC框架提供了丰富的基类库,包括窗口类、对话框类、控件类等,开发人员可以通过继承这些基类来快速构建自己的应用程序。
mfc项目执行流程MFC(Microsoft Foundation Class)是一个C++库,用于创建Windows桌面应用程序。
MFC项目的执行流程通常遵循以下一般步骤:1. 创建MFC应用程序项目:使用Visual Studio或其他适用的开发环境创建一个MFC应用程序项目。
在创建项目时,您可以选择项目类型(如单文档、多文档、对话框等)和其他项目属性。
2. 初始化应用程序:MFC应用程序的入口点通常是_tWinMain 函数。
在此函数中,您可以执行应用程序级别的初始化工作,例如创建主窗口对象、初始化MFC框架等。
3. 创建主窗口:通常,MFC应用程序会创建一个主窗口,这是应用程序的主要用户界面。
主窗口通常是派生自CFrameWnd或CDialog的窗口类,具有菜单、工具栏、状态栏等。
4. 消息循环:MFC应用程序通过消息循环来处理用户输入和操作系统事件。
消息循环是一个无限循环,等待用户输入、消息和事件,然后分派它们到相应的窗口和控件。
5. 响应事件和消息:在主窗口、对话框和其他控件中,您可以处理并响应用户操作和事件,例如按钮点击、菜单项选择、窗口关闭等。
这通常涉及到处理MFC消息处理函数,如OnCommand、OnPaint 等。
6. 窗口绘图:如果应用程序需要绘制图形、文本或其他内容,您可以重写OnPaint消息处理函数,然后在其中进行绘图操作。
7. 资源管理:MFC应用程序通常使用资源文件(如对话框资源、位图、图标等)来定义界面元素和图形资源。
您可以使用Visual Studio的资源编辑器管理这些资源。
8. 保存和加载数据:如果应用程序需要保存和加载数据,您可以实现相关的数据持久性功能,如将数据保存到文件、数据库或其他存储介质。
9. 编译和构建:完成代码编写后,您需要编译和构建MFC应用程序,以生成可执行文件(.exe)。
10. 测试和调试:对应用程序进行测试和调试,确保其正常运行,以处理潜在的错误和异常情况。
VC++ MFC属性表对话框的运行机制
2008-07-01 19:09
属性表对话框的初始化包括框架对话框的初始化和页的初始化。
页的初始化工作可在OnInitDialog函数中进行,而框架对话框的初始化应该在OnCreate函数中完成。
根据CPropertySheet::DoModal返回的是IDOK还是IDCANCEL,程序可以判断出关闭对话框时按的是OK还是Cancel按钮,这与普通对话框是一样的。
如果属性表对话框是模态对话框,在其底部会有3个按钮,依次为OK、Cancel 和Apply(应用)按钮,如果对话框是非模态的,则没有这些按钮。
OK与Cancel 按钮的意义与普通按钮没什么两样,Apply按钮则是属性表对话框所特有的。
普通的模态对话框只有在用户按下了OK按钮返回后,对话框的设置才能生效,而设计Apply的意图是让用户能在不关闭对话框的情况下使对话框的设置立即生效。
由此可见,Apply按钮的作用是使用户在设置完数据后,不必退出对话框,就可以反复进行设置,这在许多应用场合下是很有用的。
为了对上述3个按钮作出响应,CPropertyPage类提供了OnOK,OnCancel和OnApply函数,用户可覆盖这3个函数以完成所需的工作。
需要指出的是这3个函数并不是直接响应按钮的BN_CLICKED消息的,但在按钮按下后它们是被间接调用。
这些函数的说明如下:
1. Virtual void OnOK( ):在按下OK或Apply按钮后,该函数被调用。
默认的OnOK函数几乎什么也不干,像数据交换和关闭对话框这样的工作是在别的地方完成的,这与普通对话框的OnOK函数是不同的:
2. Virtual void OnCancel( ):在按下Cancel按钮后,该函数将被调用。
默认的OnCancel函数也是几乎什么也不干;
3. Virtual BOOL OnApply( ):在按下OK或Apply按钮后,该函数将被调用。
默认的OnApply 会调用OnOK函数。
函数的返回值如果是TRUE,则对话框中的设置将生效,否则无效。
令人不解的是,MFC并未考虑CPropertySheet类的按钮响应问题,不要指望能通过ClassWizard来自动创建按钮的BN_CLICKED消息处理函数,通常的按钮响应都是在CPropertyPage类完成的。
下面几个CPropertyPage类的成员函数也与属性表的运行机制相关。
Void SetModified( BOOL bChanged = TRUE ):该函数用来设置修改标志。
若参数bChanged为True,则表明对话框中的设置已改动,否则说明设置未改动。
该函数的一个主要用途是允许或禁止Apply按钮。
在默认情况下,Apply按钮是禁止的。
只要一调用SetModified(TRUE),Apply按钮就被允许,而调用SetModified(FALSE)并不一定能使Apply按钮禁止,只有在所有被标为改动的页
都调用了SetModified(FALSE)后,Apply按钮才会被禁止。
另外,该函数对OnApply的调用也有影响,当Apply按钮被按下后,只有那些被标记为改动过的页的OnApply函数才会被调用。
在调用该函数之前,程序需要叛断页中的内容是否已被修改,可通通过处理诸如BN_CLICKED、EN_CHANGE这样的控件消息来感知页的内容的改变;
Virtual BOOL OnSetActive():当页被激活或被创建时,都会调用该函数。
该函数的默认行为是如果页还未创建,就创建之,若页已经创建,则将其激活,并调用UpdateData(FALSE)更新控件。
用户可覆盖该函数完成一些刷新方面的工作;
Virtual BOOL OnKillActive():当原来可见的页被覆盖或被删除时,都会调用该函数。
该函数的默认行为是调用UpdateData(TRUE)更新数据。
用户可覆盖该函数完成一些特殊数据的有效性检查工作。
需要说明的,属性表对话框中的所有页在一次运行中不一定都会被创建。
实际上,那些从未打开过的页及其控件是不会被创建的。
因此,在CPropertyPage类的派生类中,只有确定页已存在后,才能调用与对话框及控件相关的函数。
如果收到控年通知消息,或OnSetActive函数被调用,则说明页已经存在。
正是由于上述原因,使得属性表对话框的内数据交换只能在OnSetActive和OnKillActive函数中进行。