字体

来源:互联网 发布:java 备忘录 编辑:程序博客网 时间:2024/04/30 10:20

1:创建字体,HFONT CreateFontIndirect(const LOGFONT *lplf),结构体LOGFONT 用于设置字体的相关参数如高度、宽度、粗体、斜体、字体名称等。

hFont = CreateFontIndirect (&lplf);

 

2:为设备上下文选择字体

hOldFont = (HFONT)SelectObject (hdc, hFont);

 

hOldFont 用于保存旧的字体,在新字体使用完后恢复之前的字体

 

3:查询字体特性

GetTextMetrics(HDC hdc, LPTEXTMETRIC lptm)

 

4:销毁字体

DeleteObject(HGDIOBJ hObject)

 

5:枚举字体

EnumFontFamilies(HDC hdc, LPCTSTR lpszFamily, FONTENUMPROC lpEnumFontFamProc, LPARAM lParam)

第二个参数lpszFamily为需要枚举的字体,如果设为NUL则枚举所有可用的字体(字体好像只能放在windows下)

 

回调函数: CALLBACK EnumFontFamProc(LOGFONT *lpelf, TEXTMETRIC *lpntm, DWORD FontType, lPARAM lParam)

这些参数都是对枚举字体的具体描述

 

#include <windows.h>    

#include <aygshell.h>

#include "resource.h"

#include "helloworld.h"

 

 

LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);

 

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

                    LPWSTR lpCmdLine, int nCmdShow) {

    WNDCLASS wc;

    HWND hWnd;

    MSG msg;

 

    // Register application main window class.

    wc.style = 0;                             // Window style

    wc.lpfnWndProc = MainWndProc;             // Callback function

    wc.cbClsExtra = 0;                        // Extra class data

    wc.cbWndExtra = 0;                        // Extra window data

    wc.hInstance = hInstance;                 // Owner handle

    wc.hIcon = NULL,                          // Application icon

    wc.hCursor = LoadCursor (NULL, IDC_ARROW);// Default cursor

    wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

    wc.lpszMenuName =  NULL;                  // Menu name

    wc.lpszClassName = TEXT("MyClass");       // Window class name

 

    if (RegisterClass (&wc) == 0) return -1;

 

    // Create main window.

    hWnd = CreateWindowEx(WS_EX_NODRAG,//WS_EX_NODRAG | WS_EX_CAPTIONOKBTN, // Ex style flags

                          TEXT("MyClass"),    // Window class

                          TEXT("Hello"),      // Window title

                          // Style flags

                          //WS_VISIBLE | WS_CAPTION | WS_SYSMENU,

                              WS_VISIBLE,

                          CW_USEDEFAULT,      // x position

                          CW_USEDEFAULT,      // y position

                          CW_USEDEFAULT,      // Initial width

                          CW_USEDEFAULT,      // Initial height

                          NULL,               // Parent

                          NULL,               // Menu, must be null

                          hInstance,          // Application instance

                          NULL);              // Pointer to create

                                              // parameters

    if (!IsWindow (hWnd)) return -2;  // Fail code if not created.

 

    // Standard show and update calls

    ShowWindow (hWnd, nCmdShow);

    UpdateWindow (hWnd);

 

    // Application message loop

    while (GetMessage (&msg, NULL, 0, 0)) {

        TranslateMessage (&msg);

        DispatchMessage (&msg);

    }

    // Instance cleanup

    return msg.wParam;}

 

 

int CALLBACK PaintSingleFontFamily (CONST LOGFONT *lplf,

                                    CONST TEXTMETRIC *lpntm,

                                    DWORD nFontType, LPARAM lParam) {

    HDC hdc;

    HFONT hFont, hOldFont;

 

    hdc = (HDC) lParam;                                         

    

    // Create the font from the LOGFONT structure passed.

    hFont = CreateFontIndirect (lplf);

 

    // Select the font into the device context.

    hOldFont = (HFONT)SelectObject (hdc, hFont);

 

     ExtTextOut (hdc, 50, 100, 0, NULL,TEXT ("Hello World!"), lstrlen(TEXT ("Hello World!")), NULL);

   

    // Deselect font and delete.

    SelectObject (hdc, hOldFont);

    DeleteObject (hFont);

 

     ExtTextOut (hdc, 50, 150, 0, NULL,TEXT ("Hello World!"), lstrlen(TEXT ("Hello World!")), NULL);

    return 1;

}

 

void SetLogFont(LOGFONT *myfont)

{

     myfont->lfHeight = 24;//37;

     myfont->lfWidth = 0;//15;

     myfont->lfEscapement = 0;

     myfont->lfOrientation = 0;

     myfont->lfWeight = 400;

     myfont->lfItalic = 0;

     myfont->lfUnderline = 0;

     myfont->lfStrikeOut = 0;

     myfont->lfCharSet = 0;

     myfont->lfOutPrecision = 0;

     myfont->lfClipPrecision = 2;

     myfont->lfQuality = 1;

     myfont->lfPitchAndFamily = 34;

     memset(myfont->lfFaceName, 0, sizeof(myfont->lfFaceName));

     lstrcpy(myfont->lfFaceName,TEXT("Trebuchet MS"));

 

}

 

LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam,

                              LPARAM lParam) {

    PAINTSTRUCT ps;

    RECT rect,rc;

    HDC hdc;

     HBRUSH hbrOld;

     LOGFONT lplf;

     HFONT hFont, hOldFont;

 

    switch (wMsg) {   

    case WM_PAINT:    

        // Get the size of the client rectangle

        GetClientRect (hWnd, &rect);

 

        hdc = BeginPaint (hWnd, &ps);         

 

         //Set black

         hbrOld = (HBRUSH)SelectObject (hdc, GetStockObject (BLACK_BRUSH));

         Rectangle (hdc, rect.left, rect.top, rect.right, rect.bottom);

         SelectObject (hdc, hbrOld);

        

         SetBkColor (hdc, RGB(0,0,0));

         SetTextColor (hdc, RGB(255,255,255));

       // DrawText (hdc, TEXT ("Hello World!"), -1, &rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);

        

         //Set Full Screen 

         SHFullScreen(hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON);

        

         SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));    

         MoveWindow( hWnd,rc.left, rc.top,rc.right, rc.bottom,FALSE);

        

//       SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, FALSE);

//      MoveWindow(hWnd, rc.left, rc.top, rc.right, rc.bottom, TRUE);     

    

         ExtTextOut (hdc, 5, 50, 0, NULL,TEXT ("g Hello World!"), lstrlen(TEXT ("g Hello World!")), NULL);

//       EnumFontFamilies ((HDC)hdc, TEXT("Trebuchet MS"),PaintSingleFontFamily,(LPARAM)hdc);

 

 

         SetLogFont(&lplf);

         hFont = CreateFontIndirect (&lplf);

 

         // Select the font into the device context.

         hOldFont = (HFONT)SelectObject (hdc, hFont);

 

         ExtTextOut (hdc, 5, 80, 0, NULL,TEXT ("g Hello World!"), lstrlen(TEXT ("g Hello World!")), NULL);

 

         // Deselect font and delete.

         SelectObject (hdc, hOldFont);

         DeleteObject (hFont);

 

         EndPaint (hWnd, &ps);

        return 0; 

//   case WM_CANCELMODE:

//   case WM_CLOSE:

     case WM_DESTROY:

        PostQuitMessage (0);

        break;

    }

    return DefWindowProc (hWnd, wMsg, wParam, lParam);

}