WEB开发网
开发学院软件开发VC 如何在ActiveX控件中使用字体 阅读

如何在ActiveX控件中使用字体

 2008-02-26 20:27:03 来源:WEB开发网   
核心提示:在控件的执行文件(.CPP)中,如下操作:在控件的构造函数中初始化m_fontCaption,如何在ActiveX控件中使用字体(7),CLabel1Ctrl::CLabel1Ctrl(): m_fontCaption(&m_xFontNotification){ InitializeIIDs(&IID_DLabel1

在控件的执行文件(.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控件。

上一页  2 3 4 5 6 7 8 9 10 11  下一页

Tags:如何 ActiveX 控件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接