У меня есть 2 кнопки в моих проектах:C++/MFC есть способ щелкнуть по кнопке, нажав другую кнопку?
-Кнопка A
-Кнопка B
Есть ли способ, я могу нажать buttonA и выполнить щелчок ButtonB Aswell.
У меня есть 2 кнопки в моих проектах:C++/MFC есть способ щелкнуть по кнопке, нажав другую кнопку?
-Кнопка A
-Кнопка B
Есть ли способ, я могу нажать buttonA и выполнить щелчок ButtonB Aswell.
Хотя ответ был принят, я хотел бы предложить другое решение.
Во-первых, предлагаемая компоновка кнопок сломается, как только вы решите, что нажатие кнопки ButtonB должно вызвать щелчок на ButtonA.
Я бы отделить все, что щелчки от базовой функциональности, и вызывать его по мере необходимости:
void MyDialog::Button_A_Action()
{
}
void MyDialog::Button_B_Action()
{
}
void MyDialog::OnButton_A_Clicked()
{
Button_A_Action();
Button_B_Action();
}
void MyDialog::OnButton_B_Clicked()
{
Button_B_Action();
}
Вызовите обратный вызов для ButtonB явно из обратного вызова ButtonA.
BOOL MyDialog::OnButton_A_Clicked() { ... OnButton_B_Clicked(); }
Как уже упоминалось в this comment, вызывая обработчик может непосредственно вызвать тонкие проблемы, я хотел бы предложить следующее решение из того же комментария:
кнопку Отправить сообщение нажмите на кнопку B.
BOOL MyDialog::OnButton_A_Clicked()
{
...
CWnd *pBtnB = GetDlgItem(IDC_BUTTONB);
ASSERT(pBtnB != NULL); // You can use MFC
pBtnB->SendMessage(BN_CLICKED);
}
Хотя это может работать, как и ожидалось, я видел случаи, когда прямого вызова обработчика из другого обработчика может привести к некоторые тонкие проблемы. Я бы предпочел опубликовать/отправить соответствующее сообщение, чтобы избежать возможных проблем. – rrirower
@rrirower Спасибо за ваш комментарий. Я отредактировал свой ответ. Не могли бы вы рассказать, какие возможные проблемы могут возникнуть, если вы вызываете обработчика из другого? –
Это действительно зависит от того, что делает обработчик исходного события. Как правило, я видел, что дескрипторы окон и другие объекты становятся недействительными, потому что исходное сообщение не было полностью обработано при вызове следующего вложенного обработчика. – rrirower