用纯API(不用MFC)怎样设置mfc编辑框显示文字特定的字体,比如宋体

VC 控件的字体控制 若将字体设置成“宋体、仿宋—GB2312、隶书、幼圆”中的某一字体时,需将lfCharSet设置成GB2312—CHARSET才使设置的字体有效 - cy163 - 博客园
随笔 - 1112, 文章 - 0, 评论 - 478, 引用 - 9
VC++控件的汉字及颜色的编程控制
丁有和 孙健
  摘 要 文章着重讨论如何用编程的方法控制对话框中常用控件的汉字文本的字体及颜色,并以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( )  返回值:  返回包含this 窗口的当前字体的 CFont 指针。  我们只要通过调用GetDlgItem函数获取某一控件的CWnd类指针,就可以使用上述两个成员函数,改变控件的字体。  在使用某种字体(非默认字体)之前,应用程序要创建相应的逻辑字体。CreateFont函数和CreateFontIndirect函数都可以用来创建逻辑字体。调用CreateFont函数虽然直接创建字体,但要求给出十四个参数,显得很麻烦。  编程时,若将字体设置成“黑体、宋体、仿宋—GB2312、楷体—GB2312、隶书、幼圆”中的某一字体时,需将lfCharSet设置成GB2312—CHARSET才使设置的字体有效。下面给出相关程序:
 1&CWnd&*pWnd=GetDlgItem(IDC_USER);//获取标识号为IDC—USER的控件的CWnd指针&&&&2&CDC&*pDC=pWnd-&GetDC();&&&&3&CFont&&&&&4&LOGFONT&stF&&&&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的部分,具体代码如下:
&1&2&&&&CWnd&*pWnd=GetDlgItem(IDC_LIST2);//获取标识号为IDC—USER的控件的CWnd指针&3&&&&CDC&*pDC=pWnd-&GetDC();&4CFont&&5&&&&&LOGFONT&stF&6&&&&memset(&stFont,<span style="COLOR: #,sizeof(LOGFONT));&7&&&&&stFont.lfHeight=MulDiv(<span style="COLOR: #,pDC-&GetDeviceCaps(LOGPIXELSY),<span style="COLOR: #);//设置字体高度为12&8&&&&&&&stFont.lfWeight=FW_NORMAL;&9&&&&&&&stFont.lfCharSet=GB2312_CHARSET;<span style="COLOR: #&&&&&&&&strcpy(stFont.lfFaceName,"黑体");//设置字样为黑体<span style="COLOR: #&&&&&&&font.CreateFontIndirect(&stFont);<span style="COLOR: #<span style="COLOR: #&&&&pWnd-&SetFont(&font,TRUE);<span style="COLOR: #<span style="COLOR: #&&&&//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)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、&#8220;测试&#8221;按钮IDC—TBUTT、&#8220;退出&#8221;按钮IDOK。  3) 用ClassWizard添加消息处理程序和成员变量  为下述对象添加消息处理函数:
OnInitDialog
WM—INITDIALOG
OnCtlColor
WM—CTLCOLOR
IDC—TBUTT
BN—CLICKED
  切换到Class Wizard中的Member Varible标签,添加下述成员变量:
IDC—TLIST
IDC—TSTAT
  4) 给类CTestDlg添加成员变量  用Add Variable对话框添加下述成员变量:
m—bkcolor
m—focolor
  5) 编写上述的代码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);}  上述OnCtlColor方法的代码中(nCtlColor== CTLCOLOR—LISTBOX),使列表框类的颜色得以改变;若同时有两个列表框,则两个列表框的颜色将同时改变,而不能单独改变其中某个列表框的颜色;除此之外,还有按钮(CTLCOLOR—BTN)、对话框(CTLCOLOR—DLG)、编辑框(CTLCOLOR—EDIT)、消息框(CTLCOLOR—MSGBOX)、滚动条(TLCOLOR—SCROLLBAR)、静态文本(CTLCOLOR—STATIC)等控件类有类似的现象。  至此,我们可以在程序中对控件文本的字体和颜色进行控制,使开发的用户界面更加美观、友好。
