Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Форма на чистом винапи..

318
12 января 2011 года
nof
193 / / 03.04.2006
Ребят, в общем есть окно программы с некоторыми элементами формы, один из которых - форма ввода текста. Создаётся так:
 
Код:
text_hWnd = CreateWindowEx(0,"EDIT", "whatever",
        WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL,
        272,451,98,18,hWnd,(HMENU)STATUS_ID,hInstance,0);

Появляется, работает, всё ок. но текст в этом окне не выделяется через CTRL+A. Неужели это самому в обработчике надо описывать? Если да, то есть готовый пример? Так не хочется с такой ерундой ковыряться..
7
13 января 2011 года
@pixo $oft
3.4K / / 20.09.2006
Multiline!=True,в этом может быть проблема.В моём примере тоже не выделяется,хотя в контекстном меню такой пункт есть
Если что,думаю,что недолго обработку написать
8
13 января 2011 года
mfender
3.5K / / 15.06.2005
Горячие кнопари регистрировать надо, если чо. Тогда они работают всюду в активных окнах.
278
13 января 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: @pixo $oft
Multiline!=True,в этом может быть проблема.



@pixo $oft, не так давно сам писал чистое Win32-приложение, на 100% гарантирую, что дело не в этом. Мне кажется, здесь нужно не мудрить и просто сделать через RegisterHotKey().

7
13 января 2011 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: Alexander92
Мне кажется, здесь нужно не мудрить и просто сделать через RegisterHotKey().

Т.е. вы считаете,что все остальные приложения тоже регистрируют горячие клавиши для подобного рода операций?Почему же тогда Ctrl+C/X/V работают?И как тогда определить,для какого контрола произошло это событие?
Просто я думал,что для текстового поля это должна быть базовая комбинация,равно как и операции с выделенным текстом.Ведь в контекстном меню-то такой пункт есть!

10
13 января 2011 года
Freeman
3.2K / / 06.03.2004
Цитата: @pixo $oft
Ведь в контекстном меню-то такой пункт есть!


Это ровным счётом ничего не значит. Ctrl+A не является стандартной комбинацией, в отличие от Ctrl+C или Ctrl+X. В некоторых программах Ctrl+A работает, но только благодаря заботе разработчиков о пользователе. Есть куча программ, где не работает. Позапускай, посмотри.

Скажем, Ctrl+A не работает в окне запуска программы по Win+R.

7
13 января 2011 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: Freeman
Скажем, Ctrl+A не работает в окне запуска программы по Win+R.

И точно,я невнимателен.Хотя сам такое нередко замечал
Значит,действительно надо регистрировать комбинацию или другими способами

5
13 января 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Freeman
Скажем, Ctrl+A не работает в окне запуска программы по Win+R.


Это в какой версии Windows? У меня всегда работал в XP, Vista, 2003 (+ R2), 2008 (+ R2), 7 (вне зависимости от разрядности).

АПД. Гоню, в XP и 2003 не работала вродебы, но я к сожалению не помню уже.

278
13 января 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: @pixo $oft
Т.е. вы считаете,что все остальные приложения тоже регистрируют горячие клавиши для подобного рода операций?Почему же тогда Ctrl+C/X/V работают?И как тогда определить,для какого контрола произошло это событие?
Просто я думал,что для текстового поля это должна быть базовая комбинация,равно как и операции с выделенным текстом.Ведь в контекстном меню-то такой пункт есть!



Насколько я знаю, для текстового поля базовым является системное сообщение (WM_COPY, WM_PASTE и т.п.), а не комбинация клавиш. А по поводу определения, для какого контрола произошло событие, - переопределите просто оконную процедуру для соответствующего контрола, в нее ж передается первым параметром дескриптор окна.

P.S. Единственное - я, наверное, был неправ, когда писал про RegisterHotKey(), эта функция регистрирует горячие клавиши в пределах всей системы (http://msdn.microsoft.com/en-us/library/ms646309(v=vs.85).aspx). Тут, скорее, нужно либо обрабатывать WM_KEYDOWN, либо посмотреть в сторону SetWindowsHookEx(). Я когда-то на C++ писал класс для удобства регистрации горячих клавиш через SetWindowsHookEx(), если кому интересно - могу поделиться.

7
14 января 2011 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: Alexander92
эта функция регистрирует горячие клавиши в пределах всей системы

Вот-вот,я о том же:) Собственно,поэтому и недоумевал,как с её помощью получить требуемый результат

8
14 января 2011 года
mfender
3.5K / / 15.06.2005
А иначе не бывает. Хоткеи всегда для всей системы и регистрируются. А чтобы не было конфликта с другими, нужно сделать атом для своей программы, пометить его в глобальной переменной, и регистрировать горячие клавиши своей программы, указывая свой атом в id (это второй параметр RegisterHotKey)
278
14 января 2011 года
Alexander92
1.1K / / 04.08.2008
Да, готов согласиться. Единственное, в этом случае первым параметром нужно передавать NULL, чтобы нажатие хоткея передавалось вызывающему потоку.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог