回 帖 发 新 帖 刷新版面

主题:如何设置幼圆体,宋体,楷体?与CreateFont有关吗?


我在MSDN中查看了CREATEFONT函数,似乎没有关系.但是也找不出在哪里设置.

恳请各位仁兄为我解答.

回复列表 (共6个回复)

沙发

事实上,在MFC中常用来创建字体的函数是CreatePointFont

BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL );
它的第二个参数是个字符串,它表示你要创建哪种字体,假如你设成“华文行楷”创建出来的就是华文行楷字体,如果设成“隶书”创建的就是隶书了。

板凳


我现在还没学到MFC编程,还处在API阶段.题目也是这阶段的练习题.有没有通过API函数来

设置我们想要字体的.如果有的话,又该如何设置呢?

3 楼

在平台SDK中是比较麻烦的。
HFONT CreateFont(
  int nHeight,             // logical height of font
  int nWidth,              // logical average character width
  int nEscapement,         // angle of escapement
  int nOrientation,        // base-line orientation angle
  int fnWeight,            // font weight
  DWORD fdwItalic,         // italic attribute flag
  DWORD fdwUnderline,      // underline attribute flag
  DWORD fdwStrikeOut,      // strikeout attribute flag
  DWORD fdwCharSet,        // character set identifier
  DWORD fdwOutputPrecision,  // output precision
  DWORD fdwClipPrecision,  // clipping precision
  DWORD fdwQuality,        // output quality
  DWORD fdwPitchAndFamily,  // pitch and family
  LPCTSTR lpszFace         // pointer to typeface name string
);
最后一个参数是字体。
用函数EnumFontFamilies可以列举出系统中安装的字体。

4 楼


确实很复杂,英语又不内行,看得我头都大了,您能不能给出一个具体的例子,分别用幼圆体,宋体,

楷体在用户区显示一段文字,通过例子会比较形象而且也容易理解.

5 楼

//...
LRESULT CALLBACK WndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hDc;
    HPEN hPen;
    HFONT hFont;
    TEXTMETRIC tm;
    static char TextBuf[]={"自定义的字体"};
    int i;
    switch(Message)
    {
    case WM_PAINT:
        hDc=BeginPaint(hWnd,&ps);
        hFont=CreateFont(50,
                                      64,
                                      0,
                                      0,
                                      0,
                                      0,
                                      0,
                                      0,
                                     GB2312_CHARSET,
                                     OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
                 DEFAULT_QUALITY,
                                     0,
                                    "隶书");//这里修改一下就可以了
        SelectObject(hDc,hFont);
        //Rectangle(hDc,10,10,790,90);
        SetTextColor(hDc,RGB(255,0,0));
        SetBkColor(hDc,RGB(0,0,255));
        TextOut(hDc,10,10,TextBuf,strlen(TextBuf));
        EndPaint(hWnd,&ps);
        break;

    case WM_DESTROY:
        PostQuitMessage(0);break;
    default:
        return DefWindowProc(hWnd,Message,wParam,lParam);
    }
    return 0;
}
//..
CreateFont的参数如楼上所说,上面的代码中有些参数可以参见MSDN

6 楼

"隶书");//这里修改一下就可以了

如果是仿宋,或幼圆,那应该在这里改为什么呢?

如果直接在这里写上宋体,幼圆那是没有用的.

我来回复

您尚未登录,请登录后再回复。点此登录或注册