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

轮回荡涤

轮回荡涤

2016-02-19 16:18

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

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

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

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

2,两种发送Windows消息:

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

具体:

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

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可以向响应消息的处理函数传送附加数据信息。

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

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

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

对于用户自定义消息,只能使用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)~~ /

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
vc++技术内幕(第四版)笔记(第7章)

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

编程语言 网络编程
vc++技术内幕(第四版)笔记(第6章)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

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

编程语言 网络编程
vc++技术内幕(第四版)笔记(第4章)

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

编程语言 网络编程
vc++技术内幕(第四版)笔记(第8章)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

vc++技术内幕(第四版)笔记(1~2章)

编程语言 网络编程
vc++技术内幕(第四版)笔记(1~2章)

『VC++技术内幕』学习笔记(7)

编程语言 网络编程
『VC++技术内幕』学习笔记(7)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

C#中如何处理父窗口及其子窗口标题

C#中如何处理父窗口及其子窗口标题

js基础:JavaScript 小技巧之如何自动加上最后修改时间

js基础:JavaScript 小技巧之如何自动加上最后修改时间
下拉加载更多内容 ↓