ReactOS  0.4.13-dev-235-g7373cb3
fontview.c
Go to the documentation of this file.
1 /*
2  * fontview
3  *
4  * fontview.c
5  *
6  * Copyright (C) 2007 Timo Kreuzer <timo <dot> kreuzer <at> reactos <dot> org>
7  * Copyright (C) 2016-2017 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23 
24 #include "precomp.h"
25 
26 #include <winnls.h>
27 #include <shellapi.h>
28 #include <windowsx.h>
29 #include <winreg.h>
30 
31 #include "fontview.h"
32 #include "resource.h"
33 
39 WCHAR g_FontTitle[1024] = L"";
41 
42 static const WCHAR g_szFontViewClassName[] = L"FontViewWClass";
43 
44 /* GetFontResourceInfoW is undocumented */
46 
47 DWORD
49  DWORD dwFlags,
51  DWORD dwStringId,
52  DWORD dwLanguageId,
54  DWORD nSize,
55  va_list* Arguments
56 )
57 {
58  DWORD dwRet;
59  int len;
60  WCHAR Buffer[1000];
61 
62  len = LoadStringW(hInstance, dwStringId, (LPWSTR)Buffer, 1000);
63 
64  if (len)
65  {
68  dwRet = FormatMessageW(dwFlags, Buffer, 0, dwLanguageId, lpBuffer, nSize, Arguments);
69  return dwRet;
70  }
71  return 0;
72 }
73 
74 static void
75 ErrorMsgBox(HWND hParent, DWORD dwMessageId, ...)
76 {
77  HLOCAL hMemCaption = NULL;
78  HLOCAL hMemText = NULL;
79  va_list args;
80 
81  va_start(args, dwMessageId);
83  NULL, dwMessageId, 0, (LPWSTR)&hMemText, 0, &args);
84  va_end(args);
85 
87  NULL, IDS_ERROR, 0, (LPWSTR)&hMemCaption, 0, NULL);
88 
89  MessageBoxW(hParent, hMemText, hMemCaption, MB_ICONERROR);
90 
91  LocalFree(hMemCaption);
92  LocalFree(hMemText);
93 }
94 
95 int WINAPI
96 wWinMain(HINSTANCE hThisInstance,
97  HINSTANCE hPrevInstance,
98  LPWSTR lpCmdLine,
99  int nCmdShow)
100 {
101  int argc;
102  INT i;
103  WCHAR** argv;
104  WCHAR szFileName[MAX_PATH] = L"";
105  DWORD dwSize;
106  HWND hMainWnd;
107  MSG msg;
108  WNDCLASSEXW wincl;
109  LPCWSTR fileName;
110 
111  switch (GetUserDefaultUILanguage())
112  {
115  break;
116 
117  default:
118  break;
119  }
120 
121  g_hInstance = hThisInstance;
122 
123  /* Get unicode command line */
125  if (argc < 2)
126  {
127  OPENFILENAMEW fontOpen;
128  WCHAR filter[MAX_PATH*2], dialogTitle[MAX_PATH];
129 
130  LoadStringW(NULL, IDS_OPEN, dialogTitle, ARRAYSIZE(dialogTitle));
132 
133  /* Clears out any values of fontOpen before we use it */
134  ZeroMemory(&fontOpen, sizeof(fontOpen));
135 
136  /* Sets up the open dialog box */
137  fontOpen.lStructSize = sizeof(fontOpen);
138  fontOpen.hwndOwner = NULL;
139  fontOpen.lpstrFilter = filter;
140  fontOpen.lpstrFile = szFileName;
141  fontOpen.lpstrTitle = dialogTitle;
142  fontOpen.nMaxFile = MAX_PATH;
144  fontOpen.lpstrDefExt = L"ttf";
145 
146  /* Opens up the Open File dialog box in order to chose a font file. */
147  if(GetOpenFileNameW(&fontOpen))
148  {
149  fileName = fontOpen.lpstrFile;
150  g_fileName = fileName;
151  } else {
152  /* If the user decides to close out of the open dialog effectively
153  exiting the program altogether */
154  return 0;
155  }
156  }
157  else
158  {
159  /* Try to add the font resource from command line */
160 // fileName = argv[1];
161  if (argc == 2)
162  {
163  fileName = argv[1];
164  }
165  else
166  {
167  /* Windows fontview supports the /p option, which displays print dialog */
168  fileName = argv[2];
169  if (wcscmp(argv[1], L"/p") == 0)
170  {
171  g_FontPrint = TRUE;
172  }
173  else
174  {
175  fileName = argv[1];
176  }
177  }
178  g_fileName = fileName;
179  }
180 
181  if (!AddFontResourceW(fileName))
182  {
183  ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
184  return -1;
185  }
186 
187  /* Get the font name */
188  dwSize = sizeof(g_LogFonts);
189  ZeroMemory(g_LogFonts, sizeof(g_LogFonts));
190  if (!GetFontResourceInfoW(fileName, &dwSize, g_LogFonts, 2))
191  {
192  ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
193  return -1;
194  }
195  g_NumFonts = 0;
196  for (i = 0; i < ARRAYSIZE(g_LogFonts); ++i)
197  {
198  if (g_LogFonts[i].lfFaceName[0] == 0)
199  break;
200 
201  ++g_NumFonts;
202  }
203  if (g_NumFonts == 0)
204  {
205  ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
206  return -1;
207  }
208 
209  /* get font title */
210  dwSize = sizeof(g_FontTitle);
212  GetFontResourceInfoW(fileName, &dwSize, g_FontTitle, 1);
213 
214  if (!Display_InitClass(hThisInstance))
215  {
217  return -1;
218  }
219 
220  /* The main window class */
221  wincl.cbSize = sizeof (WNDCLASSEXW);
222  wincl.style = CS_DBLCLKS;
223  wincl.lpfnWndProc = MainWndProc;
224  wincl.cbClsExtra = 0;
225  wincl.cbWndExtra = 0;
226  wincl.hInstance = hThisInstance;
228  wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
229  wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
230  wincl.lpszMenuName = NULL;
233 
234  /* Register the window class, and if it fails quit the program */
235  if (!RegisterClassExW (&wincl))
236  {
238  return 0;
239  }
240 
241  /* The class is registered, let's create the main window */
243  0, /* Extended possibilities for variation */
244  g_szFontViewClassName, /* Classname */
245  g_FontTitle, /* Title Text */
246  WS_OVERLAPPEDWINDOW, /* default window */
247  CW_USEDEFAULT, /* Windows decides the position */
248  CW_USEDEFAULT, /* where the window ends up on the screen */
249  544, /* The programs width */
250  375, /* and height in pixels */
251  HWND_DESKTOP, /* The window is a child-window to desktop */
252  NULL, /* No menu */
253  hThisInstance, /* Program Instance handler */
254  NULL /* No Window Creation data */
255  );
256  ShowWindow(hMainWnd, nCmdShow);
257 
258  /* Main message loop */
259  while (GetMessage (&msg, NULL, 0, 0))
260  {
262  continue;
265  }
266 
268 
269  return (int)msg.wParam;
270 }
271 
272 static LRESULT
274 {
275  WCHAR szQuit[MAX_BUTTONNAME];
276  WCHAR szPrint[MAX_BUTTONNAME];
277  WCHAR szString[MAX_STRING];
278  WCHAR szPrevious[MAX_STRING];
279  WCHAR szNext[MAX_STRING];
280  HWND hDisplay, hButtonInstall, hButtonPrint, hButtonPrev, hButtonNext;
281 
282  /* create the display window */
283  hDisplay = CreateWindowExW(
284  0, /* Extended style */
285  g_szFontDisplayClassName, /* Classname */
286  L"", /* Title text */
287  WS_CHILD | WS_VSCROLL, /* Window style */
288  0, /* X-pos */
289  HEADER_SIZE, /* Y-Pos */
290  550, /* Width */
291  370-HEADER_SIZE, /* Height */
292  hwnd, /* Parent */
293  (HMENU)IDC_DISPLAY, /* Identifier */
294  g_hInstance, /* Program Instance handler */
295  NULL /* Window Creation data */
296  );
297 
299  SendMessage(hDisplay, FVM_SETSTRING, 0, (LPARAM)szString);
300 
301  /* Create the install button */
303  hButtonInstall = CreateWindowExW(
304  0, /* Extended style */
305  L"button", /* Classname */
306  szQuit, /* Title text */
307  WS_CHILD | WS_VISIBLE, /* Window style */
308  BUTTON_POS_X, /* X-pos */
309  BUTTON_POS_Y, /* Y-Pos */
310  BUTTON_WIDTH, /* Width */
311  BUTTON_HEIGHT, /* Height */
312  hwnd, /* Parent */
313  (HMENU)IDC_INSTALL, /* Identifier */
314  g_hInstance, /* Program Instance handler */
315  NULL /* Window Creation data */
316  );
318 
319  /* Create the print button */
321  hButtonPrint = CreateWindowExW(
322  0, /* Extended style */
323  L"button", /* Classname */
324  szPrint, /* Title text */
325  WS_CHILD | WS_VISIBLE, /* Window style */
326  450, /* X-pos */
327  BUTTON_POS_Y, /* Y-Pos */
328  BUTTON_WIDTH, /* Width */
329  BUTTON_HEIGHT, /* Height */
330  hwnd, /* Parent */
331  (HMENU)IDC_PRINT, /* Identifier */
332  g_hInstance, /* Program Instance handler */
333  NULL /* Window Creation data */
334  );
336 
337  /* Create the previous button */
339  hButtonPrev = CreateWindowExW(
340  0, /* Extended style */
341  L"button", /* Classname */
342  szPrevious, /* Title text */
343  WS_CHILD | WS_VISIBLE, /* Window style */
344  450, /* X-pos */
345  BUTTON_POS_Y, /* Y-Pos */
346  BUTTON_WIDTH, /* Width */
347  BUTTON_HEIGHT, /* Height */
348  hwnd, /* Parent */
349  (HMENU)IDC_PREV, /* Identifier */
350  g_hInstance, /* Program Instance handler */
351  NULL /* Window Creation data */
352  );
354 
355  /* Create the next button */
357  hButtonNext = CreateWindowExW(
358  0, /* Extended style */
359  L"button", /* Classname */
360  szNext, /* Title text */
361  WS_CHILD | WS_VISIBLE, /* Window style */
362  450, /* X-pos */
363  BUTTON_POS_Y, /* Y-Pos */
364  BUTTON_WIDTH, /* Width */
365  BUTTON_HEIGHT, /* Height */
366  hwnd, /* Parent */
367  (HMENU)IDC_NEXT, /* Identifier */
368  g_hInstance, /* Program Instance handler */
369  NULL /* Window Creation data */
370  );
372 
373  EnableWindow(hButtonPrev, FALSE);
374  if (g_NumFonts <= 1)
375  EnableWindow(hButtonNext, FALSE);
376 
377  /* Init the display window with the font name */
378  g_FontIndex = 0;
380  ShowWindow(hDisplay, SW_SHOWNORMAL);
381 
382  if (g_FontPrint)
384 
385  return 0;
386 }
387 
388 static LRESULT
390 {
391  RECT rc;
392  HWND hInstall, hPrint, hPrev, hNext, hDisplay;
393  HDWP hDWP;
394 
395  GetClientRect(hwnd, &rc);
396 
397  hDWP = BeginDeferWindowPos(5);
398 
399  hInstall = GetDlgItem(hwnd, IDC_INSTALL);
400  if (hDWP)
402 
403  hPrint = GetDlgItem(hwnd, IDC_PRINT);
404  if (hDWP)
406 
407  hPrev = GetDlgItem(hwnd, IDC_PREV);
408  if (hDWP)
410 
411  hNext = GetDlgItem(hwnd, IDC_NEXT);
412  if (hDWP)
414 
415  hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
416  if (hDWP)
417  hDWP = DeferWindowPos(hDWP, hDisplay, NULL, 0, HEADER_SIZE, rc.right, rc.bottom - HEADER_SIZE, SWP_NOZORDER);
418 
419  EndDeferWindowPos(hDWP);
420 
422 
423  return 0;
424 }
425 
426 static LRESULT
428 {
429  HDC hDC;
430  PAINTSTRUCT ps;
431  RECT rc;
432 
433  hDC = BeginPaint(hwnd, &ps);
434  GetClientRect(hwnd, &rc);
435  rc.top = HEADER_SIZE - 2;
436  rc.bottom = HEADER_SIZE;
438  EndPaint(hwnd, &ps);
439  return 0;
440 }
441 
442 static LRESULT
444 {
445  WCHAR szFullName[64];
446 
447  WCHAR szSrcPath[MAX_PATH];
448  WCHAR szDestPath[MAX_PATH];
450  LONG res;
451  HKEY hKey;
452 
454 // MessageBoxW(hwnd, szFullName, L"Debug", MB_OK);
455 
456  /* First, we have to find out if the font still exists */
458  {
459  /* Fail, if the source file does not exist */
461  return -1;
462  }
463 
464  /* Build the full destination file name */
466 
467  GetWindowsDirectoryW(szDestPath, MAX_PATH);
468  wcscat(szDestPath, L"\\Fonts\\");
469  wcscat(szDestPath, pszFileName);
470 
471  /* Debug Message */
472 // MessageBoxW(hwnd, szDestPath, L"szDestPath", MB_OK);
473 // MessageBoxW(hwnd, pszFileName, L"pszFileExt", MB_OK);
474 
475  /* Check if the file already exists */
476  if (GetFileAttributesW(szDestPath) != INVALID_FILE_ATTRIBUTES)
477  {
478  MessageBoxW(hwnd, L"This font is already installed!", L"Already Installed", MB_OK);
479  return 0;
480  }
481 
482  /* Copy the font file */
483  if (!CopyFileW(g_fileName, szDestPath, TRUE))
484  {
485  MessageBoxW(hwnd,L"Failed to copy the font file!", L"File Error", MB_OK);
486  return -1;
487  }
488 
489  /* Open the fonts key */
491  L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts",
492  0,
494  &hKey);
495  if (res != ERROR_SUCCESS)
496  {
497  MessageBoxW(hwnd, L"Failed top open the fonts key!", L"Debug1", MB_OK);
498  return -1;
499  }
500 
501  /* Register the font */
502  res = RegSetValueExW(hKey,
503  szFullName,
504  0,
505  REG_SZ,
507  (wcslen(pszFileName) + 1) * sizeof(WCHAR));
508  if (res != ERROR_SUCCESS)
509  {
510  MessageBoxW(hwnd, L"Failed to register the new font!", L"Debug2", MB_OK);
511  RegCloseKey(hKey);
512  return -1;
513  }
514 
515  /* Close the fonts key */
516  RegCloseKey(hKey);
517 
518  /* if all of this goes correctly, message the user about success */
519  MessageBoxW(hwnd, L"Font Installation Completed.", L"Success", MB_OK);
520 
521  return 0;
522 }
523 
524 static LRESULT
526 {
527  HWND hDisplay;
528  if (g_FontIndex > 0)
529  {
530  --g_FontIndex;
532  if (g_FontIndex == 0)
534 
535  hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
537  InvalidateRect(hDisplay, NULL, TRUE);
538  }
539  return 0;
540 }
541 
542 static LRESULT
544 {
545  HWND hDisplay;
546  if (g_FontIndex + 1 < g_NumFonts)
547  {
548  ++g_FontIndex;
550  if (g_FontIndex == g_NumFonts - 1)
552 
553  hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
555  InvalidateRect(hDisplay, NULL, TRUE);
556  }
557  return 0;
558 }
559 
562 {
563  switch (message)
564  {
565  case WM_CREATE:
566  return MainWnd_OnCreate(hwnd);
567 
568  case WM_PAINT:
569  return MainWnd_OnPaint(hwnd);
570 
571  case WM_SIZE:
572  return MainWnd_OnSize(hwnd);
573 
574  case WM_COMMAND:
575  switch(LOWORD(wParam))
576  {
577  case IDC_INSTALL:
578  return MainWnd_OnInstall(hwnd);
579 
580  case IDC_PRINT:
581  return Display_OnPrint(hwnd);
582 
583  case IDC_PREV:
584  return MainWnd_OnPrev(hwnd);
585 
586  case IDC_NEXT:
587  return MainWnd_OnNext(hwnd);
588  }
589  break;
590 
591  case WM_DESTROY:
592  PostQuitMessage (0); /* send a WM_QUIT to the message queue */
593  break;
594 
595  default: /* for messages that we don't deal with */
597  }
598 
599  return 0;
600 }
601 
602 /* EOF */
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define BUTTON_WIDTH
Definition: fontview.h:9
#define OFN_FILEMUSTEXIST
Definition: commdlg.h:106
#define OFN_EXPLORER
Definition: commdlg.h:104
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static int argc
Definition: ServiceArgs.c:12
#define MAKEINTRESOURCE
Definition: winuser.h:591
DWORD Flags
Definition: commdlg.h:373
#define DispatchMessage
Definition: winuser.h:5631
LANGID WINAPI GetUserDefaultUILanguage(void)
Definition: lang.c:806
BOOL WINAPI TranslateMessage(_In_ const MSG *)
Definition: tftpd.h:59
HDWP WINAPI BeginDeferWindowPos(_In_ int)
#define TRUE
Definition: types.h:120
LPCWSTR lpstrFilter
Definition: commdlg.h:363
int cbWndExtra
Definition: winuser.h:3173
#define LAYOUT_RTL
Definition: wingdi.h:1353
#define ERROR_SUCCESS
Definition: deptool.c:10
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
HINSTANCE g_hInstance
Definition: fontview.c:34
uint16_t * PWSTR
Definition: typedefs.h:54
INT g_NumFonts
Definition: fontview.c:36
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:402
#define IDS_STRING
Definition: resource.h:11
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
int WINAPI wWinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
Definition: fontview.c:96
#define SUBLANG_DEFAULT
Definition: nls.h:168
LPWSTR lpstrFile
Definition: commdlg.h:367
*nSize LPSTR _Inout_ LPDWORD nSize
Definition: winbase.h:2024
static HDC
Definition: imagelist.c:92
#define CALLBACK
Definition: compat.h:27
LONG top
Definition: windef.h:292
static LRESULT MainWnd_OnSize(HWND hwnd)
Definition: fontview.c:389
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define ZeroMemory
Definition: winbase.h:1635
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1105
HICON hIcon
Definition: winuser.h:3175
#define IDC_NEXT
Definition: fontview.h:17
#define IDS_ERROR_NOFONT
Definition: resource.h:5
UINT_PTR WPARAM
Definition: windef.h:207
BOOL g_FontPrint
Definition: fontview.c:40
#define WS_CHILD
Definition: pedump.c:617
#define SendDlgItemMessage
Definition: winuser.h:5708
struct _WNDCLASSEXW WNDCLASSEXW
#define IDS_PRINT
Definition: resource.h:10
#define SWP_NOZORDER
Definition: winuser.h:1232
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define BUTTON_POS_X
Definition: fontview.h:7
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
DWORD FormatString(DWORD dwFlags, HINSTANCE hInstance, DWORD dwStringId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, va_list *Arguments)
Definition: fontview.c:48
#define IsDialogMessage
Definition: winuser.h:5675
#define argv
Definition: mplay32.c:18
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
LONG right
Definition: windef.h:293
Definition: match.c:390
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int32_t INT
Definition: typedefs.h:56
#define LANG_HEBREW
Definition: nls.h:67
#define IDS_OPEN
Definition: resource.h:12
WPARAM wParam
Definition: combotst.c:138
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
DWORD lStructSize
Definition: commdlg.h:360
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2351
static LRESULT MainWnd_OnPaint(HWND hwnd)
Definition: fontview.c:427
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
int WINAPI AddFontResourceW(_In_ LPCWSTR pszFilename)
#define IDS_INSTALL
Definition: resource.h:9
static LRESULT MainWnd_OnInstall(HWND hwnd)
Definition: fontview.c:443
#define IDS_NEXT
Definition: resource.h:13
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HINSTANCE hInstance
Definition: charmap.c:20
LPCWSTR lpstrDefExt
Definition: commdlg.h:376
LPCWSTR lpszMenuName
Definition: winuser.h:3178
#define BUTTON_POS_Y
Definition: fontview.h:8
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
#define va_end(ap)
Definition: acmsvcex.h:90
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:802
LPWSTR WINAPI GetCommandLineW(VOID)
Definition: proc.c:2043
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
BOOL WINAPI GetOpenFileNameW(OPENFILENAMEW *ofn)
Definition: filedlg.c:4564
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:173
WORD WORD PSZ PSZ pszFileName
Definition: vdmdbg.h:41
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:400
#define CW_USEDEFAULT
Definition: winuser.h:225
LPWSTR *WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int *numargs)
Definition: shell32_main.c:76
#define IDI_TT
Definition: resource.h:21
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR g_szFontViewClassName[]
Definition: fontview.c:42
LONG_PTR LPARAM
Definition: windef.h:208
char * va_list
Definition: acmsvcex.h:78
int cbClsExtra
Definition: winuser.h:3172
Definition: bufpool.h:45
#define GRAY_BRUSH
Definition: wingdi.h:897
LPCWSTR g_fileName
Definition: fontview.c:38
#define FVM_SETTYPEFACE
Definition: display.h:4
WCHAR g_FontTitle[1024]
Definition: fontview.c:39
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:404
LPCWSTR lpszClassName
Definition: winuser.h:3179
#define FORMAT_MESSAGE_FROM_HMODULE
Definition: winbase.h:403
#define WM_DESTROY
Definition: winuser.h:1591
#define PostMessage
Definition: winuser.h:5698
#define IDS_ERROR_NOCLASS
Definition: resource.h:6
#define IDS_FILTER_LIST
Definition: resource.h:7
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: fontview.c:561
BOOL WINAPI SetProcessDefaultLayout(DWORD dwDefaultLayout)
Definition: window.c:1686
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4917
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LPCWSTR lpstrTitle
Definition: commdlg.h:372
#define WM_SIZE
Definition: winuser.h:1593
#define IDC_PREV
Definition: fontview.h:16
HBRUSH hbrBackground
Definition: winuser.h:3177
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
Definition: copy.c:439
UINT cbSize
Definition: winuser.h:3169
#define MAX_PATH
Definition: compat.h:26
#define WINAPI
Definition: msvc.h:8
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD nMaxFile
Definition: commdlg.h:368
BOOL WINAPI RemoveFontResourceW(_In_ LPCWSTR)
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
HINSTANCE hInstance
Definition: winuser.h:3174
#define DEFAULT_GUI_FONT
Definition: wingdi.h:908
#define WM_PAINT
Definition: winuser.h:1602
static LRESULT MainWnd_OnNext(HWND hwnd)
Definition: fontview.c:543
HWND hMainWnd
Definition: magnifier.c:34
HWND hwndOwner
Definition: commdlg.h:361
static const WCHAR L[]
Definition: oid.c:1250
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define IDC_DISPLAY
Definition: resource.h:19
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define MB_ICONERROR
Definition: winuser.h:781
const DOCKBAR PVOID HWND hParent
Definition: tooldock.h:22
LOGFONTW g_LogFonts[64]
Definition: fontview.c:37
GLenum GLsizei len
Definition: glext.h:6722
static void ErrorMsgBox(HWND hParent, DWORD dwMessageId,...)
Definition: fontview.c:75
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
static LRESULT MainWnd_OnCreate(HWND hwnd)
Definition: fontview.c:273
HCURSOR hCursor
Definition: winuser.h:3176
#define CS_DBLCLKS
Definition: winuser.h:646
#define WM_COMMAND
Definition: winuser.h:1716
UINT style
Definition: winuser.h:3170
#define GetFileAttributes
Definition: winbase.h:3629
#define LoadCursor
Definition: winuser.h:5678
WNDPROC lpfnWndProc
Definition: winuser.h:3171
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define FVM_SETSTRING
Definition: display.h:5
static HDC hDC
Definition: 3dtext.c:33
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define FVM_GETFULLNAME
Definition: display.h:6
#define SW_SHOWNORMAL
Definition: winuser.h:764
static LRESULT MainWnd_OnPrev(HWND hwnd)
Definition: fontview.c:525
#define GetModuleHandle
Definition: winbase.h:3641
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
#define BUTTON_HEIGHT
Definition: fontview.h:10
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define HWND_DESKTOP
Definition: winuser.h:1195
#define va_start(ap, A)
Definition: acmsvcex.h:91
unsigned int UINT
Definition: ndis.h:50
#define WS_VSCROLL
Definition: pedump.c:627
#define MB_OK
Definition: winuser.h:784
#define GetMessage
Definition: winuser.h:5656
#define WM_SETFONT
Definition: winuser.h:1632
HICON hIconSm
Definition: winuser.h:3180
#define HEADER_SIZE
Definition: fontview.h:6
#define msg(x)
Definition: auth_time.c:54
#define IDC_ARROW
Definition: winuser.h:682
#define IDS_ERROR
Definition: resource.h:18
#define SendMessage
Definition: winuser.h:5709
#define WM_CREATE
Definition: winuser.h:1590
GLuint res
Definition: glext.h:9613
BOOL Display_InitClass(HINSTANCE hInstance)
Definition: display.c:55
#define MAX_BUTTONNAME
Definition: fontview.h:4
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3381
#define MAKELANGID(p, s)
Definition: nls.h:15
LONG bottom
Definition: windef.h:294
const WCHAR g_szFontDisplayClassName[]
Definition: display.c:34
#define COLOR_BACKGROUND
Definition: hardware.h:164
BOOL WINAPI GetFontResourceInfoW(LPCWSTR lpFileName, DWORD *pdwBufSize, void *lpBuffer, DWORD dwType)
#define LoadIcon
Definition: winuser.h:5679
#define IDS_PREVIOUS
Definition: resource.h:18
WCHAR * LPWSTR
Definition: xmlstorage.h:184
LONG_PTR LRESULT
Definition: windef.h:209
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
INT g_FontIndex
Definition: fontview.c:35
#define WS_VISIBLE
Definition: pedump.c:620
#define IDC_INSTALL
Definition: fontview.h:13
#define IDC_PRINT
Definition: fontview.h:14
#define args
Definition: format.c:66
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
LRESULT Display_OnPrint(HWND hwnd)
Definition: display.c:437
LPARAM lParam
Definition: combotst.c:139
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
#define MAX_STRING
Definition: doskey.c:43
#define LOWORD(l)
Definition: pedump.c:82
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define BUTTON_PADDING
Definition: fontview.h:11
_In_ LPCSTR lpFileName
Definition: winbase.h:3011
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define REG_SZ
Definition: layer.c:22