請問一下有關於LOGFONT上的變換字型

dangl   2009-1-7 18:07 楼主
想請教一下各位~~
小弟的CODE如下
         hFont = (HFONT)GetStockObject(SYSTEM_FONT);  // 設定字型
        GetObject(hFont, sizeof(LOGFONT), &logFont);

        memset (&logFont, 0, sizeof (LOGFONT));
        _tcscpy(logFont.lfFaceName, TEXT("Fixedsys"));
        logFont.lfHeight = 45;
        logFont.lfWidth = 35;
        logFont.lfWeight = 2000;*/
        logFont.lfEscapement = 0;
        logFont.lfOrientation = 0;
        logFont.lfItalic = FALSE;
        logFont.lfUnderline = FALSE;
        logFont.lfStrikeOut = FALSE;
        logFont.lfCharSet = DEFAULT_CHARSET;
        logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
        logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
        logFont.lfQuality = DRAFT_QUALITY;
        logFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;

        hFont = CreateFontIndirect(&SetLogFontType(45, 35, 2500));
        hOldFont = (HFONT)SelectObject(dc,hFont);


小弟在第二行中_tcscpy(logFont.lfFaceName, TEXT("Fixedsys"));
改變Fixedsys的參數~可是輸出後的字型還是沒變
想請假高手幫下忙!!!
感激不盡!!

回复评论 (10)

请确认字型是否存在

然后试试修改字体的大小,看看效果是否正常
点赞  2009-1-7 22:17
Fixedsys 应该是没有这个字体
点赞  2009-1-7 22:36
我想請教一下各位~若我想把字型改成下面這種風格
要用哪種字型呢?


謝謝樓上的各位了!!
点赞  2009-1-8 08:33
上面的圖片秀不出來~~我又沒版法編輯帖子~~
所以就重新再貼一次了!!
点赞  2009-1-8 08:35
这个很像贴图的。。数字键盘的我觉得贴图反倒好做。字体实现要折腾一下。。
点赞  2009-1-8 09:23
數字是用ExtTextOut寫上去的~~
背景跟按鍵的背景則是兩張不貼上去的
所以想請教一下~怎樣才能變成我上一樓的字型
可以的話教我一下~使用LOGFONT時的完整流程!!
多謝來看帖的大大!!!
点赞  2009-1-8 09:45

8楼 mpc 

你可以把设备上支持的字体枚举出来,看看是否支持你需要的字体。
点赞  2009-1-8 09:51
不好意思~~想請問一下~
要如何才能把设备上支持的字体枚举出来呢?
可以給各SAMPL CODE嗎?
萬分謝謝!!
点赞  2009-1-9 11:35

  1. //======================================================================
  2. // FontList - Lists the available fonts in the system
  3. //
  4. // Written for the book Programming Windows CE
  5. // Copyright (C) 2003 Douglas Boling
  6. //======================================================================
  7. #include                  // For all that Windows stuff
  8. #include "FontList.h"                // Program-specific stuff

  9. //----------------------------------------------------------------------
  10. // Global data
  11. //
  12. const TCHAR szAppName[] = TEXT ("FontList");
  13. HINSTANCE hInst;                     // Program instance handle

  14. FONTFAMSTRUCT ffs[FAMILYMAX];
  15. INT sFamilyCnt = 0;

  16. // Message dispatch table for MainWindowProc
  17. const struct decodeUINT MainMessages[] = {
  18.     WM_CREATE, DoCreateMain,
  19.     WM_PAINT, DoPaintMain,
  20.     WM_DESTROY, DoDestroyMain,
  21. };

  22. //======================================================================
  23. // Program entry point
  24. //
  25. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  26.                     LPWSTR lpCmdLine, int nCmdShow) {
  27.     MSG msg;
  28.     int rc = 0;
  29.     HWND hwndMain;

  30.     // Initialize this instance.
  31.     hwndMain = InitInstance (hInstance, lpCmdLine, nCmdShow);
  32.     if (hwndMain == 0)
  33.         return 0x10;
  34.     // Application message loop
  35.     while (GetMessage (&msg, NULL, 0, 0)) {
  36.         TranslateMessage (&msg);
  37.         DispatchMessage (&msg);
  38.     }
  39.     // Instance cleanup
  40.     return TermInstance (hInstance, msg.wParam);
  41. }
  42. //----------------------------------------------------------------------
  43. // InitInstance - Instance initialization
  44. //
  45. HWND InitInstance (HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) {
  46.     WNDCLASS wc;
  47.     HWND hWnd;

  48.     // Save program instance handle in global variable.
  49.     hInst = hInstance;

  50. #if defined(WIN32_PLATFORM_PSPC)
  51.     // If Pocket PC, allow only one instance of the application.
  52.     hWnd = FindWindow (szAppName, NULL);
  53.     if (hWnd) {
  54.         SetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01));   
  55.         return 0;
  56.     }
  57. #endif   
  58.     // Register application main window class.
  59.     wc.style = 0;                             // Window style
  60.     wc.lpfnWndProc = MainWndProc;             // Callback function
  61.     wc.cbClsExtra = 0;                        // Extra class data
  62.     wc.cbWndExtra = 0;                        // Extra window data
  63.     wc.hInstance = hInstance;                 // Owner handle
  64.     wc.hIcon = NULL,                          // Application icon
  65.     wc.hCursor = LoadCursor (NULL, IDC_ARROW);// Default cursor
  66.     wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
  67.     wc.lpszMenuName =  NULL;                  // Menu name
  68.     wc.lpszClassName = szAppName;             // Window class name

  69.     if (RegisterClass (&wc) == 0) return 0;

  70.     // Create main window.
  71.     hWnd = CreateWindowEx (WS_EX_NODRAG,      // Ex style flags
  72.                          szAppName,           // Window class
  73.                          TEXT("Font Listing"),// Window title
  74.                          // Style flags
  75.                          WS_VISIBLE | WS_CAPTION | WS_SYSMENU,
  76.                          CW_USEDEFAULT,       // x position
  77.                          CW_USEDEFAULT,       // y position
  78.                          CW_USEDEFAULT,       // Initial width
  79.                          CW_USEDEFAULT,       // Initial height
  80.                          NULL,                // Parent
  81.                          NULL,                // Menu, must be null
  82.                          hInstance,           // Application instance
  83.                          NULL);               // Pointer to create
  84.                                               // parameters
  85.     // Return fail code if window not created.
  86.     if (!IsWindow (hWnd)) return 0;

  87.     // Standard show and update calls
  88.     ShowWindow (hWnd, nCmdShow);
  89.     UpdateWindow (hWnd);
  90.     return hWnd;
  91. }
  92. //----------------------------------------------------------------------
  93. // TermInstance - Program cleanup
  94. //
  95. int TermInstance (HINSTANCE hInstance, int nDefRC) {
  96.     return nDefRC;
  97. }
  98. //======================================================================
  99. // Font callback functions
  100. //
  101. //----------------------------------------------------------------------
  102. // FontFamilyCallback - Callback function that enumerates the font
  103. // families
  104. //
  105. int CALLBACK FontFamilyCallback (CONST LOGFONT *lplf,
  106.                                  CONST TEXTMETRIC *lpntm,
  107.                                  DWORD nFontType, LPARAM lParam) {
  108.     int rc = 1;

  109.     // Stop enumeration if array filled.
  110.     if (sFamilyCnt >= FAMILYMAX)
  111.         return 0;
  112.     // Copy face name of font.
  113.     lstrcpy (ffs[sFamilyCnt++].szFontFamily, lplf->lfFaceName);
  114.     return rc;
  115. }
  116. //----------------------------------------------------------------------
  117. // EnumSingleFontFamily - Callback function that enumerates fonts
  118. //
  119. int CALLBACK EnumSingleFontFamily (CONST LOGFONT *lplf,
  120.                                    CONST TEXTMETRIC *lpntm,
  121.                                    DWORD nFontType, LPARAM lParam) {
  122.     PFONTFAMSTRUCT pffs;

  123.     pffs = (PFONTFAMSTRUCT) lParam;
  124.     pffs->nNumFonts++;    // Increment count of fonts in family
  125.     return 1;
  126. }

