13字体

字体

在WIN32运用中会用到各种字体,那么如何设置字体的样式、大小、颜色呢?

 

设置颜色,字体属于文本,可以使用SetTextColor(hdc,RGB(255,0,0));进行字体颜色的改变。

 

下面介绍字体样式、大小。

函数原型:

WINGDIAPI HFONT WINAPI CreateFontA( __in int cHeight, __in int cWidth, __in int cEscapement, __in int cOrientation, __in int cWeight, __in DWORD bItalic,__in DWORD bUnderline, __in DWORD bStrikeOut, __in DWORD iCharSet, __in DWORD iOutPrecision, __in DWORD iClipPrecision,__in DWORD iQuality, __in DWORD iPitchAndFamily, __in_opt LPCSTR pszFaceName);

 

参数介绍:

cHeight:字体的高度

cWidth:字体的宽度

cEscapement:使全部字体逆时针旋转,值将为原值的1/10,如150度,实际为15度

cOrientation:使单个字体逆时针旋转,值将为原值的1/10,如150度,实际为15度

cWeight:字体的权值,简体、加粗等

bItalic:设置字体是否倾斜

bUnderline:设置下划线

bStrikeOut:设置字体删除线(中间画一横)

iCharSet:指定字符集

iOutPrecision:指定输出精度,与输出字体的高度、宽度、移位匹配。可为0

iClipPrecision:裁剪精度。定义如何裁剪部分超出裁剪区的字符

iQuality:输出质量。

iPitchAndFamily:指定字体间距和字体族的间距

pszFaceName:字体的字样名。如:宋体、黑体、微软雅黑等

 

步骤:

1.创建字体

CreateFont(size.cx/10,size.cy/10,150,300,FW_NORMAL,TRUE,FALSE,FALSE,GB2312_CHARSET,0,0,0,0,"黑体")

2.将字体放入窗口DC中

  hOldFont=SelectObject(hdc,CreateFont(size.cx/10,size.cy/10,150,300,FW_NORMAL,TRUE,FALSE,FALSE,GB2312_CHARSET,0,0,0,0,"黑体"));

3.写出字体

   DrawText(hdc,str,strlen(str),&rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER);

4.释放DC

 

注意点:

1.参数cEscapement、cOrientation,值将为原值的1/10,如150度,实际为15度

2.参数cHeight、Width,最后选取窗口几分之几,当窗口变换时,可以随之变换。

3. SetGraphicsMode(hdc,GM_ADVANCED);此函数使单个字体发生旋转,不影响整体旋转。

结果:

源代码:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    HGDIOBJ hOldFont;
    static char str[128]="Windows程序设计!";
    static RECT rect;
    static SIZE size;
    BOOL bFlat=GetClientRect(hWnd,&rect); 
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // 分析菜单选择:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_SIZE:
         size.cx=LOWORD(lParam);
         size.cy=HIWORD(lParam);
         break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: 在此添加任意绘图代码...

        SetGraphicsMode(hdc,GM_ADVANCED);
        hOldFont=SelectObject(hdc,CreateFont(size.cx/10,size.cy/10,150,300,FW_NORMAL,TRUE,FALSE,FALSE,GB2312_CHARSET,0,0,0,0,"黑体"));
        if(bFlat)
        {
           //SetTextColor(hdc,RGB(255,0,0));
           DrawText(hdc,str,strlen(str),&rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
        }
        DeleteObject(SelectObject(hdc,hOldFont));
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

 

posted @ 2017-09-03 21:50  gd_沐辰  阅读(548)  评论(0编辑  收藏  举报