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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сделать менюшку "а-ля DOS" в окне 
:(
    Опции темы
Ibragim
Дата 28.7.2005, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

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



Всем вечер добрый.
Помогите плз. со следующей задачей. Есть окно, положим,

hMainWnd = CreateWindow(szAppName, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0,CW_USEDEFAULT,
0, NULL, NULL, hInstance, NULL);

И вот нужно используя только API сделать в этом окне менюшку, как были в текстовых программах под ДОС,
то бишь в текстовом виде написано:
Пункт1
Пункт2
Пункт3
Нужно, чтобы по нажатию клавиши "вниз" становилась надпись
Пункт1
Пункт2
Пункт3

и т.п.

Вот так. Поможете с обработчиком?

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_CREATE
<как собственно написать на окне эти самые пункты?>
break;
сase WM_<как сказать клавиша вниз?>
break;


PM MAIL   Вверх
Fixin
Дата 28.7.2005, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



WM_CREATE не поможет (если не делать такой оконный класс, но я вижу до этого далеко). Тут нужен WM_PAINT - будешь сам, ручками рисовать эти менюшки и текст в них писать.
На счет второго - WM_KEYDOWN, там выбираешь wParam - в нем номер символа - если стрелка то делай переход на новое положение
PM MAIL ICQ   Вверх
Ibragim
Дата 28.7.2005, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

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



Спасибо, но плоховато.
1. WM_KEYDOWN - понятно, сделаем.
2. Оконный класс сделан, так что почему бы и нет? smile
3. Можно
case WM_PAINT:
<и здесь пару строчек примера - перерисуй что-нибудь>
<и еще. Есть варианты без GetDC или чего-то в этом роде вывести просто текст как таковой по координатам, например>
break;
PM MAIL   Вверх
Fixin
Дата 28.7.2005, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Цитата
<и здесь пару строчек примера - перерисуй что-нибудь>
<и еще. Есть варианты без GetDC или чего-то в этом роде вывести просто текст как таковой по координатам, например>
Без GetDC? Вроде бы надо BeginPaint. Жди, сейчас "примерно" без проверки накатаю.
PM MAIL ICQ   Вверх
Ibragim
Дата 28.7.2005, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

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



и еще - стрелки, enter, esc начали ловиться, а вот Alt+X вообще не генерирует WM_KEYDOWN, по крайней мере дебагер не останавливается. Как с ним быть, не знаешь?
PM MAIL   Вверх
Fixin
Дата 28.7.2005, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Пусть Strings[COUNT] - строки меню, StrCnt - колво строк, а CurString - текущее выделенное положение, тогда
Код
PAINTSTRUCT PaintStruct;
int k = 16;
HDC PaintDC = BeginPaint(hwnd, &PaintStruct);
for (int i = 0; i < StrCnt; i++)
{
if (i == CurString) // если выделенная строка
{
COLORREF old = GetBKColor(PaintDC); //сохраняем старый цвет фона
SetBKColor(PaintDC, 0x00FF0000); // делаем фон синим
TextOut(PaintDC, 5, i*k, Strings[i], lstrlen(Strings[i])); // выводим
SetBKColor(PaintDC, old);//восстанавливаем цвет фона
} else // если обычная
TextOut(PaintDC, 5, i*k, Strings[i], lstrlen(Strings[i])); //выводм
}
EndPaint(hwnd, &PaintStruct);

Добавлено @ 22:23
Alt - это WM_SYSKEYDOWN, и про ловлю ентёра - я ж сказал, что wParam отсеивать надо - нажми стрелку "вниз" и посмотри дебаггером ее значени в виде "цифры", потом кейсом или ифом выделяй
PM MAIL ICQ   Вверх
Ibragim
Дата 28.7.2005, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

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



Все, спасибо, что-то вывело, дальше накатаю.
не-не, про enter как раз все в порядке. Так собственно коды и узнал smile. А Alt+X не ловился на WM_KEYDOWN. Спасибо, уже поймался на WM_SYSKEYDOWN.

Сэнкс, удачи.
PM MAIL   Вверх
Fixin
Дата 28.7.2005, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Тебе тоже! smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0633 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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