当前位置:首页 > 话题广场 > 科技专区 > 互联网

mfc如何关闭调用的对话框 mfc如何显示对话框

MFC的内部总共有六大关键技术,架构起了整个MFC的开发平台。

MFC的六大关键技术包括:

a)MFC程序的初始化过程;

b)消息映射机制;

c)运行时类型识别(RTTI);

d)动态创建;

e)永久保存;

f)消息传递。

{六大关键技术的目的是为了提高开发效率,开发者只要在局部做简单地修改,即可处理大部分窗口事物。}


四:消息映射机制

Win32工程的消息处理机制,就是每个窗口都关联一个全局的消息回调函数。再在消息回调函数中,通过对各种不同消息类型识别和分流来响应不同的消息。MFC的消息处理不使用全局的回调函数,而是创建一个与窗口关联的派生类,用与消息关联的成员函数来接收和处理窗口的消息。在类向导中选择对应的消息,添加与该消息关联的成员函数来处理该消息,这就是MFC的消息映射机制。

在Win32的消息处理机制中,每一个消息类型(uMsg)发送到窗口内时,可能在wParam和lParam中携带一些相关的数据。例如:WM_COMMAND的消息中,在wParam中记录了点击的按钮或者菜单项等的ID号码。而在WM_LBUTTONDOWN的消息中,在lParam中记录了点击界面的(x,y)坐标等等。Win32解析这些附带数据的过程比较繁琐,需要阅读MSDN手册中详细的说明资料。

MFC的消息映射机制,一般不需要开发者解析这些复杂的数据,因为消息映射函数中会自动在参数中将解析好的数据传递过来。例如:OnMouseMove(UINT nFlags, CPoint point)函数,再简单参照MSDN说明即可轻而易举地进行消息处理。

Windows常用消息

窗口创建时的消息和虚函数包括:WM_CREATE,WM_INITDIALOG,和PreSubclassWindow等;窗口关闭时的消息和虚函数:WM_CLOSE,WM_DESTROY以及OnOK和OnCancel等。有些消息是所有窗口都通用的,例如:WM_CREATE、WM_CLOSE和WM_DESTROY等。有些消息和虚函数是对话框专用的回调函数,例如:WM_INITDIALOG消息以及OnOK、OnCancel等虚函数。

通过MSDN的说明可以查看到,WM_CREATE和WM_INITDIALOG都是是窗口刚创建时的回调消息,当窗口还未显示出来之前,对窗口做预先处理的回调函数。WM_CREATE是所有窗口通用的创建时回调消息,用于包括对话框、MDI或者SDI等任何窗口的初始化,对应的消息映射函数是OnCreate。可以在该函数中编写代码,在窗口刚创建还未显示时,修改父窗口属性或者创建内部子窗口。WM_INITDIALOG对话框是对话框专用消息,最常用来初始化对话框及其内部控件,对应的消息映射函数是OnInitDialog。这个函数内部第一行一般是先执行基类函数CDialog::OnInitDialog,基类函数执行过程会将所有对话框资源模板内的控件都创建完毕。因此可以在该函数中,编写代码来对子窗口的做初始化设置。

消息传递函数

1、SendMessage和PostMessage函数都是消息传递函数,两个函数的格式:

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

2、SendMessage和PostMessage这两个函数消息的区别是:

a)返回值类型不同:两个函数的4个参数的意义是一样的,只有返回值类型不同(其实从数据上看他们一样是一个 32 位的数,只是意义不一样),LRESULT 表示的是消息被处理后的返回值,BOOL 表示的是消息是不是传递成功。

b)PostMessage 是异步的,SendMessage 是同步的。PostMessage 只把消息放入窗口消息队列中,不管消息被处理后的结果就返回;而SendMessage等待消息被处理完了之后才返回。

