第九章 动态链接库.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 动态链接库.ppt

9.2.5.5 发送给控件的用户定义消息 客户程序可以通过用户定义消息与自定义控件进行通讯。如 果一个标准消息是被直接发送(SendMessage)的,而不是被间 接寄送(PostMessage)的,则函数返回一个 32 位值,所以客 户程序可以通过 SendMessge 的返回值从自定义控件获得消息处 理结果。 小结:使用MFC支持的自定义控件正规 DLL 中应该包括: 1. 使用MFC为自定义控件定义C++窗口类。 2. 在DLL的入口函数CXXXApp::InitInstance中完成自定义控件的 Windows窗口的注册。 3. 定义自定义控件的窗口函数,建立自定义控件定义C++窗口类对象与 已注册的Windows窗口关联,实现系统对该窗口函数调用到通过自定 义控件定义C++窗口类对象完成调用操作的转换。 4. 定义可以被应用程序调用的DLL入口(空)函数,用于隐式导入自定 义控件DLL库。 5. 定义自定义控件向应用程序发送的消息通知码和能接收应用程序发来 的用户消息码,并添加相应的消息发送代码和定义相应的消息响应函 数,实现自定义控件与应用程序之间的调用和通讯。 应用程序使用自定义控件所需要的编程信息: 1. 自定义控件的窗口类名(DLL中用于注册窗口时使用的类名),用于 设置自定义控件模板的类名属性。 2. 自定义控件能发送的消息通知码,用于在应用程序中添加消息映射和 定义相应的处理函数。 3. 自定义控件能接收的用户消息,用于在应用程序中通过这些消息与自 定义控件通讯,修改状态。 9.2.5.6 示例程序 —— 自定义控件 本示例程序是一个 MFC 正规 DLL,它实现一个交通灯自定义 控件,该控件的功能: ·显示关闭、红灯、黄灯和绿灯四种状态; ·当鼠标左键单击时,自定义控件就向父窗口发送一个鼠标单 击通知消息; ·该自定义控件能响应两个用户定义消息 RYG_SETSTATE 和 RYG_GETSTATE 用于设置和获取自定义控件的状态。 1 创建一个正规 DLL 工程 与前面描述过的正规 DLL 的创建过程一样,使用 AppWizard 创建一个项目名为 “Traffic” 的 MFC 正规 DLL 项目 2 编辑 Traffic.h 和 Traffic.cpp ⑴ 使用 ClassWizard 为 CTrafficApp 重定义虚函数 InitInstance 用于 在 DLL 初始化时创建自定义控件。为此,必须将自定义控件 类 CRygWnd 的头文件包含到 Traffic.cpp 中。 ⑵ 加入虚构的导出函数 TrafficEntry,用于使 DLL 能够被隐式链 接。在客户程序中必须包括对该函数的调用,而且调用必须 在程序的执行路径中,否则编译器会忽略掉该调用。做为另 一种选择,你也可以在 InitInstance 中调用 Win32 API 函数 LaodLibrary 进行 DLL 的显式链接。 修改后 traffic.h 中的代码: // Traffic.h : main header file for the TRAFFIC DLL … class CTrafficApp : public CWinApp { … // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTrafficApp) public: virtual BOOL InitInstance(); //}}AFX_VIRTUAL … }; 修改后 Traffic.cpp 中的代码: … #include “stdafx.h” #include “Traffic.h” #include “RygWnd.h” … extern “C” __declspec(dllexport) void TrafficEntry() {} // dummy function … CTrafficApp theApp; BOOL CTrafficApp::InitInstance() { CRygWnd::RegisterWndClass(AfxGetInstanceHandle()); return CWinApp::I

文档评论(0)

shbky123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档