При нажатии кнопки выдается несколько сообщений 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() из любой точки вашей программы.
Почему вы хотите нажать кнопку без использования обработчика событий. Если я неправильно понял ваш вопрос, просто используйте SendMessage с кодом WM_COMMAND, и действие за кнопкой происходит. – xMRi