⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo7_1.c

📁 WINDOWS图形编程随书光盘
💻 C
📖 第 1 页 / 共 2 页
字号:
  1 /****************************************************************/
  2 /*         Demo7_1   ---  Enum Fonts                            */
  3 /****************************************************************/
  4 
  5 #include <windows.h>
  6 #include "demo7_1.h"
  7 
  8 int  PASCAL  WinMain(HANDLE, HANDLE, LPSTR, int);
  9 long FAR PASCAL MainWndProc(HWND, unsigned, WORD, LONG);
 10 
 11 int  FAR PASCAL EnumFaces(LPLOGFONT, LPTEXTMETRIC,
 12                           short, LPSTR);
 13 int  FAR PASCAL EnumSizes(LPLOGFONT, LPTEXTMETRIC,
 14                           short, LPSTR);
 15 void MakeFontMenu(HWND);
 16 void MakeSizeMenu(HWND);
 17 void FillStrokeSize();
 18 void MakeStyleMenu(HMENU);
 19 
 20 struct {
 21    int  FaceNum;
 22    char FaceName[MAXFACES][LF_FACESIZE];
 23    BOOL bRaster[MAXFACES];
 24 } FontFace;
 25 
 26 struct {
 27    int          SizeNum;
 28    LOGFONT      lf[MAXSIZES];
 29    TEXTMETRIC   tm[MAXSIZES];
 30 } FontSize;
 31 
 32 HANDLE hInst;
 33 
 34 HBITMAP hBoldBM, hItalicBM;
 35 HBITMAP hUnderlineBM, hStrikeOutBM;
 36 
 37 int    FaceID;
 38 int    SizeID;
 39 BOOL   bBold, bItalic;
 40 BOOL   bUnderLine, bStrikeOut;
 41 BOOL   bNormal;
 42 
 43 int    nLogPixSx;
 44 int    nLogPixSy;
 45 
 46 /****************************************************************/
 47 /*                      WinMain()                               */
 48 /****************************************************************/
 49 
 50 int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
 51                    LPSTR lpszCmdLine, int nCmdShow)
 52 {
 53    WNDCLASS wclass;
 54    MSG      msg;
 55    HWND     hWnd;
 56    char     szName[] = "Demo7_1";
 57 
 58    if (!hPrevInstance)
 59     {
 60         wclass.style         = NULL;
 61         wclass.lpfnWndProc   = MainWndProc;
 62         wclass.cbClsExtra    = 0;
 63         wclass.cbWndExtra    = 0;
 64         wclass.hInstance     = hInstance;
 65         wclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
 66         wclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
 67         wclass.hbrBackground = GetStockObject(WHITE_BRUSH);
 68         wclass.lpszMenuName  = szName;
 69         wclass.lpszClassName = szName;
 70 
 71         if (!RegisterClass (&wclass))
 72            return (FALSE);
 73     }
 74 
 75     hWnd = CreateWindow(
 76                 szName,
 77                 "Enum Fonts",
 78                 WS_OVERLAPPEDWINDOW,
 79                 CW_USEDEFAULT,
 80                 CW_USEDEFAULT,
 81                 CW_USEDEFAULT,
 82                 CW_USEDEFAULT,
 83                 NULL,
 84                 NULL,
 85                 hInstance,
 86                 NULL );
 87 
 88     if (!hWnd)
 89         return (FALSE);
 90 
 91     ShowWindow(hWnd, nCmdShow);
 92     UpdateWindow(hWnd);
 93 
 94     while (GetMessage(&msg, NULL, NULL,NULL))
 95        {
 96            TranslateMessage(&msg);
 97            DispatchMessage(&msg);
 98        }
 99     return (msg.wParam);
100 }
101 
102 
103 
104 /****************************************************************/
105 /*                      MainWndProc()                           */
106 /****************************************************************/
107 
108 long FAR PASCAL MainWndProc(HWND hWnd, unsigned message,
109                             WORD wParam, LONG lParam)
110 {
111    PAINTSTRUCT   ps;
112    HDC           hDC;
113    HMENU         hMenu;
114    HFONT         hFont, hPreFont;
115    TEXTMETRIC    tm;
116    LOGFONT       lf;
117    char          szStr1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
118    char          szStr2[] = "abcdefghijklmnopqrstuvwxyz";
119 
120    switch (message)
121     {
122         case WM_CREATE :
123                 hInst = ((LPCREATESTRUCT)lParam)->hInstance;
124 
125                 hMenu = GetMenu(hWnd);
126                 MakeStyleMenu(hMenu);
127                 bNormal = FALSE;
128                 SendMessage(hWnd, WM_COMMAND, IDM_NORM, 0L);
129 
130                 hDC = GetDC(hWnd);
131                 nLogPixSx = GetDeviceCaps(hDC, LOGPIXELSX);
132                 nLogPixSy = GetDeviceCaps(hDC, LOGPIXELSY);
133                 ReleaseDC(hWnd, hDC);
134 
135                 MakeFontMenu(hWnd);
136                 return (0);
137 
138         case WM_COMMAND :
139                 hMenu = GetMenu(hWnd);
140 
141                 if (wParam>=IDM_FONT &&
142                         wParam<IDM_FONT+MAXFACES)
143                   {
144                     if (wParam != FaceID)
145                       {
146                         CheckMenuItem(hMenu, FaceID,
147                                       MF_UNCHECKED);
148                         FaceID = wParam;
149                         CheckMenuItem(hMenu, FaceID,
150                                       MF_CHECKED);
151 
152                         MakeSizeMenu(hWnd);
153                       }
154                     return (0);
155                   }
156                 else
157                 if (wParam>=IDM_SIZE &&
158                         wParam<IDM_SIZE+MAXSIZES)
159                   {
160                     if (wParam != SizeID)
161                       {
162                         CheckMenuItem(hMenu, SizeID,
163                                       MF_UNCHECKED);
164                         SizeID = wParam;
165                         CheckMenuItem(hMenu, SizeID,
166                                       MF_CHECKED);
167                       }
168                   }
169                 else
170                 switch (wParam)
171                  {
172                    case IDM_BOLD :
173                        if (bNormal)
174                          {
175                            bNormal = FALSE;
176                            CheckMenuItem(hMenu, IDM_NORM,
177                                          MF_UNCHECKED);
178                          }
179                        if (bBold)
180                          CheckMenuItem(hMenu, wParam,
181                                        MF_UNCHECKED);
182                        else
183                          CheckMenuItem(hMenu, wParam,
184                                        MF_CHECKED);
185 
186                        bBold = ! bBold;
187                        break;
188 
189                    case IDM_ITALIC :
190                        if (bNormal)
191                          {
192                            bNormal = FALSE;
193                            CheckMenuItem(hMenu, IDM_NORM,
194                                        MF_UNCHECKED);
195                          }
196                        if (bItalic)
197                          CheckMenuItem(hMenu, wParam,
198                                        MF_UNCHECKED);
199                        else
200                          CheckMenuItem(hMenu, wParam,
201                                        MF_CHECKED);
202 
203                        bItalic = ! bItalic;
204                        break;
205 
206                    case IDM_UNDERLINE :
207                        if (bNormal)
208                          {
209                            bNormal = FALSE;
210                            CheckMenuItem(hMenu, IDM_NORM,
211                                        MF_UNCHECKED);
212                          }
213                        if (bUnderLine)
214                          CheckMenuItem(hMenu, wParam,
215                                        MF_UNCHECKED);
216                        else
217                          CheckMenuItem(hMenu, wParam,
218                                        MF_CHECKED);
219 
220                        bUnderLine =  ! bUnderLine;
221                        break;
222 
223                     case IDM_STRIKEOUT :
224                        if (bNormal)
225                          {
226                            bNormal = FALSE;
227                            CheckMenuItem(hMenu, IDM_NORM,
228                                        MF_UNCHECKED);
229                          }
230                        if (bStrikeOut)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -