Создание двух окон Причины второго, созданного для выгорания - PullRequest
0 голосов
/ 01 октября 2011

Я пытаюсь использовать горячую клавишу, чтобы изменить прозрачность многослойного окна на пропуск сообщений мыши.

В своей основной функции я звоню

// make hotkey with WM_HOTKEY messages sent to hwnd's window procedure, id 1, 
// no other keys to work, F5 as hotkey  
// while checking for errors and it completes successfully. I also do the same 
// (id of 2) for VK_F7 and it completes successfully.

RegisterHotKey (hwnd, 1, 0, VK_F5); 
RegisterHotKey (hwnd, 2, 0, VK_F7);

В моей оконной процедуре у меня есть

case WM_HOTKEY: 
    MessageBox (hwnd, "Got here", "Attention", MB_OK);
    // Other stuff I need to do here

Я пытался добавить MOD_CONTROL, но безрезультатно.

Это действительно сработало раньше. Единственная разница сейчас в том, что я понял, что два окна решат проблемы, которые у меня были. В прошлый раз у меня был только один, и теперь у меня есть две оконные процедуры в моем приложении. Я удостоверился, что все идет правильно и все, но я не должен быть ограничен только одним окном ... Само окно отображается, так как я установил прозрачность на 100/255, чтобы он немного экранировал вид, и Я вижу этот экран.

Смена самого ключа ничего не делает, и сообщения WM_HOTKEY публикуются в очереди. Я собираюсь вручную отправить их в окно.

edit: ^ с SendMessage () не работает, посмотрим, получит ли он любые сообщения, и то же самое с другим окном, пока я на нем.

edit: окей, я чувствую себя идиотом за это, но у меня RegisterHotKey было нулевое значение, так как я еще не создал это окно (я создал окно, которое сначала не получало сообщение горячей клавиши, и изначально оно сразу после этого). Проблема в том, что заключается в том, что, хотя я могу видеть это окно, и если я все это закомментирую, представление будет другим (без экрана), оно не получит никаких сообщений.

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

Major edit: я просто попытался использовать raw API вместо моей обертки, и при второй регистрации произошла ошибка. Я изменил имя класса, и теперь классы регистрируются, и окна создаются. Отображается также окно сообщения, которое появляется для горячих клавиш. Я думаю, что я забыл поставить витрину для них, хотя, я скажу, как это работает через секунду (редактировать: после того, как я перезагружаю свой компьютер еще раз !!!). Прежде чем вы спросите, я не потратил слишком много времени на свою обертку, и да, она имеет проверку ошибок, но использует аналогичную систему для установки / получения lasterror (), и я не проверял возвращаемые значения на них со второго казалось, что он был создан раньше.

1 Ответ

0 голосов
/ 02 октября 2011

Проблема заключалась в том, что оба окна имели одинаковое имя класса. Это немного смущает меня, так как я думал, что им позволили, и тогда я добавлю статический член подсчета экземпляров в свою оболочку. Окончательный результат заключается в том, что все проблемы в этой области теперь исправлены: D
РЕДАКТИРОВАТЬ: Я просто должен был добавить это после изучения, но я понял, что вы можете создать два окна с одинаковым именем класса, но они должны использовать одну и ту же процедуру окна. Изучение этого действительно укрепило мое понимание этой темы, поэтому, если я проясню это хотя бы для одного человека, я буду счастлив. / EDIT

На всякий случай, если вам интересно, какова была цель этого, я включил в него небольшой кадр. Надеюсь, он превратится в нечто, с чем вы можете «обшить» свой экран. Он остается на вершине и следит за вами сейчас, так что большая часть этого уже сделана. Как видите, не самый хороший компьютер для работы с

скриншот программы в действии http://i56.tinypic.com/24g6d5l.jpg

Окно консоли будет скрыто позже, когда я добавлю способ выхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...