Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ WinAPI, Юникодный проект

Автор: volvo 28.10.2009 22:51

Привет всем smile.gif

Столкнулся с непонятным поведением программы. Создаю (MinGW + CodeBlocks, НЕ MSVS) простейший проект Win32, создающий одно-единственное окошко. И добавляю в него вот такой код:

#define UNICODE
...
// Создаем кнопку
HWND myButton = CreateWindow(L"BUTTON", L"Отмена",
BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE,
50, 50, 125, 25, hwnd, 0, hThisInstance, NULL);
// Отключаем (дизейблим) ее
EnableWindow(myButton, false);

HFONT myFont = CreateFont(-11, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE, L"MS Sans Serif");
// назначаем этот шрифт всем оконным элементам
if(myFont)
{
SendMessage(myButton, WM_SETFONT, (WPARAM)myFont, 0);
}

// Показываем окно
ShowWindow (hwnd, nCmdShow);
...
В результате получаю то, что показано во вложении:
Прикрепленное изображение

Однако, если закомментировать строку с EnableWindow, то текст отображается как положено:
Прикрепленное изображение

Попробовал сделать аналогичный проект на Дельфях - абсолютно то же самое, в disable отсекается часть надписи. ОС - WinXP SP3. Причем программа, скомпилированная у меня, прекрасно показывает весь текст под Вистой, например. А на соседнем WinXP SP2 съедается еще больше текста, видно только первые 3 буквы. Зато в Enabled-состоянии отображается везде одинаково правильно.

Это я что-то упускаю, или что может быть? Куда можно копать вообще? blink.gif

Автор: Client 29.10.2009 0:42

Только предположения:
Может кнопку создать через CreateWindowEx?
Может среди параметров BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE, и др. есть противоречия?

Цитата
Создаю (MinGW + CodeBlocks, НЕ MSVS)
А это что? C#?
завтра попробую воссоздать "это" smile.gif . Дома виста тока стоит

Автор: volvo 29.10.2009 0:53

Цитата
А это что? C#?
Нет, это С или С++ (компилятор GCC), у меня С++. На Висте не воссоздается. На ХР проблема в общем-то решена:

    HFONT myFont = CreateFont(-11, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE, L"Tahoma"); // <--- Tahoma - истинно юникодный шрифт
Остается непонятным, почему при использовании остальных шрифтов в НЕактивном состоянии надпись усекается, хотя в активном все отображается нормально. Странно это.