VC控件指南(3)

2019-01-19 18:32

这样既有窗口(控件)就不知不觉地修改了自己的模样和行为。

得益于控件的变量映射机制,在VC里,子类化控件并不是一件很难的事情。具体操作就是:为控件准备一个新类,例如CCoolEdit。一般这些类都从某个原有的MFC类(如:CEdit)继承而来,这样它就可以很方便地继承基类的模样和行为;接下来的工作,就是我们将控件映射成这个新的CCoolEdit,完全如同CEdit一样。 就这么简单,我们仔细走走看: 1. 准备子类;

已经有很好的CEdit类,既然我们要改造它,那就直接继承它:

图20 子类化CEdit

注意Class type选择MFC Class,我们将这个新的子类命名为CCoolEdit。 2. 映射控件对象;

参照图12,我们现在再打开“添加控件变量”窗口,打开变量类型列表,会发现我们的CCoolEdit已经赫然在列了。不错,我们就映射一个CCoolEdit变量m_CoolEdit。

图21 添加CCoolEdit对象变量

现在我们操作的控件即为CCoolEdit类型,实际上,谁都清楚,除了名字,我们的CCoolEdit 与CEdit类没有什么两样;这时候,运行程序,界面并不会发生任何变化。

既然我们需要FlashPlayer最终版本的那样酷的文本输入框,那我们继续下一步。 3. 定制子类CCoolEdit;

多查点资料,我们就可以知道:在控件显示之前,每一个控件都会向父对话框发送一个WM_CTLCOLOR消息要求获取绘制所需要的颜色(更多内容可以查阅《电脑爱好者合订本》2003年(上)附录分册《VC++界面美化编程》篇)。只要响应WM_CTLCOLOR消息,我们就可以修改控件的颜色。那好,我们响应WM_CTLCOLOR消息试试看。首先在类视图选中CCoolEdit,弹出右键菜单:

图22 添加消息处理函数

选择Add Windows Message Handler…,即弹出以下窗口:

图23 响应控件的WM_CTLCOLOR消息 复习2.5节的内容,双击WM_CTLCOLOR,添加事件响应函数CCoolEdit::CtlColor()。接下来,我们可以在CtlColor()里完成界面的定制:

HBRUSH CCoolEdit::CtlColor(CDC* pDC, UINT nCtlColor) { // TODO: Change any attributes of the DC here //设置前景色

pDC->SetTextColor(RGB(0, 255, 0)); //设置字体背景色

pDC->SetBkColor(RGB(0, 0, 0)); //设置背景色

return (HBRUSH)::GetStockObject(BLACK_BRUSH);

// TODO: Return a non-NULL brush if the parent's handler should not be called }

就这么多了,运行程序,以下是运行结果:

图24 CCoolEdit的运行结果

呵呵,怎么样?这个CCoolEdit你以后还可以使用到其它场合哦!什么都不用做,只要正常地将你的文本输入框映射成CCoolEdit就行了。

以上部分操纵的都是Windows标准控件,其实在Windows里,你还会常常接触到ActiveX控件,它来源于第三方,而非Windows操作系统。这样的控件一般来说,功能丰富而且使用方便,从而大大简化了程序员的工作。本章节以我们需要使用到的Flash控件为例细作阐述。 1 使用ActiveX控件

以上部分操纵的都是Windows标准控件,其实在Windows里,你还会常常接触到ActiveX控件,它来源于第三方,而非Windows操作系统。这样的控件一般来说,功能丰富而且使用方便,从而大大简化了程序员的工作。本章节以我们需要使用到的Flash控件为例细作阐述。 1.1 控件的注册

不同于Windows标准控件,ActiveX控件需要注册才能使用,ActiveX一般以.OCX或者.DLL文件格式发布,可以使用VC附带的工具来注册某个控件,按照以下步骤:

1. 在VC的Tools菜单下启动ActiveX Control Test Container;

2. 在ActiveX Control Test Container里打开菜单File\\Register Controls…;

3. 弹出窗口Register Controls显示系统中已注册的所有ActiveX控件,点击左下角的“Register…”按钮;

4. 选择待注册的控件文件,如:“C:\\WINNT\\system32\\Macromed\\Flash\\swflash.ocx”即为Macromedia Flash的ShockwaveFlash控件文件;

5. 点击“打开”按钮,即完成以上控件的注册,我们可以在控件列表中发现它的名字为“ShockwaveFlash. ShockwaveFlash.1”;

以上操作画面如图所示:

图25 注册ActiveX控件

还有一种简单一点的办法,使用regsvr32注册之即可,如图示出注册画面:

图26 使用regsvr32注册ActiveX控件

对于某些软件,安装时即完成对自带控件的注册。例如:Macromedia Flash安装之后,你的Internet浏览器就可以播放动画了,你也可以在控件列表里找到ShockwaveFlash控件。那么这些软件是如何完成控件的自注册的呢(这也是常见的问题之一)?一种途径是使用安装程序,它们可以自动完成ActiveX控件的注册;另一种方法是利用程序调用DllRegisterServer()即可:

HMODULE hModule=LoadLibrary(sControlFilePath); if(hModule)

{ FARPROC DLLRegisterServer = (FARPROC)GetProcAddress(hModule \ if(DLLRegisterServer)

{ HRESULT regResult = DLLRegisterServer(); if(regResult != NOERROR)


VC控件指南(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:唐诗研究-最全笔记

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: