vc++技术内幕(第四版)笔记(第7章)

2016-02-19 16:18 5 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的vc++技术内幕(第四版)笔记(第7章),喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】

第七章:无模式对话框 和 Windows通用对话框类

1,[无模式对话框]在它处于激活状态下还允许用户在(同一个应用程序中)其它地方工作。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   [通用对话框]则是C++和一组Windows的实用对话框之间的程序设计借口,包括File Open,Page Setup,Color等等,它们都是通过COMDLG32.DLL来实现的。

2,两种发送Windows消息:

CWnd::SendMessage//立刻导致对窗口控制函数的调用
CWnd::PostMessage//将消息放进Windows消息队列。对消息的处理可能被滞后。

具体:

1)LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
//Sends the specified message to this window. The SendMessage member function calls the window procedure directly and does not return until that window procedure has processed the message. This is in contrast to the PostMessage member function, which places the message into the window’s message queue and returns immediately.

2)BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
//Places a message in the window’s message queue and then returns without waiting for the corresponding window to process the message. Messages in a message queue are retrieved by calls to the GetMessage or PeekMessage Windows function.

3,对话框实际上应该属于应用程序的主框架窗口,而不属于视图。(对话框默认弹出特性)

(注:还未领悟,先留着。)

4,对话框窗口的创建和取消完全取决与用户的操作,而对话框对象则将直到应用程序被终止时才会被删除。
(除了主框架窗口之外,对于几乎所有的窗口类型,DestroyWindow函数都不会将C++对象删除掉。所以要注意手动添加删除对话框对象代码)

5,Windows 常量WM_USER是用户自定义消息中可以利用的第一个消息ID。

#define WM_USER       0x0400
//The WM_USER constant is used by applications to help define private messages, usually of the form WM_USER+X, where X is an integer value.

说明:

1)CWnd::PostMessage//发送消息。利用wParam , LPARAM可以向响应消息的处理函数传送附加数据信息。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

2)在WIN32中,用wParam 和LPARAM参数来传递消息数据是最常用的手段(如:将鼠标的X,Y坐标压缩进lParam)。而在MFC库中,消息数据可以更多样的类型来传递(如:可以CPoint对象来传递鼠标信息)。

对于用户自定义消息,只能使用wParam 和LPARAM参数来传递消息附加数据信息。

3)案例说明:

在对话框类中:

#define WM_GOODBYE WM_USER + 5//定义自定义消息
m_pView-PostMessage(WM_GOODBYE, IDOK);//向View类发送WM_GOODBYE消息,附加消息IDOK存放在wParam 中。m_pView指向当前View类对象。
在View 类对象中
afx_msg LRESULT OnGoodbye(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(WM_GOODBYE, OnGoodbye)
LRESULT CEx07aView::OnGoodbye(WPARAM wParam, LPARAM lParam)
{
 return 0L;
}

4)技巧:在对话框类中重载构造函数,参数为CView*指针。再在对话框类中定义一个CView*指针数据成员。这样,如果在View类中通过传入this指针来构造对话框对象的时候,对话框类中CView*指针数据成员可以在带参数为CView*指针重载构造函数里方便获取构造它的View类指针。

6,ClassWizard并不支持用户自定义消息的响应,所以当使用用户自定义消息编程的时候,必须自己编写自定义消息的处理代码。(三步,首先是消息响应函数原型声明,其次消息映射,最后是编写消息响应函数代码。这里要注意:用户自定义消息的消息映射一定要加在BEGIN_MESSAGE_MAP(..)~~END_MESSAGE_MAP()之间,//{{AFX_MSG_MAP(CEx07aView)~~ /

来源:http://www.tulaoshi.com/n/20160219/1611601.html

延伸阅读
    第八篇:颜色和字体 由于种种原因,雷神有4、5天没有看一眼VC++了,所以在开始之前我又把前几篇笔记仔细的看了一遍,使自己能够进入最佳的学习状态。因为学习状态的好坏直接影响学习的效率,有时候我看一天的书,可实际掌握的内容却很少,不知大家是否和我一样?今天要学的是颜色和字体。终于要进入多彩的世界了,这...
     第六篇:映射模式 在此篇之前我们已经学会了在窗口显示图形,更准确的说是在窗口指定位置显示图形或文字,我们使用的坐标单位是象素,称之为设备坐标。看下面语句: pDC-Rectangle(CRect(0,0,200,200)); 画一个高和宽均为200个象素的方块,因为采用的是默认的MM_TEXT映射模式,所以在设备环境不一样...
第九篇:模式对话框和通用控件(上) 对话框是一个真正的窗口,它不但可以接受消息,而且可以被移动和关闭,还可以在它的客户区中进行绘图操作。对话框可以分为模式对话框和无模式对话框两种,两者区别是在对话框被关闭之前用户能否在同一应用程序的其他地方进行工作。举例说明:打开文件对话框便是典型的模式对话框,在你选择好要...
    第三篇:消息映射和视图类 在写了两篇笔记后有很多朋友给我发信,和我交流一些在学习过程中的问题。但由于我也是一个初学者,对一些问题自己也没有把握,所以实在不敢做答,但我会尽量尽我所能和大家一起研究,谢谢大家的鼓励和信任。 在开始先补充一下上一篇的内容“内容窗口的创建”,兼答天歌网友的问题(...
标签: 分娩
· 在线读书: 《我的孩子是“中等生”》 第二个梦 2000年9 月的一天,儿子的另一个梦。 那天上午,儿子和妈妈一起去超市,儿子自己拿了一大包果冻放到购物车上,妈妈认为这东西没有营养,便趁他不注意又放回了货架。回到家,儿子找不到果冻,咧着嘴哭了,边哭边急急地跺脚:“没,没,没。” 于是,午睡中儿子两次咧着...

经验教程

867

收藏

46
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部