📄 demo7_1.c
字号:
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 + -