如何继承CStatic类使界面文本显示不再单调
2014-12-09 15:04
204 查看
[align=center] 如何继承CStatic类使界面文本显示不再单调[/align]
[align=center] [/align]
[align=left] 在VC中仅提供了基本的静态文本显示控件Static,它使用父窗口默认的字体风格显示,在许多应用中显得过于单调,如何使Static能够按照自己需要的风格显示,我这里给大家提供一种方法,大家可以自己试试。[/align]
[align=left]1.建立VC工程,在工程中基于基类CStaitc,派生出自己的CStaitcEx类,加该类到你的工程中,当然你使用类生成向导,文件自然会加入到你的工程中。一般来说生成的文件为StaticEx.cpp和StaticEx.h。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]2.编写CStaticEx类[/align]
[align=left]在StaticEx类中加入逻辑字体变量、颜色变量、字符串变量:[/align]
[align=left]LOGFONT m_LogFont;[/align]
[align=left]COLORREF m_TextColor;[/align]
[align=left]CString m_WindowsText;[/align]
[align=left]然后增加函数(public属性)[/align]
[align=left]void SetTextSize(int size = 15)//参数为逻辑字体大小[/align]
[align=left]{[/align]
m_LogFont.lfHeight = -size;
}
void SetTextFont(CString FontName)//参数为逻辑字体名
[align=left]{[/align]
strcpy(m_LogFont.lfFaceName, FontName);
[align=left]}[/align]
void SetTextWeight(int weight) // 参数为逻辑字体粗细 (value from 0 to 1000 and step is 100)
{
m_LogFont.lfWeight = weight;
}
[align=left]void SetTextColor(COLORREF crColor)[/align]
[align=left]{[/align]
m_TextColor = crColor;
[align=left]}[/align]
[align=left]增加CStaticEx类的WM_PAINT消息映射(可以用Classwizard),然后在OnPaint里添加代码[/align]
CRect nRect;
CFont NewFont, *OldFont;
NewFont.CreateFontIndirect(&m_LogFont);
OldFont = dc.SelectObject(&NewFont);
dc.SetBkMode(TRANSPARENT); //OPAQUE Background is filled TRANSPARENT
dc.SetTextColor(m_TextColor);
GetWindowText(m_WindowText);
GetClientRect(&nRect);
dc.TextOut((nRect.right/2), 0, m_WindowText);
dc.SelectObject(OldFont);
另外,构造函数中加入下列初始化代码 (这段代码在实际使用中发现,不用加,加了反而影响字体设置)
CStaticEx::CStaticEx()
{
memset(&m_LogFont, 0, sizeof(LOGFONT));
m_LogFont.lfHeight = -15;
m_LogFont.lfCharSet = GB2312_CHARSET;
strcpy((LPSTR)&(m_LogFont.lfFaceName), "宋体");
m_AlignFlag = TA_CENTER;
m_TextColor = RGB(0,0,0);
}
[align=left]完成上述代码,我们就可以在工程中使用该类实现任意大小、颜色和字体的文本显示了。[/align]
[align=left] [/align]
[align=left]3.使用你的CStaticEx类[/align]
[align=left] 在你的工程中,向以前一样拖一个Staic到你的界面上,然后手动添加变量:[/align]
[align=left]CStaticEx m_StaticEx;建议添在如下处,因为添加后在类向导的变量映射表中可以显示出来。[/align]
// Dialog Data
//{{AFX_DATA(CVoiceBasic)
enum { IDD = IDD_DLG};
CStaticEx m_StaticEx;
//}}AFX_DATA
[align=left]然后重要的一步就是在数据交换中增加你的类和控件之间的关联(假如你Static控件的名称是IDC_MYSTATIC):[/align]
void CDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVoiceBasic)
DDX_Control(pDX, IDC_MYSTATIC, m_StaticEx);
//}}AFX_DATA_MAP
}
[align=left]最后一步了,在你的工程界面初始化的时候调用你刚才CStaticEx中自己定义的函数,你就会发现你的静态文本由你来控制了,当然依次类推,逻辑字体LONGFONT中所能体现的字体风格你都是可以实现的。[/align]
m_StaticEx.SetTextColor(RGB(100, 0, 0));
m_StaticEx.SetTextSize(25);
m_StaticEx.SetTextWeight(700);
m_StaticEx.SetTextFont("隶书");
[align=left] [/align]
[align=left]4.总结[/align]
[align=left] 其实VC的基本控件的风格显示基本上都可以按照这种继承方式来实现自定义,自己可以试试。[/align]
[align=center] [/align]
[align=left] 在VC中仅提供了基本的静态文本显示控件Static,它使用父窗口默认的字体风格显示,在许多应用中显得过于单调,如何使Static能够按照自己需要的风格显示,我这里给大家提供一种方法,大家可以自己试试。[/align]
[align=left]1.建立VC工程,在工程中基于基类CStaitc,派生出自己的CStaitcEx类,加该类到你的工程中,当然你使用类生成向导,文件自然会加入到你的工程中。一般来说生成的文件为StaticEx.cpp和StaticEx.h。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]2.编写CStaticEx类[/align]
[align=left]在StaticEx类中加入逻辑字体变量、颜色变量、字符串变量:[/align]
[align=left]LOGFONT m_LogFont;[/align]
[align=left]COLORREF m_TextColor;[/align]
[align=left]CString m_WindowsText;[/align]
[align=left]然后增加函数(public属性)[/align]
[align=left]void SetTextSize(int size = 15)//参数为逻辑字体大小[/align]
[align=left]{[/align]
m_LogFont.lfHeight = -size;
}
void SetTextFont(CString FontName)//参数为逻辑字体名
[align=left]{[/align]
strcpy(m_LogFont.lfFaceName, FontName);
[align=left]}[/align]
void SetTextWeight(int weight) // 参数为逻辑字体粗细 (value from 0 to 1000 and step is 100)
{
m_LogFont.lfWeight = weight;
}
[align=left]void SetTextColor(COLORREF crColor)[/align]
[align=left]{[/align]
m_TextColor = crColor;
[align=left]}[/align]
[align=left]增加CStaticEx类的WM_PAINT消息映射(可以用Classwizard),然后在OnPaint里添加代码[/align]
CRect nRect;
CFont NewFont, *OldFont;
NewFont.CreateFontIndirect(&m_LogFont);
OldFont = dc.SelectObject(&NewFont);
dc.SetBkMode(TRANSPARENT); //OPAQUE Background is filled TRANSPARENT
dc.SetTextColor(m_TextColor);
GetWindowText(m_WindowText);
GetClientRect(&nRect);
dc.TextOut((nRect.right/2), 0, m_WindowText);
dc.SelectObject(OldFont);
另外,构造函数中加入下列初始化代码 (这段代码在实际使用中发现,不用加,加了反而影响字体设置)
CStaticEx::CStaticEx()
{
memset(&m_LogFont, 0, sizeof(LOGFONT));
m_LogFont.lfHeight = -15;
m_LogFont.lfCharSet = GB2312_CHARSET;
strcpy((LPSTR)&(m_LogFont.lfFaceName), "宋体");
m_AlignFlag = TA_CENTER;
m_TextColor = RGB(0,0,0);
}
[align=left]完成上述代码,我们就可以在工程中使用该类实现任意大小、颜色和字体的文本显示了。[/align]
[align=left] [/align]
[align=left]3.使用你的CStaticEx类[/align]
[align=left] 在你的工程中,向以前一样拖一个Staic到你的界面上,然后手动添加变量:[/align]
[align=left]CStaticEx m_StaticEx;建议添在如下处,因为添加后在类向导的变量映射表中可以显示出来。[/align]
// Dialog Data
//{{AFX_DATA(CVoiceBasic)
enum { IDD = IDD_DLG};
CStaticEx m_StaticEx;
//}}AFX_DATA
[align=left]然后重要的一步就是在数据交换中增加你的类和控件之间的关联(假如你Static控件的名称是IDC_MYSTATIC):[/align]
void CDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVoiceBasic)
DDX_Control(pDX, IDC_MYSTATIC, m_StaticEx);
//}}AFX_DATA_MAP
}
[align=left]最后一步了,在你的工程界面初始化的时候调用你刚才CStaticEx中自己定义的函数,你就会发现你的静态文本由你来控制了,当然依次类推,逻辑字体LONGFONT中所能体现的字体风格你都是可以实现的。[/align]
m_StaticEx.SetTextColor(RGB(100, 0, 0));
m_StaticEx.SetTextSize(25);
m_StaticEx.SetTextWeight(700);
m_StaticEx.SetTextFont("隶书");
[align=left] [/align]
[align=left]4.总结[/align]
[align=left] 其实VC的基本控件的风格显示基本上都可以按照这种继承方式来实现自定义,自己可以试试。[/align]
相关文章推荐
- fedora18 startx如何显示中文界面及文本模式和窗口模式切换
- 如何在SharePoint里自定义WebPart将搜索结果显示在同一个界面
- vc6/.net下console程序如何不显示界面
- 表A中的记录随时变化,程序显示A数据的界面中如何自动也跟着刷新?
- TextView如何高亮显示文本
- 继承CStatic 平面坐标形式显示数据序列
- 如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能 activeandbadboy [原作]
- 请问:软件运行前的设置界面显示'第一次运行软件,正在设置...'等信息的东东叫什么?如何做出这种东东呢?
- 如何显示旋转文本
- 如何让keil的IDE界面标题栏显示为uVision
- 如何做到既保持XP风格界面又能正常显示toobar中的图标
- SharePoint, 如何在列表项的只读界面DispForm.aspx控制字段的显示和隐藏
- 如何实现:GridView 控件中显示的文本不自动换行,隐藏超出宽度部分wj-wangjun
- vc 如何按格式显示文本内容
- [技巧]如何显示旋转文本
- 请教如何在asp.net 正确显示文本格式?
- 9.ubuntu如何使amarok显示中文界面
- Flex中如何通过displayAsPassword属性,设置TextInput文本显示密码形式(*)
- 如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能
- 如何在ogre游戏界面添加自己的信息,比如显示某变量的值