丁有和 硕士生。从事CAD、CAI的研究。谁能给我个纯C++ API函数(不用MFC框架生成)写的串口通信程序呢?包含把收到的字符正确显示到屏幕上的。_百度知道
谁能给我个纯C++ API函数(不用MFC框架生成)写的串口通信程序呢?包含把收到的字符正确显示到屏幕上的。
我只前写的cout输出总是有乱码,不知道中间怎么处理就不会出现乱码了?所以求能正确输出的程序
串口读写你可以参考这个篇文章关于cout输出是乱码的这个问题,可能你接收到的是数值数据,不是字符数据,如果是这样的,你cout需要考虑到这个。
我用串口助手连续发的一句话
其他类似问题
为您推荐:
api函数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁用纯API的形式,有关状态栏和工具栏的相关函数有哪些呢?功能是什么?是纯API的,不是MFC里面的哈~~_百度知道
用纯API的形式,有关状态栏和工具栏的相关函数有哪些呢?功能是什么?是纯API的,不是MFC里面的哈~~
我说的是~~~VC编程~~用的是vs2008,谢谢。
不好意思啊, 我刚刚才看你您的问题...首先要说明的是, 我并没有使用API来写过状态栏和工具栏, 我都是用MFC来做的. 而且在我看来, Windows并没有提供专门的API来处理这两种控件, 而是把它们作为一种特殊的窗口来实现的. 只需要在创建时添加一些特殊的flag即可. 而且在MFC中, 由其派生关系: CToolBar/CStatusBar --& CCnotrolBar --& CWnd也可以看出这种关系.下面以工具栏为例, 状态栏有什么问题再讨论吧.1. 首先要创建工具栏, 有两个函数CreateToolbarEx或者CreateWindowEx. 后者是创建所有窗口都要用的函数, 所以需要指定其窗口类是TOOLBARCLASSNAME. 前都则是专门用来创建工具条的, 具体参数比较条, 你可以去网上搜一下, 函数中指定了位图, 按钮等等. 我觉得用后者更好一些, 该函数功能更强大一些.2. 对于工具栏的操作是通过发送消息来实现的, 可能需要了解一下SendMessage函数: LRESULT SendMessage(HWND, UINT, WPARAM, LPARAM);下是几个常用的操作, 可能需要用到的:1.给工具条添加按钮使用TB_ADDBUTTONS消息, 插入按钮用TB_INSERTBUTTON消息2. 响应函数. 工具栏中的每个按钮都有一个消息id与之关联, 当用户按下按钮时系统会给父窗口发送WM_COMMAND或者WM_NOTIFY消息, 可以通过该id来识别更个按钮, 进而进行响应.3. 使用ToolTipControl. 当把鼠标停留在工具栏上时, 一般会弹出一个小窗口, 表明该按钮的功能(就是MFC中的CToolTipControl). 欲使用该功能, 在创建工具栏时要含有TBSTYLE_TOOLTIPS标识. 要使用该功能, 需要处理TTN_GETDISPINFO消息.4. 给按钮指定image. 这是通过给控件发送TB_ADDBITMAP消息来实现的.这些都是些皮毛, 要是真用起来的话, 肯定会有很多很多的细节问题. 要是有问题的话, 可以再讨论
其他类似问题
为您推荐:
其他2条回答
创建它可以用CreateStatusWindow,也可以用CreateWindow(Ex)。但是前提都要#include &CommCtrl.h&,并#pragma comment(lib, &comctl32.lib&)。CreateWindow时,要用STATUSCLASSNAME指定lpClassName,长宽位置都为零。其他还有很多函数,不清楚的话可以去看看msdn。操作它主要像楼上一样,用SendMessage。
如果你坚持用google工具栏的话 推荐重设 或者等它下载完再说如果你找不到或者不想用我劝你马上卸掉
状态栏的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 mfc获取编辑框内容 的文章

 

随机推荐