VS2015动态库编程之MFC扩展动态库(下)

文章相关视频教程下载地址http://pan.baidu.com/s/1pKY4gzh

(2)添加WM_CTLCOLOR的反射消息响应函数

要改变编辑框中文字颜色、背景等,需要对该控件的WM_CTLCOLOR消息进行响应,重写该消息的响应函数。

将鼠标焦点设置到CMyEdit.h头文件中,之后在VS2015界面的右侧选择“属性”,接下来在属性界面的上部点击“消息”图标,并且在“=WM_CTLCOLOR”栏上选择“<Add> CtlColor”,为WM_CTLCOLOR消息添加响应函数CtlColor(),如图3所示。

 

3 添加WM_CTLCOLOR消息的响应函数

 

相关链接1=WM_COLCOLOR

当对话框中的控件时,控件会向对话框发送WM_COLCOLOR消息。而对话框收到该消息后,如果没有对该消息进行处理(没有该消息的响应函数),则对话框会将该消息反射回控件,由控件自行处理,这就是消息反射。消息反射对于创建可重用的控件类是一个功能强大的工具,因为他使得派生控件类有了独立于父窗口(对话框)执行自身操作的能力。通过消息反射,派生类都可以将任何发送给父窗口的消息映射给自己的成员函数。=WM_COLCOLOR消息前的“=”就表示该消息为反射消息。

CMyEdit.h中将CtlColor()函数声明中的两个参数名的注释去掉

afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);

然后再CMyEdit.cpp中将CtlColor()函数定义中的两个参数名的注释去掉,并加入如下代码

HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT nCtlColor)

{

pDC->SetTextColor(RGB(255, 0, 0));

pDC->SetBkColor(RGB(0, 255, 0));

return (HBRUSH)CreateSolidBrush(RGB(0, 0, 255));

}

其中,CDC类的SetTextColor()函数的作用是设置编辑框文字的颜色;CDC类的SetBkColor()函数的作用是设置文字背景的颜色;CtlColor()函数的返回值是通过CreateSolidBrush()创建的画刷是用来设置编辑框背景的。

最后,编译生成动态库文件。

2 调用动态库程序的生成

生成一个基于对话框的MFC程序,修改该程序的“附加库目录”和“附加依赖项”(修改的方法见VS2015动态库编程之Win32动态库的使用),并且将生成的DLL文件拷贝到该MfC程序源代码所在的目录下。

2.1 界面设计

在该MFC程序的对话框中添加一个编辑框控件,如图4所示。

 

4 对话框界面设计

2.2 为控件添加变量

选中该编辑框控件,并且在右键菜单中选择“添加变量”,之后,在弹出的“添加成员变量向导”对话框中将“类别”选择为“Control”;将“变量类型”手动添加为“CMyEdit”,即在“1 动态库的生成”中在DLL文件中添加的CEdit类的派生类;将“变量名”设置为“m_myEdit”,最后,点击右下角的“完成”按键,如图5所示。

 

5 为编辑框控件添加变量

接下来,将“1 动态库的生成中动态库中CMyEdit类的头文件MyEdit.h拷贝到本MFC程序源代码所在的目录,将该头文件导入到项目中,并在该MFC程序的头文件中包含MyEdit.h

#include “MyEdit.h”

2.3 设置编辑框显示的内容

MFC对话框类的OnInitDialog()函数中,通过m_myEdit变量设置编辑框显示的内容。

m_myEdit.SetWindowTextW(_T("这是自定义控件"));

运行该MFC程序,其效果如图6所示。

 

6 调用DLLMFC程序运行效果


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个功能强大的MFC界面处理扩展库:CJ60Lib 这是从网上搜集的一个扩展库,把它分享给大家! 简介: CJ60Lib是基于MFC基础之上的一个扩展库,主要是改进MFC的下述类: CCJButton - ( CJButton.cpp and CJButton.h )对CButton的改进。 CCJComboBox - ( CJComboBox.cpp and CJComboBox.h )对CComboBox的改进。 CCJControlBar - ( CJControlBar.cpp and CJControlBar.h )对CControlBar的改进。 CCJFrameWnd - ( CJFrameWnd.cpp and CJFrameWnd.h ) CCJMDIFrameWnd - ( CJMDIFrameWnd.cpp and CJMDIFrameWnd.h ) CCJDockBar - ( CJDockBar.cpp and CJDockBar.h ) 这些类重载了缺省的主框架布局,以增加3D效果到工具条。为了使用这些类,仅将 CFrameWnd 改为 CCJFrameWnd,其中,CMainFrame 包含在 Mainfrm.h文件中,(对于MDI,采用CCJMDIFrameWnd)。 CCJOutlookBar - ( CJOutlookBar.cpp and CJOutlookBar.h )新增类,用于实现Outlook中的工具条。 CCJPagerCtrl - ( CJPagerCtrl.cpp and CJPagerCtrl.h )新增类,用于设置标签视或者对话框。 CCJTabCtrlBar - ( CJTabCtrlBar.cpp and CJTabCtrlBar.h )新增类。 CCJToolBar - ( CJToolBar.cpp and CJToolBar.h )对CToolBar类的改进。 CCoolMenuManager -( CoolMenu.cpp, Emboss.cpp and CoolMenu.h ) CSubclassWnd -( Subclass.cpp and Subclass.h ) 新增类,用于改进已有的菜单。 CFlatToolBar - ( FlatBar.cpp and FlatBar.h ) Obsolete with VC 6.0 CModuleVersion - ( ModulVer.cpp and ModulVer.h ) 这是CCJToolBar的基类。 CCoolBar, CRebarInfo - ( CoolBar.cpp and CoolBar.h ) Obsolete with VC 6.0 新增类,用于实现Internet Explorer 4风格的工具条。 CHyperLink - ( HyperLink.cpp and HyperLink.h ) 超链接控件。 使用方法: 在Project Settings中选择General标签,Microsoft Foundation Class设置为 Use MFC in a shared DLL。 在Project Settings中选择Link标签,设置Category为Input,增加../Lib到Additional Library Path。 在Link标签中,改变Category为General,Output Name (所有配置)设置为../Lib。 选择C/C++标签,改变Category为Preprocessor,增加../Include到Additional Include Directories. 最后一步是添加下面两行代码到StdAfx.h头文件中: #define MFCX_PROJ #include 为了能静态链接到CJ60Lib,需要做下面修改: 在project settings对话框中,选择General标签,确保Microsoft Foundation Class设置为Use MFC in a static library。 添加下面代码到StdAfx.h 头文件,其将使库静态链接到应用程序: #define MFCXLIB_STATIC #define MFCX_PROJ #include
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值