MFC 静态文本的自绘 空心字的实现
想在对话框里,显示几个字是很简单的,只要用静态文本的输出就可以了。然而有时候我们需要显示特效的字,我们希望显示的文字就像Word里的艺术字一样,看起来美观。这时我们可以重写CStatic类。用DrawItem方法重绘。
首先,我们想要激活CStatic控件的自绘属性,这样DrawItem才能有效。我们发现用激活CButton自绘属性的方法那样来激活 CStatic控件的自绘属性是不行的。他们的激活方式是不一样的。
不用说先新建一个MFC类叫CCustomStatic类并继承于CStatic父类。覆写PreSubclassWindow方法,在PreSubclassWindow激活CStatic的自绘属性。
代码如下:
void CCustomStatic::PreSubclassWindow()
{
DWORD dwstyle = GetStyle();
SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwstyle | SS_OWNERDRAW );
CStatic::PreSubclassWindow();
}
现在我们可以覆写DrawItem方法了。
代码如下:
void CCustomStatic::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CString strText;
GetWindowText(strText);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
UINT state = lpDrawItemStruct->itemState;
CRect rect;
GetClientRect(rect); CFont font;
CFont *pOldFont;
font.CreateFont(
0.9*rect.Height(), // nHeight
, // nWidth
, // nEscapement
, // nOrientation
FW_BOLD, // nWeight
TRUE, // bItalic
FALSE, // bUnderline
, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("宋体")); // lpszFacename pOldFont = dc.SelectObject(&font);
dc.SetBkMode(TRANSPARENT); CPen pen(PS_SOLID, , RGB(, , ));
CPen *pOldPen;
pOldPen = dc.SelectObject(&pen);
dc.BeginPath();
dc.TextOut(rect.top-, rect.left +, strText);
dc.EndPath();
int num = dc.GetPath(NULL, NULL, );
CPoint *pt = new CPoint[num];
BYTE *type = new BYTE[num];
num = dc.GetPath(pt, type, num);
CPoint pstart;
for (int j = ; j < num; j++)
{
switch (type[j])
{
case PT_MOVETO:
dc.MoveTo(pt[j]);
pstart = pt[j];
break;
case PT_LINETO:
dc.LineTo(pt[j]);
break;
case PT_BEZIERTO:
dc.PolyBezierTo(pt + j, );
j += ;
break;
case PT_BEZIERTO|PT_CLOSEFIGURE:
pt[j+] = pstart;
dc.PolyBezierTo(pt + j, );
j += ;
break;
case PT_LINETO| PT_CLOSEFIGURE :
dc.LineTo(pstart);
break;
}
dc.CloseFigure();
}
font.DeleteObject();
pen.DeleteObject();
delete pt;
delete type; dc.Detach();
}
头文件里不要忘记了声明
void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
运行效果如下:空心字 效果
MFC 静态文本的自绘 空心字的实现的更多相关文章
- vs mfc 静态文本 改变字体大小
VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体.对于你的问题,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了. 例子: 1.改静态文 ...
- MFC 静态文本框
窗体上操作控件内容,需要句柄,在控件处使用鼠标右键——添加变量. DoDataExchange()函数会自动生成代码,把ID与变量绑定(即DDX_Control(pDX, IDC_TEXT, objT ...
- MFC编程入门之二十(常用控件:静态文本框)
上一节讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组合框.图片控 ...
- MFC中修改静态文本框中文字的字体、颜色
假设有一个静态文本框控件,其ID为:IDC_STATIC_XSDJ,且关联一个control类的CStatic类型的变量m_static_xsdj. 设置字体时自然要用到CFont类,下面介绍两种方法 ...
- MFC控件编程之 按钮编辑框.静态文本的使用,以及访问控件的七种方法.
MFC控件编程之 按钮编辑框.静态文本的使用以及访问控件的七种方法. 一丶按钮.静态文本的通用属性. 他们都有一个属性.就是可以输入标题内容.以及可以自定义控件ID. 创建一个MFC Dlg对话框. ...
- VS2010/MFC编程入门之二十(常用控件:静态文本框)
上一节鸡啄米讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始鸡啄米将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组 ...
- 【MFC】MFC改变对话框中静态文本的字体大小
MFC改变对话框中静态文本的字体大小 2010/08/09 11:30 VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体.对于你的问题,需要首先用CreateFont来建立一个 ...
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文: http://blog.csdn.net/supermanking/article/detail ...
- MFC中如何给静态文本框添加消息响应
需要两个步骤: 第一个: 是改变它的ID(默认情况下所有的静态文本框的ID都为IDC_STATIC,你需要改变他的ID为其他的值). 第二个: 是在它的属性对话框中选中Notify选项,VS是将该属性 ...
随机推荐
- 5 HTML&JS等前端知识系列之jquery基础
preface jquery其实就是对javascript的再次封装,方便我们开发者调用,下载地址是:http://jquery.com/download/ ,下面就说说常用使用方法 选择器 基本选择 ...
- 借助JavaScript中的Dom属性改变Html中Table边框的颜色
借助JavaScript中的Dom属性改变Html中Table边框的颜色 -------------------- <html> <head> <title>我是页 ...
- redis 常用命令
临时启动:redis-server.exe redis.conf/redis-server redis.windows.conf安装Windows服务:redis-server.exe --servi ...
- java.lang.NoClassDefFoundError: Lorg/slf4j/Logger;
如果你出现类似如下错误 1. Install tomcat7 in my home directory and set up `CATALINA_HOME` environment variable ...
- 关于JSF中immediate属性的总结(二)
The immediate attribute in JSF is commonly misunderstood. If you don't believe me, check out Stack O ...
- 移动Web初级入门
最好的阅读是输出. –玉伯 即将开始涉入移动Web了,有点小兴奋也有点小紧张,希望能在未来的团队里带来一些价值.记录一下我现在所认识的移动Web. 原文摘自我的前端博客,欢迎大家来访问 原文地址:ht ...
- HashTable初次体验
用惯了数组.ArryList,初次接触到HashTable.Dictionary这种字典储存对于我来说简直就是高大上. 1.到底什么是HashTable HashTable就是哈希表,和数组一样,是一 ...
- Android Textview实现文字颜色渐变效果
最近做应用的时候遇到一个需求,一行文字的颜色需要一个渐变效果 如上所有 从左到有逐渐变化,自己写了一个demo实现上述效果 package com.huwei.example.test; import ...
- Entity Framework 使用Mysql的配置文件
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...
- BugFree 测试管理系统
测试经理 分配 每个人的账号 新建bug -> bug已修复 -> 已验证 -> closed