VC++控件的汉字及颜色的编程控制
来源:互联网 发布:我的世界盒子枪械js 编辑:程序博客网 时间:2024/06/05 09:13
摘 要 文章着重讨论如何用编程的方法控制对话框中常用控件的汉字文本的字体及颜色,并以VC++ 5.0[1]为例给出具体的操作方法及相关程序代码。
关键词 控件汉字,字体,颜色,编程
在Windows应用程序中,VC++ 5.0为编程人员提供了各种控件来实现直观、方便、快捷的交互界面,这些控件包括如静态控件、按钮、滚动条等六种在Windows系统中广泛应用的一般控件(如表1所示)和由Windows 95 及Windows NT (4.0以后)提供动态连接库Commctrl.dll及Comctl32.dll中的公共控件以及支持Internet的ActiveX控件共三大类。
从表1可以看出,几乎所有的控件都有文本。在用户界面的设计中,往往需要改变这些文本的字体及颜色,并能在程序中加以控制。对于一般用户来说,文本最好是汉字,虽然VC++ 5.0的MFC支持汉字,但控件中的汉字显示不近人意,而且汉字文本的编程控制更加困难;因此,作者以表1中的控件类型来探讨如何改变汉字文本的字体及颜色, 并VC++ 5.0为例给出具体的操作方法及相关程序代码。
表1 一般控件的类型[2]
选择列表中已有的项,还能编辑出新的项
1 控件的字体控制
控件的创建方式有两种。一种是在对话框模块中进行创建,通过对话框编辑器可以对控件进行添加、选取、删除、布局、定义、改变大小等操作。另一种方式是通过调用CreateWindow或CreateWindowEx函数来创建控件,这时必须指定控件的窗口类。在上述两种方式下,控件的字体、大小的改变方法是不一样的。由于第一种方式更具操作性,适合于大多数编程人员。
1.1 在对话框模块中进行控制
操作过程如下:
调用对话框的属性对话框(Properties),选择General选项;
单击Font按钮,弹出字体对话框;
选择字体的种类(如宋体等)及尺寸(如9号),从而改变该对话框中所有控件的字体。这里需要提出的是:什么样的字体更接近于Windows系统的对话框的字体?经过作者反复探索,发现字体为宋体、尺寸选择为9号最理想。
1.2 编程控制
控件实际上是一种子窗口,因而具有许多通用的窗口属性,并且可使用ShowWindow、Movewindow等窗口管理函数来显示或隐藏控件、改变控件的位置和尺寸以及其它操作。这些窗口函数都是CWnd类的成员函数,在该类中成员函数SetFont、GetFont是用来设置、获取窗口的字体的,它们的函数原型描述如下:
void SetFont( CFont*pFont, BOOL bRedraw = TRUE);
参数:
pFont——某一新字体。
bRedraw——若为TRUE将重画 CWnd 对象。
CFont* GetFont( ) const;
返回值:
返回包含this 窗口的当前字体的 CFont 指针。
我们只要通过调用GetDlgItem函数获取某一控件的CWnd类指针,就可以使用上述两个成员函数,改变控件的字体。
在使用某种字体(非默认字体)之前,应用程序要创建相应的逻辑字体。CreateFont函数和CreateFontIndirect函数都可以用来创建逻辑字体。调用CreateFont函数虽然直接创建字体,但要求给出十四个参数,显得很麻烦。
编程时,若将字体设置成“黑体、宋体、仿宋—GB2312、楷体—GB2312、隶书、幼圆”中的某一字体时,需将lfCharSet设置成GB2312—CHARSET才使设置的字体有效。下面给出相关程序:
2 CDC *pDC=pWnd->GetDC();
3 CFont font;
4 LOGFONT stFont;
5 memset(&stFont,0,sizeof(LOGFONT));
6 stFont.lfHeight=MulDiv(12,-pDC->GetDeviceCaps(LOGPIXELSY),72);//设置字体高度为12
7 stFont.lfWeight=FW—NORMAL;
8 stFont.lfCharSet=GB2312_CHARSET;
9 strcpy(stFont.lfFaceName,"黑体");//设置字样为黑体
10 font.CreateFontIndirect(&stFont);
11 CFont *oldfont=pDC->SelectObject(&font);
12 pWnd->SetFont(&font,TRUE);
13 font.DeleteObject();
14 pDC->SelectObject(oldfont);
15 pWnd->ReleaseDC(pDC);
参见上面的代码将批pDC引入CTestingView.OnInitialUpdate()的中的关于CListCtrlStyled的部分,具体代码如下:
2 CWnd *pWnd=GetDlgItem(IDC_LIST2);//获取标识号为IDC—USER的控件的CWnd指针
3 CDC *pDC=pWnd->GetDC();
4CFont font;
5 LOGFONT stFont;
6 memset(&stFont,0,sizeof(LOGFONT));
7 stFont.lfHeight=MulDiv(16,pDC->GetDeviceCaps(LOGPIXELSY),72);//设置字体高度为12
8 stFont.lfWeight=FW_NORMAL;
9 stFont.lfCharSet=GB2312_CHARSET;
10 strcpy(stFont.lfFaceName,"黑体");//设置字样为黑体
11 font.CreateFontIndirect(&stFont);
12
13 pWnd->SetFont(&font,TRUE);
14
15 //m_ListCtrlStyled.SetFont(&font);//<===原来用此语句
另外,Windows还提供了六种库存字体。应用程序提供调用GetStockObject函数,给出适当的标识参数,就可以获得库存的逻辑字体。这六种库存字体的标识号是:SYSTEM—FONT、SYSTEM—FIXED—FONT、ANSI—FIXED—FONT、ANSI—VAR—FONT、OEM—FIXED—FONT、DEICE—DEFAULT—FONT(只适用于Windows NT操作系统)或DEFAULT—GUI—FONT(只适用于Windows 95操作系统)。使用时,只需将上述程序的4-10语句删除,在删除的地方增加下列语句即可,字体的大小由系统自动确定:
HFONT hfont;
hfont=(HFONT)GetStockObject(OEM—FIXED—FONT);
font.FromHandle(hfont);
2 控件文本颜色的控制[3]
在绘制控件前,Windows向该控件的父窗口发送一条WM—CTLCOLOR消息,目的是获得该控件的颜色。CWnd对象通过重置虚拟方法OnCtlColor处理WM—CTLCOLOR消息。如果返回一个HBRUSH,就会用它绘制控件的背景。在从OnCtlColor方法返回之前设置控件文本的前景和背景颜色,就可对控件文本颜色进行控制[1];另外,文字格式化的其他函数如SetBKMode、SetTextCharacterExtra、SetTextAlign等对控件文本同样有效。下面举例说明:
1) 在某项目中创建新的对话框资源IDD—DIALOG1,增加基于CDialog的新类CTestDlg。
2) 用资源编辑器添加列表框控件IDC—TLIST、静态文本控件IDC—TSTAT、“测试”按钮IDC—TBUTT、“退出”按钮IDOK。
3) 用ClassWizard添加消息处理程序和成员变量
为下述对象添加消息处理函数:
用Add Variable对话框添加下述成员变量:
void CTestDlg::OnTbutt()
{
m—bkcolor=RGB(0,255,0);
m—focolor=RGB(255,0,0);
m—list.Invalidate();
}
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m—bkcolor=GetSysColor(COLOR—WINDOW);
m—focolor=GetSysColor(COLOR—WINDOWTEXT);
TCHAR szpath[MAX—PATH]={"c:\\windows"};
DlgDirList(szpath,IDC—TLIST,IDC—TSTAT,DDL—READWRITE|DDL—READONLY|
DDL—HIDDEN|DDL—SYSTEM|DDL—ARCHIVE);//将IDC—TLIST初始化成文件列表
return TRUE;
}
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor==CTLCOLOR—LISTBOX){
pDC->SetBkColor(m—bkcolor);
pDC->SetTextColor(m—focolor);
}
return hbr;
上述OnCtlColor方法的代码中(nCtlColor== CTLCOLOR—LISTBOX),使列表框类的颜色得以改变;若同时有两个列表框,则两个列表框的颜色将同时改变,而不能单独改变其中某个列表框的颜色;除此之外,还有按钮(CTLCOLOR—BTN)、对话框(CTLCOLOR—DLG)、编辑框(CTLCOLOR—EDIT)、消息框(CTLCOLOR—MSGBOX)、滚动条(TLCOLOR—SCROLLBAR)、静态文本(CTLCOLOR—STATIC)等控件类有类似的现象。
至此,我们可以在程序中对控件文本的字体和颜色进行控制,使开发的用户界面更加美观、友好。
丁有和 硕士生。从事CAD、CAI的研究。
转帖:http://www.cnblogs.com/cy163/archive/2006/11/25/572507.html
- VC++控件的汉字及颜色的编程控制
- VC++控件的汉字及颜色的编程控制
- VC++控件的汉字及颜色的编程控制
- VC++控件的汉字及颜色的编程控制
- VC++控件的汉字及颜色的编程控制
- QT窗体及控件的颜色控制
- VC中改变窗体及控件的颜色
- VC:改变控件的背景颜色及字体
- VC++深入详解 第十章 绘图控制 用CButtonST类改变按钮控件的背景色及文本颜色 自己实现
- VC改变控件的背景颜色
- VC改变控件的背景颜色 字体 文本颜色
- VC改变控件的背景颜色 字体 文本颜色
- 孙鑫VC学习笔记:第十讲画图 改变对话框及控件的文字/背景颜色
- 孙鑫VC学习笔记:第十讲画图 改变对话框及控件的文字/背景颜色
- 【VC控件TAB切换顺序】的控制
- 学习VC有了几天,但VC中改变窗体及控件的颜色我都不知道在哪改?
- 关于设置对话框的背景颜色,和设置控件的字体颜色或背景颜色VC++
- 浅谈vc里控件的字体和颜色的改变
- 提升工作效率之seo人员必备的几款工具
- servlet jsp 重定向 和服务器跳转
- 13.2 动物学叫
- Linux下的硬件驱动——USB设备(上)(驱动配置部分)
- JQuery得到Radio或Dropdownlist的值
- VC++控件的汉字及颜色的编程控制
- APP性能之终端兼容优化分享
- word-wrap,word-break,white-space,text-overflow的区别和用法 文字处理方法
- zz - transcript of Defining and Using Shared Resources in a Custom Control Library
- mysql 新建用户不能show databases;
- iis 无法找到该页
- 发送邮件编程原理
- 数据库大作业
- HTML Application