IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> WinAPI, Юникодный проект, (на disabled-контролах недорисовывается текст)
сообщение
Сообщение #1


Гость






Привет всем 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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


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

Цитата
Создаю (MinGW + CodeBlocks, НЕ MSVS)
А это что? C#?
завтра попробую воссоздать "это" smile.gif . Дома виста тока стоит
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
А это что? 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 - истинно юникодный шрифт
Остается непонятным, почему при использовании остальных шрифтов в НЕактивном состоянии надпись усекается, хотя в активном все отображается нормально. Странно это.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 31.10.2020 15:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name