如何在ActiveX控件中使用字体3

例程2:Label1.ocx

  例程2的Label1控件与例程1的Label控件在功能实现上没有任何区别,只是在改变字体特性时,不再使用库存字体属性Font,而是使用自定义字体属性CaptionFont。下面我们将结合Label1控件介绍如何在控件中使用自定义属性。

  打开Visual C++ 6.0,按照例程1的操作步骤新建Label1工程,象例程1那样接受所有默认设置, 完成Label1工程创建。如图2-1。

图2-1

  使用ClassWizard 给控件增加库存属性BackColor,ForeColor,Caption

  1. 单击View菜单的ClassWizard打开 ClassWizard;
  2. 单击Automation标签;
  3. Class Name下拉列表框选择CLabel1Ctrl,单击 Add Property;
  4. 在External name框中,单击BackColor;
  5. 单击OK;
  6. 单击OK确认你的选择并关闭ClassWizard;

  按上述同样操作,添加库存属性ForeColor,Caption。BackColor,ForeColor,Caption这三个属性分别用来设置Label1控件的背景色,前景色和字符串内容。如图2-2。

 图2-2

  使用ClassWizard 给控件增加自定义属性CaptionFont

  1. 单击View菜单的ClassWizard打开 ClassWizard;
  2. 单击Automation标签;
  3. Class Name下拉列表框选择CLabel1Ctrl,单击 Add Property;
  4. 在External name框中,输入自定义属性名CaptionFont;
  5. 在Implementation框中,单击Get/Set methods;
  6. 在Return Type框中,选择LPFONTDISP作为属性类型;
  7. 单击OK;
  8. 单击OK确认你的选择并关闭ClassWizard;

  如图2-3

图2-3

  修改控件代码

  在控件的头文件(Label1Ctl.h),添加一个protected成员变量的声明:

protected:
CFontHolder m_fontCaption;

  如图2-4。

在控件的执行文件(.CPP)中,如下操作:

在控件的构造函数中初始化m_fontCaption。

CLabel1Ctrl::CLabel1Ctrl(): m_fontCaption(&m_xFontNotification)
{
   InitializeIIDs(&IID_DLabel1, &IID_DLabel1Events);
   // TODO: Initialize your control''s instance data here.
}

  声明一个静态FONTDESC结构,该结构包含缺省的字体属性。

static const FONTDESC _fontdescCaption =
{ sizeof(FONTDESC), OLESTR("MS Sans Serif"), FONTSIZE( 12 ), FW_BOLD,
ANSI_CHARSET, FALSE, FALSE, FALSE };

  在控件的DoPropExchange 成员函数,添加一个PX_Font函数的调用,提供自定义字体属性的初始化和持久化。

void CLabel1Ctrl::DoPropExchange(CPropExchange* pPX)
{
   ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
   COleControl::DoPropExchange(pPX);
   PX_Font(pPX, _T("CaptionFont"), m_fontCaption, &_fontdescCaption);
}

  完成控件的GetCaptionFont成员函数。

LPFONTDISP CLabel1Ctrl::GetCaptionFont()
{
   // TODO: Add your property handler here
   return m_fontCaption.GetFontDispatch();
}

  完成控件的SetHeadingFont成员函数

void CLabel1Ctrl::SetCaptionFont(LPFONTDISP newValue)
{
   // TODO: Add your property handler here
   m_fontCaption.InitializeFont(&_fontdescCaption,newValue);
   OnFontChanged();
   SetModifiedFlag();
}

修改控件的OnDraw成员函数,

