zoukankan      html  css  js  c++  java
  • 17.文字和字体

    1.文字的绘制

      TextOut - 将文字绘制在指定坐标位置

      int DrawText( HDC        hDC,          //DC句柄

                              LPCTSTR  lpString,    //字符串

                              int           nCount,     //字符个数

                              LPRECT    lpRect,       //绘制文字的矩形区域

                              UINT        uFormat);  //绘制方式

      BOOL ExtTextOut( HDC              hdc,           //DC句柄

                                     int                 X,              //输出X位置

                                     int                 Y,              //输出Y位置

                                     UINT              fuOptions,  //输出选项

                                     CONST RECT  *lprc,         //输出的矩形

                                     LPCTSTR        lpString,     //字符串

                                     UINT              cbCount,     //字符个数

                                     CONST INT     *lpDx);       //字符间距的数组

    2.文字颜色和背景

      文字颜色

      COLORREF SetTextColor( HDC hdc, COLORREF  crColor);

      文字背景色

      COLORREF SetBkColor( HDC hdc, COLORREF  crColor);

      文字背景模式

      int SetBkMode(

    HDC hdc, int iBkMode);

    3.字体

      windows常用的字体格式为TureType字体

        字体名 - 表示字体类型

        HFONT - 字体句柄

      (1)创建字体

         HFONT CreateFont( int          nHeight,                   //字体高度

                                              int          nWidth,                    //字体宽度

                                              int          nEscapement,           //字符串倾斜角度

                                              int          nOrientation,             //字符串旋转角度

                                              int           fnWeight,                 //字体的粗细

                                              DWORD   fdwItalic,                  //斜体

                   DWORD   fdwUnderline            //字符下划线

                                              DWORD   fdwStrikeOut,           //删除线

                                              DWORD   fdwCharSet,             //字符集   

                                              DWORD   fdwOutputPrecision,  //输出精度

                                              DWORD   fdwClipPrecision,       //剪切精度

                                              DWORD   fdwQuality,               //输出质量

                                              DWORD   fdwPitchAndFamily,   //匹配字体

                                              LPCTSTR  lpszFace);                //字体名称

      (2)应用字体到DC

         SelectObject

      (3)绘制文字

         DrawText/TextOut

         ExtTextOut

      (4)取出字体

         SelectObject

      (5)删除字体

         DeleteObject

      相关示例代码: 

    #include "stdafx.h"
    
    HINSTANCE g_hInstance = 0;  //接收当前程序实例句柄
    
    void OnPaint(HWND hWnd)
    {
        char szText[] = "Hello&Text";
        PAINTSTRUCT ps = { 0 };
        HDC hdc = BeginPaint(hWnd, &ps);
    
        SetTextColor(hdc, RGB(255, 0, 0));
        SetBkColor(hdc, RGB(0, 255, 0));//只适用于OPAQUE模式
        SetBkMode(hdc, TRANSPARENT);
    
        HFONT hFont = CreateFont(30, 0, 45, 0, 900, 1, 1, 1, GB2312_CHARSET, 0, 0, 0, 0, "黑体");
        HGDIOBJ nOldFont = SelectObject(hdc, hFont);
    
        TextOut(hdc, 100, 100, szText, strlen(szText));
        RECT rc = { 0 };
        rc.left = 100;
        rc.top = 150;
        rc.right = 200;
        rc.bottom = 200;
        Rectangle(hdc, 100, 150, 200, 200);
        /*
        DT_VCENTER DT_BOTTOM - 只使用DT_SINGLELINE
        DT_WORDBREAK - (多行)字符串只能靠顶端绘制
        */
        DrawText(hdc, szText, strlen(szText), &rc, 
            DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOCLIP | DT_NOPREFIX);
        
        char szExtText[] = "A中国人民";
        int nDis[] = {10, 0, 20, 0, 30, 0, 40, 0};
        ExtTextOut(hdc, 100, 300, 0, NULL, szExtText, strlen(szExtText), nDis);
    
        SelectObject(hdc, nOldFont);
        DeleteObject(hFont);
        EndPaint(hWnd, &ps);
    }
    //窗口处理函数
    LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch (msg)
        {
        case WM_PAINT:
            OnPaint(hWnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        }
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
    //注册窗口类
    BOOL Register(LPSTR lpClassName, WNDPROC wndProc)
    {
        WNDCLASSEX wce = { 0 };
    
        wce.cbSize = sizeof(wce);
        wce.cbClsExtra = 200;
        wce.cbClsExtra = 200;
        wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
        wce.hCursor = NULL;
        wce.hIcon = NULL;
        wce.hIconSm = NULL;
        wce.hInstance = g_hInstance;
        wce.lpfnWndProc = wndProc;
        wce.lpszClassName = lpClassName;
        wce.lpszMenuName = NULL;
        wce.style = CS_HREDRAW | CS_VREDRAW;
    
        ATOM nAtom = RegisterClassEx(&wce);
        if (0 == nAtom)
        {
            return FALSE;
        }
        return TRUE;
    }
    //创建主窗口
    HWND CreateMainWindow(LPSTR lpClassName, LPSTR lpWndName)
    {
        HWND hWnd = CreateWindowEx(0, lpClassName, lpWndName, WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
            NULL, NULL, g_hInstance, NULL);
        return hWnd;
    }
    //显示窗口
    void Display(HWND hWnd)
    {
        ShowWindow(hWnd, SW_SHOW);
        UpdateWindow(hWnd);
    }
    //消息循环
    void Message()
    {
        MSG nMsg = { 0 };
        while (GetMessage(&nMsg, NULL, 0, 0))
        {
            TranslateMessage(&nMsg);
            DispatchMessage(&nMsg);
        }
    }
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
        g_hInstance = hInstance;
        Register("Main", WndProc);
        HWND hWnd = CreateMainWindow("Main", "window");
        Display(hWnd);
        Message();
    
        return 0;
    }
    View Code

      运行结果:

      

  • 相关阅读:
    学习方法和阶段介绍 、 iOS界面开发引入 、 构造第一个App 、 视图控制器和视图 、 控件与事件 、 InterfaceBuilder
    Runtime 、 Block
    NSDictionary 、 NSMutableDictionary
    NSArray(二) 、 NSMutableArray 、 NSSet 、 NSMutableSet
    NSNumber 、 NSValue 、 日期处理 、 集合类 、 NSArray(一)
    (Foundation)NSObject 、 NSString 、 NSMutableString
    Objective-c---分类 、 扩展 、 ARC
    Objective-C--- 多态 、 协议
    关于Quartz2D方法小总结
    控制器之间的顺传与逆传
  • 原文地址:https://www.cnblogs.com/csqtech/p/5638370.html
Copyright © 2011-2022 走看看