c)如果在同一个线程内,常常使用SendMessage发送消息时,速度快并能得到返回的消息处理结果。在不同线程或者进程之间,一般使用PostMessage 发送消息,把消息先放入目标窗口的消息队列中,然后由目标窗口通过消息循环自行派发处理。

{

、SendMessage和PostMessage函数的功能:

a)能够向指定的窗口内发送窗口消息,既可以是本进程内窗口也可以是其他进程的;

b)既可以发送系统内部消息,消息编号的范围是:1-WM_USER-1;

例如:WM_LBUTTONDOW,WM_MOUSEMOVE等;

c)也可以发送非系统消息(开发者定义的消息),范围是WM_USER-0x7FFF。

d)在MFC下非系统消息映射,使用宏定义时ON_MESSAGE

三、SendMessage和PostMessage两个函数的区别是:

a)SendMessage是阻塞型函数,PostMessage是非阻塞型函数:

SendMessage用于调用指定窗口的内部程序,直到窗口程序处理完成以后再返回;

PostMessage是将一个消息寄送到一个窗口内的消息队列后就立即返回。

b)两个函数的返回值不同:

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

SendMessage的返回值是消息处理结果产生的数值,依赖于消息处理函数;

PostMessage的返回值是返送成功或失败,一般很少失败除非窗口不存在;

c)跨线程或跨进程发送消息,推荐使用PostMessage函数

}

CEdit类成员

主要成员

成员说明

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

创建编辑控件,

并将其窗口句柄把保存在m_hWd中

void Clear( );

清空编辑框中的文字

void Copy( );

复制选中的文字到剪切板中

void Cut( );

剪切选中的文字到剪切板中

void Paste( );

将剪切板内的文字粘贴到编辑框中

BOOL Undo( );

撤销上一次操作

BOOL CanUndo( ) const;

是否可以撤销

void GetSel( int& nStartChar, int& nEndChar ) const;

获取被选中文字的起始位置

DWORD GetSel( ) const;

获取被选中文字的起始位置

void SetSel( int nStart, int nEnd, BOOL bNoScroll = FALSE );

设置被选中文字的起始位置

void ReplaceSel( LPCTSTR lpszNewText, BOOL bCanUndo = FALSE );

用指定文字替换被选中的文字

int GetLineCount( ) const;

获取多行编辑控件中的文字行数

void SetModify( BOOL bModified = TRUE );

设置或清除修改标记

BOOL GetModify( ) const;

获取内容是否被修改的标记

五:MFC的架构组成

MFC所有封装类一共200多个,但是MFC的内部技术不只是简单的封装。MFC的内部总共有六大黑箱技术架构起整个MFC的开发平台。六大关键技术的目的是为了提高开发效率,开发者只要在局部做简单地修改,即可处理大部分窗口事物。

1、MFC的六大关键技术包括:MFC程序的初始化过程、运行时类型识别(RTTI)、动态创建、永久保存、消息映射和消息传递。

2、不借助“MFC AppWizard”手工建立MFC程序只需几个步骤:

a)从CWinApp类派生一个应用程序类;

b)使用派生类定义的全局变量(theApp);

c)在预定义头文件“”中,禁用“windows.h”取而代之afx开头的MFC头文件;

d)编译设置中选择用“Use MFC in a Static Library”;

e)在CWinApp生类中,重写InitInstance函数作为程序启动代码。

1.《mfc如何关闭调用的对话框 mfc如何显示对话框》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《mfc如何关闭调用的对话框 mfc如何显示对话框》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3293342.html

上一篇

软件渠道如何分成,软件代理一般如何分成

mfc如何关闭调用的对话框 mfc如何显示对话框?

mfc如何关闭调用的对话框,mfc如何显示对话框,mfc 关闭对话框相关介绍,最近,BCGSoft正式发布了v24.4。本文主要介绍了对话框和表单,为BCG控件提供了新的认识和理解。 需要最新版的可以点击这里【BCG下载】 1. 改进对话框提示信息 新增信息提示样式:Info、...