Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как преобразовать WM_KEYDOWN сообщения, в UNICODE-символы? 
V
    Опции темы
KaraKum
  Дата 17.5.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Доброе время суток.
Подскажите, пожалуйста, как преобразовать WM_KEYDOWN сообщения в UNICODE-символы с учётом выбранного языка ввода?
PM MAIL WWW   Вверх
586
Дата 17.5.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



А чем WM_UNICHAR не устраивает?
PM   Вверх
KaraKum
  Дата 21.5.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Попробовал. Прога вообще не получает такого сообщения. На всякий случай закомментировал код получения WM_KEYDOWN (WM_CHAR тоже не получает) - не помогло.
Что я делаю не так?
PM MAIL WWW   Вверх
586
Дата 21.5.2008, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Посмотри в MSDN описание функции ToUnicode.
Цитата
The ToUnicode function translates the specified virtual-key code and keyboard state to the corresponding Unicode character or characters. 

PM   Вверх
KaraKum
  Дата 22.5.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Помогло. Спасибо.
И ещё вопросик: Windows API поддерживает двойную буферизацию? А то при перерисовке изображение мелькает.
PM MAIL WWW   Вверх
586
Дата 22.5.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Обработка / перехват сообщения WM_ERASEBKGND. По умолчанию окно закрашивается одним цветом - происходит мерцание.
PM   Вверх
KaraKum
  Дата 23.5.2008, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Значит, как я понимаю, нет?
Если и перехватить сообщение, то перерисовать всё окно так-и-так придётся - опять мелькание.
А конкретно так, как, например, в OpenGL (рисуешь в буфере, который не показывается, а после перерисовки переключаешь буферы - да кому я говорю  smile ) Windows API не поддерживает?
PM MAIL WWW   Вверх
Andrey44
Дата 23.5.2008, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Ну так надо и рисовать в памяти, а потом просто выводить на окно.

Код

HDC memDC;
HBITMAP memBit, oldBit;
memDC = CreateCompatibleDC(hdc);
memBit = CreateCompatibleBitmap(cx, cy, hdc);

oldBit = (HBITMAP)SelectObject(memDC, memBit);
//тут рисуешь, все что угодно

//////////////////

BitBlt(hdc, 0, 0, cx, cy, memDC, 0, 0, SRCCOPY);

if(oldBit)
   SelectObject(memDC, oldBit);
DeleteDC(memDC);



Это сообщение отредактировал(а) Andrey44 - 23.5.2008, 10:13


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
MAXIQ
Дата 25.5.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



А может огранич область перерисовки? ведь ты посылаешь сообщение WM_PAINT  от куда-то? наверно InvalidateRect используешь, вот и огранич область перерисовки в параметрах InvalidateRect зачем все окно перемазывать?? А про контексты в памяти, то это круто можешь хоть анимацию мутить.
PM MAIL   Вверх
KaraKum
  Дата 27.5.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Цитата

А может огранич область перерисовки?

Использую, но это не всагда можно, например при вызове функции TextOut().
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.