• [转]SelectObject() 装载字体 VC EVC


    用API 在创建的窗口上写字的时候发现一个问题,FONT   的句柄必须声明为全局变量,否则在选入字体的时候会返回失败。
    VC 和EVC在创建字体的方法有点不大一样。VC版如下:

    LRESULT CALLBACK    WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
    { HDC hdc=NULL;
    PAINTSTRUCT ps;
    RECT rt;
    HBRUSH hbrBkgnd;
    static HPEN hpenDot;     // handle of dotted pen
    static HFONT hFont;
    LOGFONT lf;

    switch(message){
    case WM_CREATE:
            hpenDot = CreatePen(PS_DOT, 2, #ff0000); //创建虚线画笔

       hFont=CreateFont(                            // Create Font
        15,                      // nHeight
        0,                         // nWidth
        0,                         // nEscapement
        0,                         // nOrientation
        FW_NORMAL,                 // nWeight
        FALSE,                     // bItalic
        FALSE,                     // bUnderline
        0,                         // cStrikeOut
        ANSI_CHARSET,              // nCharSet
        OUT_DEFAULT_PRECIS,        // nOutPrecision
        CLIP_DEFAULT_PRECIS,       // nClipPrecision
        DEFAULT_QUALITY,           // nQuality
        DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
        _T("Arial"));              // lpszFacename


            break;
    case WM_COMMAND:
           break; // do nothing
    case WM_PAINT:
           SetWindowText(hWnd,"Text test");
           hdc = BeginPaint(hWnd, &ps);
           if(NULL==SelectObject(hdc,hFont))
               MessageBox(NULL,"fail font","debug",0);   
           if(NULL==SelectObject(hdc,hpenDot))
               MessageBox(NULL,"fail pen","debug",0);
           GetClientRect(hWnd, &rt);
           _stprintf(szMsg,"((%d,%d),(%d,%d))",rt.left,rt.top,rt.right,rt.bottom);
           //SetBkColor(hdc,#ff0000);
          // DrawText(hdc, szMsg, strlen(szMsg), &rt, DT_CENTER);
           TextOut(hdc,10,10,szMsg,strlen(szMsg));
           Rectangle(hdc,100, 100, 550,250);
           EndPaint(hWnd, &ps);
           UpdateWindow(ghWnd);
           break;
    case WM_CLOSE:
             PostQuitMessage(0);
            break;
    default:
          return DefWindowProc(hWnd,message,wParam,lParam);
    }
    return DefWindowProc(hWnd,message,wParam,lParam);
    }


    EVC 版:

    LRESULT CALLBACK DlgProc_Panel(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    static HDC     hdc;
    static PAINTSTRUCT   ps;
        static RECT     rt;
        static HBRUSH    hBrush;
    static COLORREF    wColor=#000000;
    static int     nDrawTimes=0;
    static HFONT    hFont;
    static LOGFONT          m_logfnt;
    TCHAR lfFaceName[32]= TEXT("Times New Roman");
    m_logfnt.lfCharSet=DEFAULT_CHARSET;
    m_logfnt.lfClipPrecision=CLIP_DEFAULT_PRECIS;
    m_logfnt.lfEscapement=0;
    m_logfnt.lfHeight=80;
    m_logfnt.lfItalic=false;
    m_logfnt.lfOrientation=0;
    m_logfnt.lfPitchAndFamily=FF_SWISS;
    m_logfnt.lfQuality=DEFAULT_QUALITY;
    m_logfnt.lfStrikeOut=false;
    m_logfnt.lfUnderline=true;
    m_logfnt.lfWeight=800;
    m_logfnt.lfWidth=20;
    m_logfnt.lfOutPrecision=OUT_DEFAULT_PRECIS;


    switch (message)
    {
    case WM_INITDIALOG:
       hFont=CreateFontIndirect(&m_logfnt);
       nDrawTimes=0;
       wColor=#ff0000;
       MoveWindowFullScreen(hDlg);
       break;
    case WM_PAINT:
       hdc = BeginPaint(hDlg, &ps);
       GetClientRect(hDlg, &rt);
       hBrush=CreateSolidBrush(wColor);
       FillRect(hdc,&rt,hBrush);
       //TextOut(hdc, rt.left+10, rt.top+100, "Test", 4);
       SelectObject(hdc,hFont);
       SetTextColor(hdc,#0000ff);
       rt.top += rt.bottom/2;
       DrawText(hdc,TEXT("Test\n"),-1,&rt,DT_CENTER);
       DeleteObject(hBrush);
       EndPaint(hDlg, &ps);
       break;
    case WM_LBUTTONDOWN:
    case WM_KEYUP:
       InvalidateRect(hDlg,&rt,TRUE);
       EndDialog(hDlg,TRUE);
       break;
    }
        return FALSE;
    }

  • 相关阅读:
    #小练习 动态生成密码 分类: python 小练习 2013-08-15 16:25 314人阅读 评论(0) 收藏
    mysql中文乱码问题 分类: database 2013-08-15 14:03 330人阅读 评论(0) 收藏
    使用os.walk()方法 分类: python 小练习 2013-08-14 10:52 1465人阅读 评论(0) 收藏
    oracle 数据库转换成mysql工具:ora2mysqcn 分类: database 2013-08-14 10:21 541人阅读 评论(0) 收藏
    使用fileinput模块进行原地修改文件 分类: python 小练习 2013-08-13 16:47 618人阅读 评论(0) 收藏
    docker知识整理(备份)
    [DP] [模板] 01背包
    [模板][线段树]
    [Tree] [洛谷] P1030 求先序排列
    [Tree] [洛谷] P1087 FBI树
  • 原文地址:https://www.cnblogs.com/answer/p/1959514.html
Copyright © 2020-2023  润新知