Използвам Visual C ++ 6.0 в Windows 7. Отивам до File-> New. Избирам Win32 приложението и го наричам HelloWorld. "Win32 Appliction Стъпка 1 от 1" се появява. Избирам "Типично Hello World Application". VC създава прост Hello World App.
Избирам файла HelloWorld.cpp. Поставям следните дефиниции в горната част на файла HelloWorld.cpp:
#define UNICODE
#define _UNICODE
След това щракнете двукратно върху HelloWorld.rc. Отворя елемент "Диалог". Под него е IDD_ABOUTBOX. Щракнете два пъти върху това. След това добавям контрол EDITTEXT към диалоговия прозорец. Натиснах ctrl-F5, за да стартирам програмата.
Избирам за и се показва диалоговият прозорец aboutзаедно с EDITTEXT контрол. След това отидох до приложението charmap.exe и избрах японски хираганов символ от шрифта Meiryo. Аз го копирам в клипборда.
След това го поставям в контрола EDITTEXT. Тя се показва като "?" въпросителен знак.
Не разбирам какво да правя. Как мога да получа диалогови полета за редактиране, за да приема Unicode?
Благодаря предварително, Райън
Отговори:
0 за отговор № 1Не дефинирайте UNICODE и _UNICODE в изходния файл. трябва да го определите на ниво проект. Меню Форм в VS изберете проект и Настройка (Alt-7).
В диалоговия прозорец изберете раздела C ++ и от падащото поле Category изберете Preprocessor. В полето за редактиране по-долу въведете UNICODE и _UNICODE, разделени с кома.
Сега редактирайте контрола, тъй като използва системния шрифт, който няма разширен набор от символи. Трябва да промените шрифта за контрол на редактирането.
В диалоговия манипулатор WM_INITDIALOG направете следното:
case WM_INITDIALOG:
{
LOGFONT lf;
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT), sizeof(lf), &lf);
HWND hEdit = GetDlgItem(hDlg, IDC_EDIT1);
HDC hDC = GetDC(hEdit);
_tcscpy(lf.lfFaceName, _T("Arial"));
lf.lfHeight = -MulDiv(10, GetDeviceCaps(hDC, LOGPIXELSY), 72);
//This creates the new font for the edit control
HFONT hFont = CreateFontIndirect(&lf);
//This sets the new font for the edit control
SendMessage(hEdit, WM_SETFONT, (WPARAM)hFont, FALSE);
}
return TRUE;
Не забравяйте, че не всички видове шрифтове имат разширен набор от символи. Мисля, че задаването му на Arial, както в кодовия фрагмент, трябва да работи.