void CLabel1Ctrl::OnDraw(
       CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
   // TODO: Replace the following code with your own drawing code.
   COLORREF colorBack=TranslateColor(GetBackColor());
   COLORREF colorFore=TranslateColor(GetForeColor());
   CBrush brush(colorBack);
   pdc->FillRect(rcBounds, &brush);
   //背景色填充整个控件
   pdc->SetBkMode(TRANSPARENT);
   //设置透明背景色
   pdc->SetTextColor(colorFore);
   //前景色设置为字体颜色
   const CString& strCaption = InternalGetText();
   //获得库存属性Caption的值
   CFont* pOldFont;
   pOldFont = SelectFontObject(pdc,m_fontCaption);
   //设备上下文中选择字体对象
   RECT rect;
   ::CopyRect(&rect,rcBounds);
   pdc->DrawText(strCaption,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
   //单行,水平居中,垂直居中显示
   pdc->SelectObject(pOldFont);
}

添加颜色属性页和字体属性页打开工程的Label1Ctl.cpp文件,将其中的如下代码进行修改:

BEGIN_PROPPAGEIDS(CLabel1Ctrl, 1)
   PROPPAGEID(CLabelPropPage::guid)
END_PROPPAGEIDS(CLabel1Ctrl)
修改后的代码: BEGIN_PROPPAGEIDS(CLabel1Ctrl, 3) // 具体个数由实际情况而定
   PROPPAGEID(CLabel1PropPage::guid)//系统自带的属性页
   PROPPAGEID(CLSID_CColorPropPage) //加入Color属性页
   PROPPAGEID(CLSID_CFontPropPage) //加入Font属性页
END_PROPPAGEIDS(CLabel1Ctrl)
修改系统自带的属性页

  打开系统自带的属性页资源IDD_PROPPAGE_LABEL1,将静态文本框IDC_STATIC的内容改为"Caption:",添加一个编辑框(Edit Box)控件,控件ID为IDC_CAPTION。如图2-5。

图2-5

  按下"Ctrl+W"组合键打开ClassWizard,选中Member Variables标签,Class name:下拉列表框选择CLabel1PropPage,Control IDs:选中IDC_CAPTION,单击Add Variable…按钮,弹出Add Member Variable对话框。

  在Add Member Variable对话框中,Member variable name:框输入m_caption,Category选择Value,Variable type:框选择CString,Optional property name:框选择Caption,单击OK按钮。

  再次单击OK按钮关闭ClassWizard。

  上述操作,编辑框IDC_CAPTION与Caption属性之间建立了联系。您可以通过修改编辑框的内容来改变控件Caption的属性值。

  编译并构建Label1.ocx控件。

第三部分 使用多种字体

  前面分别详细说明了如何在控件中使用库存属性和自定义属性。但有时我们需要在一个控件中使用多种字体,下面我们将说明如何在一个控件中实现多种字体属性。

  大多数情况下,每个字体对象都能够通过调用IFontNotification接口的成员函数(由COleControl实现)在自身更改时提供通知。如果控件使用库存Font属性,则其通知由COleControl的OnFontChanged成员函数处理。当添加自定义Font属性时,可以让它们使用同一实现。在第二部分的例程中,这一点通过在初始化m_fontCaption成员变量时传递&m_xFontNotification来实现。

  例程3将演示多个字体对象使用IFontNotification的同一实现,实现在一个控件中使用多种字体。

  例程3:LabelEx0.ocx

  例程1的Label控件确实增强了VC++工具箱中的Static Text控件的功能。但对于形如"m3/h","h2o"的文本内容,使用一个Label控件就有点无能为力了,下面我们将制作一个LabelEx0控件来再次扩展Label控件的功能,同时演示如何在控件中添加多种字体属性。

  LabelEx0控件内部由上、中、下三个部分组成,三个部分的字体内容和字体属性可以分别设置,以方便地显示上下标部分。

  打开Visual C++ 6.0,新建LabelEx0工程,接受所有默认设置,完成LabelEx0工程创建。使用ClassWizard 给控件增加库存属性BackColor,ForeColor:

  1. 单击View菜单的ClassWizard打开 ClassWizard;
  2. 单击Automation标签;
  3. Class Name下拉列表框选择CLabelEx0Ctrl,单击 Add Property;
  4. 在External name框中,单击BackColor;
  5. 单击OK;
  6. 单击OK确认你的选择并关闭ClassWizard;

  我们已经给控件增加了库存属性BackColor,该属性用以设置LabelEx0控件的背景色。按上述同样操作,添加库存属性ForeColor。

  使用ClassWizard 给控件增加自定义属性CaptionUp,CaptionMiddle,CaptionDown:

  1. 单击View菜单的ClassWizard打开 ClassWizard;
  2. 单击Automation标签;
  3. Class Name下拉列表框选择CLabelEx0Ctrl,单击 Add Property;
  4. 在External name框中,输入自定义属性名CaptionUp;
  5. 在Implementation框中,单击Member variable;
  6. 在Return Type框中,选择CString作为属性类型;
  7. 单击OK;
  8. 单击OK确认你的选择并关闭ClassWizard;

  按上述同样操作,添加自定义属性CaptionMiddle,CaptionDown。CaptionUp,CaptionMiddle和CaptionDown分别用以设置LabelEx0控件上、中、下三个部分的文本内容。

  使用ClassWizard 给控件增加自定义属性XUp,YUp,XMiddle, YMiddle, XDown, YDown

  1. 单击View菜单的ClassWizard打开 ClassWizard;
  2. 单击Automation标签;
  3. Class Name下拉列表框选择CLabelEx0Ctrl,单击 Add Property;
  4. 在External name框中,输入自定义属性名XUp;
  5. 在Implementation框中,单击Member variable;
  6. 在Return Type框中,选择long作为属性类型;
  7. 单击OK;
  8. 单击OK确认你的选择并关闭ClassWizard;

  按上述同样操作,添加自定义属性YUp,XMiddle, YMiddle, XDown和YDown。其中XUp 和Yup属性用来决定上标文本的位置;XMiddle和YMiddle用以设置中间文本的位置;XDown和YDown 用以设置LabelEx0控件下标文本的位置。

  使用ClassWizard 给控件增加自定义属性FontUp,FontMiddle,FontDown

  1. 单击View菜单的ClassWizard打开 ClassWizard;
  2. 单击Automation标签;
  3. Class Name下拉列表框选择CLabelEx0Ctrl,单击 Add Property;
  4. 在External name框中,输入自定义属性名FontUp;
  5. 在Implementation框中,单击Get/Set methods;
  6. 在Return Type框中,选择LPFONTDISP作为属性类型;
  7. 单击OK;
  8. 单击OK确认你的选择并关闭ClassWizard;

  按上述同样操作,添加自定义属性FontMiddle,FontDown。FontUp,FontMiddle和FontDown分别用以设置LabelEx0控件上、中、下三个部分的字体属性。

如何在ActiveX控件中使用字体3相关推荐

  1. 如何在 ActiveX 控件中使用字体

    字体的使用是ActiveX控件制作过程中不可缺少的部分.本文将深入浅出地介绍在ActiveX控件中制作过程中如何使用字体.本文所提及的ActiveX控件制作是指利用VC++6.0的MFC Active ...

  2. vb语言中怎样编码窗体中所有字体加粗_VBText控件中使字体加粗和倾斜的代码是什么...

    展开全部 VBText控件中使字体加粗和倾e69da5e6ba9062616964757a686964616f31333365656537斜的代码是: 加粗 Label1.FontBold = Tru ...

  3. dsscocx控件出错怎么办_MFC中如何在Ocx控件中来驱动ocx事件

    我在写一个ocx控件.在控件内有一个自定义的类,处理逻辑相关的事件,比如MyClass.h和MyClass.cpp,当有人call我时,我就能在MyClass的线程内得到信息,现在我要通知给使用我这个 ...

  4. C#制作ActiveX控件中调用海康SDK的问题

    事情是这样的,有一台海康威视的摄像头,客户需要一个ActiveX控件嵌入到网页中,通过点击按钮开始录制和结束录制来进行视频的录制和保存,关于海康摄像头的二次开发在此就不多说了,可以参考SDK中的说明. ...

  5. matlab 表格控件,[转载]matlab读取excel数据并显示在excel(activex控件)中

    figure; spreadsheet = actxcontrol('OWC11.Spreadsheet.11',[0 0 560 420]); M = {'abc', 123; 12.17, log ...

  6. matlab在activex中读取视频,[转载]matlab读取excel数据并显示在excel(activex控件)中

    figure; spreadsheet = actxcontrol('OWC11.Spreadsheet.11',[0 0 560 420]); M = {'abc', 123; 12.17, log ...

  7. 如何在C#控件中画点并获得指定点的像素颜色

    画点的方法: 方法一:      用picGraphics.FillRectangle(new SolidBrush(fillColor), p.X, p.Y, 1, 1); 即用一个像素填充方法. ...

  8. 【100个 Unity实用技能】☀️ | 修改Unity UI控件中默认字体配置

    Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...

  9. 【VS开发】VS2010中导入ActiveX控件

    方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...

最新文章

  1. iOS 改变UILabel部分颜色
  2. 使MySQL 支持繁体字
  3. man命令手册打开以后的使用方法
  4. Hbase error: KeeperErrorCode = NoNode for /hbase/master错误
  5. SQL Server有这些属性吗
  6. frame越过另一个frame_一个价值2万美元的Facebook DOM XSS漏洞
  7. 资源重复 uac.res resource kept(转)
  8. 1.6 回归评估准确性的指标
  9. 7.1-7.31推荐文章汇总
  10. MongoDB数据库基础教程
  11. php李炎恢笔记,一步步学习php笔记 李炎恢瓢城web俱乐部
  12. 全桥逆变电路部分分析
  13. python开发单片机仿真软件_开源电子电路仿真模拟软件,加油国产芯片
  14. python mysql插入数据报错:TypeError: %d format: a number is required, not str
  15. 联想服务器双系统安装,联想Y700一键安装双系统教程
  16. GIC/ITS代码分析(0)GIC/ITS框架介绍
  17. 运算放大器(运放)介绍
  18. Tslint检查下代码JavaScript(angular)规范
  19. 塔夫茨计算机科学,塔夫斯大学计算机科学博士专业详情及要求是怎样的?
  20. 基于RedHat6.5的Greenplum环境配置

热门文章

  1. pandas 第十二期组队-pandas基础
  2. js 日期时间格式化,年月日时分秒
  3. 完成HTML网页制作之后的成果,index.html
  4. 2022年全球市场脱脂小麦胚芽粉总体规模、主要生产商、主要地区、产品和应用细分研究报告
  5. 微信小程序获取页面元素高度_微信小程序之动态获取元素宽高
  6. java中的\t\r\n\b(Java转义字符)分别是什么?
  7. 中文网页的外链对Google谷歌SEO有用吗
  8. Grakn Forces 2020 D E F
  9. sandstone hypercube超融合一体机知识
  10. linux yum 安装的路径在哪,yum 下载软件的存放位置