Возможно, вы пытаетесь создать диалоговое приложение с графическим интерфейсом, которое выглядит как приложение на основе форм в .NET. Вы можете определить шрифт для формы, и все ее дочерние элементы управления наследуют этот шрифт. Близкая ситуация существует и в каждом диалоге.
Как создать диалог с учетом Win32 API, вы можете прочитать здесь: http://msdn.microsoft.com/en-us/library/ms644996%28VS.85%29.aspx. Основное отличие в программировании диалога от создания форм заключается в том, что вы должны использовать редактор ресурсов (внутри Visual Studio или Windows). SDK например) для дизайна диалогов. Результаты будут сохранены в файле RC (еще не скомпилированный файл ресурсов). Результаты будут выглядеть следующим образом:
IDD_ABOUTBOX DIALOGEX 0, 0, 205, 98
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "About"
FONT 8, "MS Shell Dlg 2", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,77,77,50,14
LTEXT "Trust to User (T2U) v1.0\n\n(c) Copyright 2003, 2004",
IDC_STATIC,72,32,120,32
ICON IDR_MAINFRAME,IDC_STATIC,25,27,20,20
GROUPBOX "",IDC_STATIC,7,3,191,69
LTEXT "OK soft GmbH",IDC_OK_SOFT_GMBH,72,16,120,8
END
Вы можете иметь более одного ресурса на разных языках, сохраненного в одном файле RC:
IDD_ABOUTBOX DIALOGEX 0, 0, 205, 98
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "バージョンの情報"
FONT 8, "MS Shell Dlg 2", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,77,77,50,14
LTEXT "Trust to User (T2U) v1.0\n\n(c) Copyright 2003, 2004",
IDC_STATIC,72,32,120,32
ICON IDR_MAINFRAME,IDC_STATIC,25,27,20,20
GROUPBOX "",IDC_STATIC,7,3,191,69
LTEXT "OK soft GmbH",IDC_OK_SOFT_GMBH,72,16,120,8
END
Вы получите лучшие результаты в случае интернационализации, если будете использовать «MS Shell Dlg 2» или «MS Shell Dlg» вместо шрифта «Tahoma», но также возможно прямое использование «Tahoma»:
FONT 8, "Tahoma"
Вы должны использовать «MS Shell Dlg 2» вместе с флагом DS_SHELLFONT
или комбинацией DS_FIXEDSYS
и DS_SETFONT
(см. http://blogs.msdn.com/oldnewthing/archive/2005/02/07/368423.aspx), которая следует за использованием «Tahoma» на большинстве компьютеров (проверьте значение «MS Shell Dlg 2» в разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
). Прочтите об этом http://msdn.microsoft.com/en-us/library/dd374112%28v=VS.85%29.aspx или http://support.microsoft.com/kb/282187/en.
Кстати, вы можете открыть ресурс, сохраненный в EXE, DLL или EXE.MUI / DLL.MUI относительно Visual Studio. Вы должны просто открыть файл и выбрать «Открыть с помощью» и выбрать «Resoure Editor».
В окне 7 вы можете найти C:\Windows\winsxs\x86_microsoft-windows-notepad
и открыть как файл, например C:\Windows\winsxs\x86_microsoft-windows-notepad.resources_31bf3856ad364e35_6.1.7600.16385_en-us_1dbc2e35304db501\notepad.exe.mui
. Затем вы можете сохранить файл как notepad.rc
, затем открыть файл notepad.rc
в текстовом редакторе en, и вы найдете следующие фрагменты
15 DIALOGEX 30, 17, 300, 22
STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "&Encoding:",259,68,1,40,40,NOT WS_GROUP
COMBOBOX 257,130,0,164,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP
END
51200 DIALOGEX 0, 0, 324, 140
STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_CAPTION
CAPTION "Software Licensing"
FONT 9, "Segoe UI", 0, 0, 0x0
BEGIN
LTEXT "To use this feature without interruption, this computer needs to be running genuine Windows.",-1,0,10,250,20
LTEXT "With genuine Windows you have access to all Windows updates and can be confident that your Windows software has the latest security and reliability enhancements from Microsoft.",-1,0,35,250,30
CONTROL 51209,-1,"Static",SS_BITMAP,260,10,100,55
CONTROL "&Resolve online now",51201,"Button",BS_COMMANDLINK | BS_LEFT | WS_TABSTOP,0,75,250,24
CONTROL "<a>Read the privacy statement online</a>",51202,"SysLink",WS_TABSTOP,0,128,120,10
END
ОБНОВЛЕНО : попробуйте изменить функцию WndProc
следующим образом:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HWND hwndEdit;
static HWND hwndButton;
static int len;
static TCHAR text[30];
HFONT hFont;
LOGFONT lf;
switch(msg)
{
case WM_CREATE:
hwndEdit = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
50, 50, 150, 20, hwnd, (HMENU) ID_EDIT,
NULL, NULL);
GetObject (GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), &lf);
hFont = CreateFont (lf.lfHeight, lf.lfWidth,
lf.lfEscapement, lf.lfOrientation, lf.lfWeight,
lf.lfItalic, lf.lfUnderline, lf.lfStrikeOut, lf.lfCharSet,
lf.lfOutPrecision, lf.lfClipPrecision, lf.lfQuality,
lf.lfPitchAndFamily, lf.lfFaceName);
SendMessage (hwndEdit, WM_SETFONT, (WPARAM)hFont, TRUE);
hwndButton = CreateWindow(
TEXT("button"), TEXT("Set Title"),
WS_VISIBLE | WS_CHILD,
50, 100, 80, 25,
hwnd, (HMENU) ID_BUTTON, NULL, NULL);
SendMessage (hwndButton, WM_SETFONT, (WPARAM)hFont, TRUE);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}