fontview.rc)
set_module_type(fontview win32gui)
-add_importlibs(fontview gdi32 shell32 user32 msvcrt kernel32)
+add_importlibs(fontview comdlg32 gdi32 shell32 user32 msvcrt kernel32)
add_cd_file(TARGET fontview DESTINATION reactos/system32 FOR all)
return 0;
}
+LRESULT
+Display_OnPrint(HWND hwnd)
+{
+ PRINTDLG pfont;
+ TEXTMETRIC tm;
+ int copies, yPos;
+ DISPLAYDATA* pData;
+
+ pData = malloc(sizeof(DISPLAYDATA));
+ ZeroMemory(pData, sizeof(DISPLAYDATA));
+
+ /* Sets up the font layout */
+ pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+
+ /* Clears the memory before using it */
+ ZeroMemory(&pfont, sizeof(pfont));
+
+ pfont.lStructSize = sizeof(pfont);
+ pfont.hwndOwner = hwnd;
+ pfont.hDevMode = NULL;
+ pfont.hDevNames = NULL;
+ pfont.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
+ pfont.nCopies = 1;
+ pfont.nFromPage = 0xFFFF;
+ pfont.nToPage = 0xFFFF;
+ pfont.nMinPage = 1;
+ pfont.nMaxPage = 0xFFFF;
+
+ /* Opens up the print dialog box */
+ if (PrintDlg(&pfont))
+ {
+ DOCINFO docinfo;
+
+ docinfo.cbSize = sizeof(DOCINFO);
+ docinfo.lpszDocName = "Printing Font";
+ docinfo.lpszOutput = NULL;
+ docinfo.lpszDatatype = NULL;
+ docinfo.fwType = 0;
+
+ /* We start printing */
+ StartDoc(pfont.hDC, &docinfo);
+
+ /* Grabs the text metrics for the printer */
+ GetTextMetrics(pfont.hDC, &tm);
+
+ /* Start out with 0 for the y position for the page */
+ yPos = 0;
+
+ /* Starts out with the current page */
+ StartPage(pfont.hDC);
+
+ /* Used when printing for more than one copy */
+ for (copies = 0; copies < pfont.nCopies; copies++)
+ {
+ /* Test output */
+ TextOutW(pfont.hDC, 10, yPos, L"Testing...1...2...3", 19);
+
+ /* TODO: Determine if using Display_DrawText() will work for both rendering out to the
+ window and to the printer output */
+ //Display_DrawText(pfont.hDC, pData, yPos);
+
+ /* Ends the current page */
+ EndPage(pfont.hDC);
+
+ /* If we are making more than one copy, start a new page */
+ if (copies != pfont.nCopies)
+ {
+ yPos = 0;
+ StartPage(pfont.hDC);
+ }
+ }
+
+ /* The printing is now over */
+ EndDoc(pfont.hDC);
+
+ DeleteDC(pfont.hDC);
+ } else {
+ return 0;
+ }
+
+ /* Frees the memory since we no longer need it for now */
+ free(pData);
+
+ return 0;
+}
+
LRESULT CALLBACK
DisplayProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
/* Public function */
BOOL Display_InitClass(HINSTANCE hInstance);
+LRESULT Display_OnPrint(HWND hwnd);
HINSTANCE g_hInstance;
EXTLOGFONTW g_ExtLogFontW;
+LPCWSTR g_fileName;
static const WCHAR g_szFontViewClassName[] = L"FontViewWClass";
WNDCLASSEXW wincl;
HINSTANCE hDLL;
PGFRI GetFontResourceInfoW;
+ LPCWSTR fileName;
g_hInstance = hThisInstance;
argv = CommandLineToArgvW(GetCommandLineW(), &argc);
if (argc < 2)
{
- ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_BADCMD, argv[1]);
- return -1;
+ OPENFILENAMEW fontOpen;
+ WCHAR szFileName[MAX_PATH] = L"";
+ HLOCAL dialogTitle = NULL;
+
+ /* Gets the title for the dialog box ready */
+ FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ NULL, IDS_OPEN, 0, (LPWSTR)&dialogTitle, 0, NULL);
+
+ /* Clears out any values of fontOpen before we use it */
+ ZeroMemory(&fontOpen, sizeof(fontOpen));
+
+ /* Sets up the open dialog box */
+ fontOpen.lStructSize = sizeof(fontOpen);
+ fontOpen.hwndOwner = NULL;
+ fontOpen.lpstrFilter = L"TrueType Font (*.ttf)\0*.ttf\0"
+ L"All Files (*.*)\0*.*\0";
+ fontOpen.lpstrFile = szFileName;
+ fontOpen.lpstrTitle = dialogTitle;
+ fontOpen.nMaxFile = MAX_PATH;
+ fontOpen.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
+ fontOpen.lpstrDefExt = L"ttf";
+
+ /* Opens up the Open File dialog box in order to chose a font file. */
+ if(GetOpenFileNameW(&fontOpen))
+ {
+ fileName = fontOpen.lpstrFile;
+ g_fileName = fileName;
+ } else {
+ /* If the user decides to close out of the open dialog effectively
+ exiting the program altogether */
+ return 0;
+ }
+
+ LocalFree(dialogTitle);
}
-
- /* Try to add the font resource */
- if (!AddFontResourceW(argv[1]))
+ else
+ {
+ /* Try to add the font resource from command line */
+ fileName = argv[1];
+ g_fileName = fileName;
+ }
+
+ if (!AddFontResourceW(fileName))
{
- ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_NOFONT, argv[1]);
+ ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_NOFONT, fileName);
return -1;
}
/* Get the font name */
dwSize = sizeof(g_ExtLogFontW.elfFullName);
- if (!GetFontResourceInfoW(argv[1], &dwSize, g_ExtLogFontW.elfFullName, 1))
+ if (!GetFontResourceInfoW(fileName, &dwSize, g_ExtLogFontW.elfFullName, 1))
{
- ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_NOFONT, argv[1]);
+ ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_NOFONT, fileName);
return -1;
}
dwSize = sizeof(LOGFONTW);
- if (!GetFontResourceInfoW(argv[1], &dwSize, &g_ExtLogFontW.elfLogFont, 2))
+ if (!GetFontResourceInfoW(fileName, &dwSize, &g_ExtLogFontW.elfLogFont, 2))
{
- ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_NOFONT, argv[1]);
+ ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_NOFONT, fileName);
return -1;
}
WCHAR szQuit[MAX_BUTTONNAME];
WCHAR szPrint[MAX_BUTTONNAME];
WCHAR szString[MAX_STRING];
- HWND hDisplay, hButtonQuit, hButtonPrint;
+ HWND hDisplay, hButtonInstall, hButtonPrint;
/* create the display window */
hDisplay = CreateWindowExW(
ShowWindow(hDisplay, SW_SHOWNORMAL);
/* Create the quit button */
- LoadStringW(g_hInstance, IDS_QUIT, szQuit, MAX_BUTTONNAME);
- hButtonQuit = CreateWindowExW(
+ LoadStringW(g_hInstance, IDS_INSTALL, szQuit, MAX_BUTTONNAME);
+ hButtonInstall = CreateWindowExW(
0, /* Extended style */
L"button", /* Classname */
szQuit, /* Title text */
BUTTON_WIDTH, /* Width */
BUTTON_HEIGHT, /* Height */
hwnd, /* Parent */
- (HMENU)IDC_QUIT, /* Identifier */
+ (HMENU)IDC_INSTALL, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
- SendMessage(hButtonQuit, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
+ SendMessage(hButtonInstall, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
/* Create the print button */
LoadStringW(g_hInstance, IDS_PRINT, szPrint, MAX_BUTTONNAME);
return 0;
}
+static LRESULT
+MainWnd_OnInstall(HWND hwnd)
+{
+ DWORD fontExists;
+
+ /* First, we have to find out if the font still exists. */
+ fontExists = GetFileAttributes((LPCSTR)g_fileName);
+ if (fontExists != 0xFFFFFFFF) /* If the file does not exist */
+ {
+ ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_NOFONT, g_fileName);
+ return -1;
+ }
+
+ //CopyFile(g_fileName, NULL, TRUE);
+
+ MessageBox(hwnd, TEXT("This function is unimplemented"), TEXT("Unimplemented"), MB_OK);
+
+ return 0;
+}
+
LRESULT CALLBACK
MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
- case IDC_QUIT:
- PostQuitMessage (0); /* send a WM_QUIT to the message queue */
+ case IDC_INSTALL:
+ return MainWnd_OnInstall(hwnd);
break;
case IDC_PRINT:
- MessageBox(hwnd, TEXT("This function is unimplemented"), TEXT("Unimplemented"), MB_OK);
+ return Display_OnPrint(hwnd);
break;
}
break;
#define BUTTON_WIDTH 72
#define BUTTON_HEIGHT 21
-#define IDC_QUIT 1001
+#define IDC_INSTALL 1001
#define IDC_PRINT 1002
#define IDC_DISPLAY 1003
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Font Viewer\0"
+#define REACTOS_STR_INTERNAL_NAME "fontview\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "fontview.exe\0"
+#include <reactos/version.rc>
+
IDI_TT ICON "ttf.ico"
STRINGTABLE DISCARDABLE
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Изход"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Печат"
IDS_STRING, "Абвгд ежзий клмно прсту фхцчш щъьюя. 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Грешка"
IDS_ERROR_NOMEM, "Няма достатъчно място за завършване на действието."
IDS_ERROR_NOFONT, "%1 не е редовен шрифтов файл."
IDS_ERROR_NOCLASS, "Неуспешно изпълнение на класа на прозореца."
- IDS_ERROR_BADCMD, "Не е указан шрифтов файл.\nНаписано:\n fontview.exe <font file>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Fertig"
+ IDS_INSTALL, "Installieren"
IDS_PRINT, "Drucken"
IDS_STRING, "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern. 1234567890"
+ IDS_OPEN, "Schriftartendatei öffnen..."
IDS_ERROR, "Fehler"
IDS_ERROR_NOMEM, "Es steht nicht genügend Speicher zur Verfügung."
IDS_ERROR_NOFONT, "Die angegebene Datei %1 ist keine gültige Schriftartendatei."
IDS_ERROR_NOCLASS, "Fehler beim Initialisieren der Fensterklasse."
- IDS_ERROR_BADCMD, "Keine Schriftartendatei angegeben.\nSyntax:\n fontview.exe <Schriftdatei>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Quit"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Print"
IDS_STRING, "Jackdaws love my big sphinx of quartz. 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Error"
IDS_ERROR_NOMEM, "There's not enough memory to complete the operation."
IDS_ERROR_NOFONT, "The file %1 is not a valid font file."
IDS_ERROR_NOCLASS, "Could not initialize window class."
- IDS_ERROR_BADCMD, "No font file given.\nSyntax:\n fontview.exe <font file>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Cerrar"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Imprimir"
IDS_STRING, "Haz el amor y no la guerra. 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Error"
IDS_ERROR_NOMEM, "No hay memoria suficiente para completar la operación."
IDS_ERROR_NOFONT, "El archivo %1 no es un archivo válido de fuente."
IDS_ERROR_NOCLASS, "No es posible iniciar la clase."
- IDS_ERROR_BADCMD, "No hay archivo de fuente.\nSyntax:\n fontview.exe <font file>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Quitter"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Imprimer"
IDS_STRING, "Voix ambiguë d'un cśur qui au zéphyr préfčre les jattes de kiwis. 1234567890"
+ IDS_OPEN, "Police ouvert..."
IDS_ERROR, "Erreur"
IDS_ERROR_NOMEM, "Mémoire insuffisante pour terminer l'opération."
IDS_ERROR_NOFONT, "Le fichier %1 n'est pas un fichier police valide."
IDS_ERROR_NOCLASS, "Impossible d'initialiser la classe de fenętre."
- IDS_ERROR_BADCMD, "Aucun fichier police transmis.\nSyntaxe:\n fontview.exe <fichier police>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Baigti"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Spausdinti"
IDS_STRING, "ABCDEFGHIYJKLMNOPQRSTUVWXZ ąčęėįšųūž 1234567890"
+ IDS_OPEN, "Aatvira šriftas..."
IDS_ERROR, "Klaida"
IDS_ERROR_NOMEM, "Užduočiai užbaigti, nepakanka atminties."
IDS_ERROR_NOFONT, "%1 nėra teisinga šrifto byla."
IDS_ERROR_NOCLASS, "Nepavyko inicijuoti lango klasės."
- IDS_ERROR_BADCMD, "Nenurodyta šrifto byla.\nSintaksė:\n fontview.exe <šrifto byla>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Avslutt"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Skriv"
IDS_STRING, "Jackdaws love my big sphinx of quartz. 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Feil"
IDS_ERROR_NOMEM, "Det er ikke nok minne for å fullføre oppgaven."
IDS_ERROR_NOFONT, "Filen %1 er ikke et gyldig skriftfil."
IDS_ERROR_NOCLASS, "Kunne ikke initialise vindu klassen."
- IDS_ERROR_BADCMD, "Ingen skriftfil er gitt.\nSyntaks:\n fontview.exe <font file>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Wyjście"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Drukuj"
IDS_STRING, "Zażółć gęślą Jaźń żółwiątkiem. 1234567890. !@#$%^&*()_+=-/?"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Błąd"
IDS_ERROR_NOMEM, "Brakuje pamięci do ukończenia tej operacji."
IDS_ERROR_NOFONT, "Plik %1 nie jest poprawnym plikiem czcionki."
IDS_ERROR_NOCLASS, "Nie udało się zainicjować klasy window."
- IDS_ERROR_BADCMD, "Brak pliku czcionki.\nSkładnia:\n fontview.exe <plik czcionki>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Fechar"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Imprimir"
IDS_STRING, "Jackdaws ama minha grande esfinge de quartzo. 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Erro"
IDS_ERROR_NOMEM, "Não há memória suficiente para completar a operação."
IDS_ERROR_NOFONT, "O arquivo %1 não é um arquivo de fonte válida."
IDS_ERROR_NOCLASS, "Não foi possível inicializar a janela."
- IDS_ERROR_BADCMD, "Sem arquivos de fonte.\nSintaxe:\n fontview.exe <arquivo de fonte>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Ieșire"
- IDS_PRINT, "Imprimare"
+ IDS_INSTALL, "Install"
+ IDS_PRINT, "Imprimare"
IDS_STRING, "Turubinele eoliene generează câțiva MJ (câțiva kW•h) în exces, acoperind și necesarul familiei. QY 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Eroare"
IDS_ERROR_NOMEM, "Nu e destulă memorie pentru a încheia operația."
IDS_ERROR_NOFONT, "Fișierul «%1» este un fișier font deteriorat."
IDS_ERROR_NOCLASS, "Nu s-a putut inițializa clasa de ferestre."
- IDS_ERROR_BADCMD, "Niciun font specificat.\nSintaxă:\n fontview.exe <fișier font>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Выход"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Печать"
IDS_STRING, "В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Ошибка"
IDS_ERROR_NOMEM, "Недостаточно памяти, чтобы завершить операцию."
IDS_ERROR_NOFONT, "%1 не является корректным файлом шрифта."
IDS_ERROR_NOCLASS, "Невозможно инициализировать класс окна."
- IDS_ERROR_BADCMD, "Не указан файл шрифта.\nСинтаксис:\n fontview.exe <файл_шрифта>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Hotovo"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Tlačiť"
IDS_STRING, "Kŕdeľ ďatľov učí koňa žrať kôru. 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Chyba"
IDS_ERROR_NOMEM, "Na vykonanie tejto operácie nie je dostatok voľnej pamäte."
IDS_ERROR_NOFONT, "Požadovaný súbor %1 nie je platným súborom písiem."
IDS_ERROR_NOCLASS, "Nepodarilo sa inicializovať triedu window."
- IDS_ERROR_BADCMD, "Nebol zadaný žiadny súbor písiem.\nPoužitie:\n fontview.exe <súbor písiem>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Avsluta"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Skriv ut"
IDS_STRING, "Jackdaws love my big sphinx of quartz. 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Fel"
IDS_ERROR_NOMEM, "Det er inte nog minne för att slutföre operationen."
IDS_ERROR_NOFONT, "Filen %1 är inte en giltig typsnittsfil."
IDS_ERROR_NOCLASS, "Kunde inte initialisera Windows klassen."
- IDS_ERROR_BADCMD, "Ingen typsnittsfil är angiven.\nSyntaxs:\n fontview.exe <typsnittsfil>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "Вихід"
+ IDS_INSTALL, "Install"
IDS_PRINT, "Друк"
IDS_STRING, "Чуєш їх, доцю, га? Кумедна ж ти, прощайся без ґольфів! 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "Помилка"
IDS_ERROR_NOMEM, "Недостатньо пам'яті для завершення операції."
IDS_ERROR_NOFONT, "Файл %1 не є коректним файлом шрифту."
IDS_ERROR_NOCLASS, "Неможливо ініціалізувати віконний клас."
- IDS_ERROR_BADCMD, "Не вказаний файл шрифту.\nСинтаксис:\n fontview.exe <файл_шрифту>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "结束"
+ IDS_INSTALL, "Install"
IDS_PRINT, "列印"
IDS_STRING, "ReactOS 给所有人一个自由的操作系统!1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "错误"
IDS_ERROR_NOMEM, "没有足够的内存来完成操作。"
IDS_ERROR_NOFONT, "%1不是一个有效的字体档案。"
IDS_ERROR_NOCLASS, "窗口无法初始化。"
- IDS_ERROR_BADCMD, "没有提供字体文件。\n语法:\n fontview.exe <字体档案>"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_QUIT, "結束"
+ IDS_INSTALL, "Install"
IDS_PRINT, "列印"
IDS_STRING, "ReactOS 給所有人一個自由的操作系統! 1234567890"
+ IDS_OPEN, "Open Font..."
IDS_ERROR, "錯誤"
IDS_ERROR_NOMEM, "沒有足夠的記憶體來完成操作。"
IDS_ERROR_NOFONT, "%1 不是一個有效的字體檔案。"
IDS_ERROR_NOCLASS, "窗口無法初始化。"
- IDS_ERROR_BADCMD, "沒有提供字體文件。\n語法:\n fontview.exe <字體檔案>"
END
#define IDS_ERROR_NOMEM 101
#define IDS_ERROR_NOFONT 102
#define IDS_ERROR_NOCLASS 103
-#define IDS_ERROR_BADCMD 104
-#define IDS_QUIT 500
+#define IDS_INSTALL 500
#define IDS_PRINT 501
#define IDS_STRING 502
+#define IDS_OPEN 503
#define IDS_CHARSLOWER 700
#define IDS_CHARSUPPER 701