2014-09-10 1 views
0

У меня есть задача, которая скрывает диалог, но мне нужно щелкнуть кнопку, принадлежащую этому диалогу, до реализовать некоторые функции перед тем, как перейти к следующему диалоговому окну.MFC: Есть ли способ активной кнопки без события On_Bn_Clicked()?

Но когда я скрываю это диалоговое окно, я не могу нажать кнопку. Есть ли способ реализовать эту кнопку без события On_Bn_Clicked()? Я имею в виду, что когда вызывается диалог, кнопка также активируется.

Спасибо за помощь.

+0

Почему вы хотите нажать кнопку без использования обработчика событий. Если я неправильно понял ваш вопрос, просто используйте SendMessage с кодом WM_COMMAND, и действие за кнопкой происходит. – xMRi

ответ

1

При нажатии кнопки выдается несколько сообщений Windows. Важными являются WM_LBUTTONDOWN, WM_LBUTTONUP, который сообщает кнопке, что вы нажали левую кнопку мыши вниз и вверх. Затем через некоторое время сообщение WM_COMMAND отправляется в родительское окно, чтобы обрабатывать нажатие кнопки. В этот момент вызывается ваш обработчик MFC ON_COMMAND(). MFC полностью абстрагирует это от вас.

Вы можете пойти и смоделировать это, используя API-интерфейс Win32 SendMessage, но если блокировка сообщения блокирует вашу кнопку, вы не можете щелкнуть ее, если хотите. Если вам нужен быстрый ответ на ваш вопрос, тогда это подход к «сделайте это». Это будет выглядеть примерно так:

SendMessage(button.GetSafeHwnd(), WM_LBUTTONDOWN, MK_LBUTTON, 0); SendMessage(button.GetSafeHwnd(), WM_LBUTTONUP, MK_LBUTTON, 0);

Я думаю, что более разумный подход заключается в коде, который в этом обработчик событий On_Bn_Clicked() и просто переместить его в одну функцию. Таким образом вы можете вызвать код в On_Bn_Clicked() из любой точки вашей программы.

+0

Использование SendMessage для входящих сообщений Windows не является «реальной» идеей. При использовании этого параметра вы также можете использовать SendMessage с сообщением WM_COMMAND. – xMRi

+0

Спасибо за помощь. Я исправил эту проблему. Просто реализуйте код, но не переносите их в On_Bn_Clicked(). – vinhdq91

0

Просто позвоните On_Bn_Clicked() прямо из вашего кода. В этом нет вреда. (Я полагаю, вы не хотите на самом деле нажимать скрытую кнопку с помощью мыши ...)

+0

Да, но я просто реализую код, не нужно вызывать On_Bn_Clicked(). Спасибо, я решил свой вопрос :) – vinhdq91

Смежные вопросы