这是programing microsoft windowsCE.net 中的示范代码
点赞  2009-1-9 14:13

  1. //----------------------------------------------------------------
  2. // PaintSingleFontFamily - Callback function that draws a font
  3. //
  4. int CALLBACK PaintSingleFontFamily (CONST LOGFONT *lplf,
  5.                                     CONST TEXTMETRIC *lpntm,
  6.                                     DWORD nFontType, LPARAM lParam) {
  7.     PPAINTFONTINFO ppfi;
  8.     TCHAR szOut[256];
  9.     INT nFontHeight, nPointSize;
  10.     HFONT hFont, hOldFont;

  11.     ppfi = (PPAINTFONTINFO) lParam;  // Translate lParam into struct
  12.                                      // pointer.

  13.     // Create the font from the LOGFONT structure passed.
  14.     hFont = CreateFontIndirect (lplf);

  15.     // Select the font into the device context.
  16.     hOldFont = (HFONT)SelectObject (ppfi->hdc, hFont);

  17.     // Compute font size.
  18.     nPointSize = (lplf->lfHeight * 72) /
  19.                  GetDeviceCaps(ppfi->hdc,LOGPIXELSY);

  20.     // Format string and paint on display.
  21.     wsprintf (szOut, TEXT ("%s   Point:%d"), lplf->lfFaceName,
  22.               nPointSize);
  23.     ExtTextOut (ppfi->hdc, 25, ppfi->yCurrent, 0, NULL,
  24.                 szOut, lstrlen (szOut), NULL);

  25.     // Compute the height of the default font.
  26.     nFontHeight = lpntm->tmHeight + lpntm->tmExternalLeading;
  27.     // Update new draw point.
  28.     ppfi->yCurrent += nFontHeight;
  29.     // Deselect font and delete.
  30.     SelectObject (ppfi->hdc, hOldFont);
  31.     DeleteObject (hFont);
  32.     return 1;
  33. }
  34. //================================================================
  35. // Message handling procedures for MainWindow
  36. //
  37. //----------------------------------------------------------------
  38. // MainWndProc - Callback function for application window
  39. //
  40. LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam,
  41.                               LPARAM lParam) {
  42.     INT i;
  43.     //
  44.     // Search message list to see if we need to handle this
  45.     // message.  If in list, call procedure.
  46.     //
  47.     for (i = 0; i < dim(MainMessages); i++) {
  48.         if (wMsg == MainMessages[i].Code)
  49.             return (*MainMessages[i].Fxn)(hWnd, wMsg, wParam, lParam);
  50.     }
  51.     return DefWindowProc (hWnd, wMsg, wParam, lParam);
  52. }
  53. //----------------------------------------------------------------------
  54. // DoCreateMain - Process WM_CREATE message for window.
  55. //
  56. LRESULT DoCreateMain (HWND hWnd, UINT wMsg, WPARAM wParam,
  57.                       LPARAM lParam) {
  58.     HDC hdc;
  59.     INT i, rc;

  60.     //Enumerate the available fonts.
  61.     hdc = GetDC (hWnd);
  62.     rc = EnumFontFamilies ((HDC)hdc, (LPTSTR)NULL,
  63.         FontFamilyCallback, 0);

  64.     for (i = 0; i < sFamilyCnt; i++) {
  65.         ffs[i].nNumFonts = 0;
  66.         rc = EnumFontFamilies ((HDC)hdc, ffs[i].szFontFamily,
  67.                                EnumSingleFontFamily,
  68.                                (LPARAM)(PFONTFAMSTRUCT)&ffs[i]);
  69.     }
  70.     ReleaseDC (hWnd, hdc);
  71.     return 0;
  72. }
  73. //---------------------------------------------------------------
  74. // DoPaintMain - Process WM_PAINT message for window.
  75. //
  76. LRESULT DoPaintMain (HWND hWnd, UINT wMsg, WPARAM wParam,
  77.                      LPARAM lParam) {
  78.     PAINTSTRUCT ps;
  79.     RECT rect;
  80.     HDC hdc;
  81.     TEXTMETRIC tm;
  82.     INT nFontHeight, i;
  83.     TCHAR szOut[256];
  84.     PAINTFONTINFO pfi;

  85.     GetClientRect (hWnd, &rect);

  86.     hdc = BeginPaint (hWnd, &ps);

  87.     // Get the height of the default font.
  88.     GetTextMetrics (hdc, &tm);
  89.     nFontHeight = tm.tmHeight + tm.tmExternalLeading;

  90.     // Initialize struct that is passed to enumerate function.
  91.     pfi.yCurrent = rect.top;
  92.     pfi.hdc = hdc;
  93.     for (i = 0; i < sFamilyCnt; i++) {

  94.         // Format output string, and paint font family name.
  95.         wsprintf (szOut, TEXT("Family: %s   "),
  96.                   ffs[i].szFontFamily);
  97.         ExtTextOut (hdc, 5, pfi.yCurrent, 0, NULL,
  98.                     szOut, lstrlen (szOut), NULL);
  99.         pfi.yCurrent += nFontHeight;

  100.         // Enumerate each family to draw a sample of that font.
  101.         EnumFontFamilies ((HDC)hdc, ffs[i].szFontFamily,
  102.                           PaintSingleFontFamily,
  103.                           (LPARAM)&pfi);
  104.     }
  105.     EndPaint (hWnd, &ps);
  106.     return 0;
  107. }
  108. //----------------------------------------------------------------
  109. // DoDestroyMain - Process WM_DESTROY message for window.
  110. //
  111. LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam,
  112.                        LPARAM lParam) {
  113.     PostQuitMessage (0);
  114.     return 0;
  115. }


一次贴不完,这是后半部分。
点赞  2009-1-9 14:14
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复