Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Консультации по функциям WinAPI


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 7020
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4366
∙ повысить рейтинг »
CradleA
Статус: Специалист
Рейтинг: 2616
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / WinAPI

Номер выпуска:627
Дата выхода:28.10.2015, 15:51
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:6 / 6
Вопросов / ответов:3 / 7

Консультация # 33860: Здравствуйте, Уважаемые Эксперты. Хочу отправить окну сообщение о том что нажата кнопа. Использую функцию sendmessage(Handle,wm_keydown,9,0) чтобы отослать сообщение о том что нажата кнопа Tab но сообщение не доходит. Объясните как правильно отсылать сообщения о нажатии клавиш....


Консультация # 58426: Как через CreateWindowEx создать модальное окно (не диалоговое)? Т.е. чтобы в то время когда окно открыто, другие окна программы не получали фокус. .
Консультация # 25735: Hi, All! Кто знает как в Listview (режим report) поменять местами два Item-а, например с фокусом и предыдущий? Пока извратился через сортировку (вот такой я извращенец), но нельзя ли это сделать как-нибудь попроще? P.S. Тупо копировать поля (item, первый subitem ... n subitem) из одного в другой - не выход. А если этих subitem-ов, к примеру, ш...

Консультация # 33860:

Здравствуйте, Уважаемые Эксперты.
Хочу отправить окну сообщение о том что нажата кнопа.
Использую функцию sendmessage(Handle,wm_keydown,9,0) чтобы отослать сообщение о том что нажата кнопа Tab но сообщение не доходит. Объясните как правильно отсылать сообщения о нажатии клавиш.

Дата отправки: 23.01.2006, 03:41
Вопрос задал: Чурсанов Евгений Ильич
Всего ответов: 2
Страница онлайн-консультации »


Консультирует kstati:

Здравствуйте, Чурсанов Евгений Ильич!
На вскидку понять в чем именно проблема тяжело.
но сразу видна одна неточность.
MSDN описывает прототип функции как:
LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam,LPARAM lParam);
То есть, возможно, присутствует ошибка в первом параметре: вместо hWnd используется Handle. Да, это однотипные структуры, но в Вашем примере, не исключено, что Вы используете хендл модуля приложения, а не его окна.
Проверьте, пожалуйста, действительно это так?
Должно быть SendMessage(hWnd_Целевого_окна, WM_KEYDOWN, 9, 0);

Кроме того, забегая вперед, возможно выгоднее использовать функцию PostMessage ?
Это аналог SendMessage, отличие только в том, что при "PostM.." исполнение кода не прерывается, а при "SendMessage" приостанавливается до тех пор, пока сообщение не будет обработано целевым окном.

Приложение:

Консультировал: kstati
Дата отправки: 23.01.2006, 13:04
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Ерёмин Андрей:

Здравствуйте, Чурсанов Евгений Ильич!
1) Попробуйте заменить код клавиши (9) на именованную константу - VK_TAB.
2) Проверьте, что найденный handle больше 32. Если он меньше этого числа или равен 0, значит окно не найдено.
3) После выполнения этой строки обязательно выполните точно такую же строку, но с сообщением WM_KEYDOWN.
Должно работать.

Консультировал: Ерёмин Андрей
Дата отправки: 23.01.2006, 14:43
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 58426:

Как через CreateWindowEx создать модальное окно (не диалоговое)?
Т.е. чтобы в то время когда окно открыто, другие окна программы не получали фокус.

Дата отправки: 10.10.2006, 19:17
Вопрос задал: Bcd
Всего ответов: 3
Страница онлайн-консультации »


Консультирует Bob Johnson:

Здравствуйте, Bcd!
модальное окно - это заслуга не функции CreateWindowEx.
модальное окно создается совершенно аналогично обычному, но перед тем как вывести его на экран, родительское окно disable\'ится функцией EnableWindow. После исчезновения модального окна с экрана, родительское окно enable\'ится с помощью той же функции.

если ты пишешь на С++ и используешь классы, можно включить дополнительный цикл сообщений внутрь процедуры, выводящей модальное окно. тогда завершение выполнения этой процедуры будет происходить только после закрытия модального окна, т.е. вызов будет синхронным.

Консультировал: Bob Johnson
Дата отправки: 10.10.2006, 19:42
Рейтинг ответа:

НЕ одобряю +1 одобряю!


Консультирует Sergey A. Wedensky:

Здравствуйте, Bcd!

Через CreateWindowEx его создать нельзя. Единственное, чем отличается CreateWindowEx от CreateWindow - это возможность задания расширенных стилей.

Соглашусь с мр. Bob Johnson - чтобы окно было модальным, можно заблокировать остальные окна процесса или на время его жизни организовать "местную" очередь сообщений.

Но чем Вам не нравится диалоговое окно?
Если невозможностью изменения размеров, то это не так, с помощью опять же стилей можно добиться. А в остальном - все то же самое, та же оконная процедура, и т.д.

Консультировал: Sergey A. Wedensky
Дата отправки: 10.10.2006, 19:52
Рейтинг ответа:

НЕ одобряю +1 одобряю!


Консультирует Николай Орлов:

Здравствуйте, Bcd!
Модальное окно нельзы создать функцией CreateWindiwEx. Надо выключить остальныек окна EnableWindow.
BOOL EnableWindow( HWND hWnd,
BOOL bEnable
);

Консультировал: Николай Орлов
Дата отправки: 11.10.2006, 14:14
Рейтинг ответа:

НЕ одобряю +1 одобряю!

Консультация # 25735:

Hi, All! Кто знает как в Listview (режим report) поменять местами два Item-а, например с фокусом и предыдущий? Пока извратился через сортировку (вот такой я извращенец), но нельзя ли это сделать как-нибудь попроще?
P.S. Тупо копировать поля (item, первый subitem ... n subitem) из одного в другой - не выход. А если этих subitem-ов, к примеру, штук 50?

Дата отправки: 03.09.2005, 08:10
Вопрос задал: Germsoft
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Germsoft!

Как вариант можно предложить дать ListView стиль LVS_OWNERDRAWFIXED,
т.е. самому рисовать в зависимости от индексов Item-ов, которые можно тасовать как угодно, и которые хранить в отдельном массиве

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 03.09.2005, 14:13
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Bob Johnson:

Здравствуйте, Germsoft!
Тогда попробуй Virtual List View Style (LVS_OWNERDATA). в этой ситуации ты сам будешь снабжать listview информацией об item\'ах и сможешь виртуально поменять их местами.

Консультировал: Bob Johnson
Дата отправки: 03.09.2005, 16:43
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное