![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Robix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 1.6.2009 Репутация: нет Всего: нет |
Это окно, пример из книги Ivor Horton’s Beginning Visual C++ 2010, которую я читаю
Окно под win32 с использованием только API
Я впринципе не собираюсь программировать много, используя WIN API, но мне интересно, как добавить в это окно код, который надлежащим образом закроет его, при нажатии на клавишу ENTER. Я думаю этот код надо разместить в одном из case функции switch(message) [строчка 86]. У кого есть опыт, напишите пожалуйста, как должен выглядеть этот код ? |
|||
|
||||
| миг |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: 1 Всего: 1 |
в эту функцию нужно добавить сообщение от клавиатуры
Это сообщение отредактировал(а) миг - 12.3.2011, 21:06 --------------------
Oaks may fall when reeds stand the storm. |
||||
|
|||||
| Robix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 1.6.2009 Репутация: нет Всего: нет |
Спасибо. Эта функция DestroyWindow и есть обычный выход из программы, т.е. равносильно закрытию окна кнопкой в правом верхнем углу ?
|
|||
|
||||
| миг |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: 1 Всего: 1 |
да. в ней задается параметр окна, который нужно уничтожить. Уничтожаются все связанные дочерние окна окна, немодальные диалоговые окна. функция DestroyWindow посылает сообщение WM_DESTROY и WM_NCDESTROY . В WM_DESTROY вызывается функция PostQuitMessage(0). Далее этот цикл
Завершает свою работу и программа закрывается. --------------------
Oaks may fall when reeds stand the storm. |
||||
|
|||||
| Robix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 1.6.2009 Репутация: нет Всего: нет |
Спасибо.
У меня еще вопросик. Интересно, как сделать так, чтобы по нажатию Enter, в окне выводился вместо прежнего текст "Была нажата клавиша Enter". Пробовал вставить функцию DrawText, в case WM_KEYDOWN: но все-таки не происходит рисования. Чего тут не хватает не подскажете ? |
|||
|
||||
| миг |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: 1 Всего: 1 |
самый простой способ. создай глобальную переменную. Сохрани в ней свою строчку... Добавь функцию перерисовки экрана InvalidateRect. потом в WM_PAINTE перерисовывай.
Это сообщение отредактировал(а) миг - 15.3.2011, 05:51 --------------------
Oaks may fall when reeds stand the storm. |
|||
|
||||
| Robix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 1.6.2009 Репутация: нет Всего: нет |
спасибо, работает.
Теперь понял, что ф-ция InvalidateRect посылает сообщение для моего окна WM_PAINT, как и написано в документации. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Не может быть, чтобы такое было в документации написано
InvalidateRect ничего не посылает, а просто помещает регион как инвалидный; а при ближайшей возможности система сама это дело проверяет и посылает тебе PAINT. -------------------- ... |
|||
|
||||
| Robix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 1.6.2009 Репутация: нет Всего: нет |
А почему система paint-событие посылает только после этой ф-ции ? Без этой пометки как инвалидный не посылает что-ли ?
А еще вы не в курсе, как вывести не одну строку через draw text, а две с переходом строки ? Это нужно создавать специально два rectangle по пикселям окна и в них выводить строки ? |
|||
|
||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Именно
Нужно в строке поставить перевод строки (возможно, с переводом каретки, точно не помню). А прямоугольник сделать повыше, чтобы влезло. Возможно еще, что с флагами нужно подшаманить. -> MSDN -------------------- ... |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |