各位大佬,請問MFC將三個點擊事件合并成一個點擊事件,并按順序執行。例如
afx_msg void OnClickedBtn1();
afx_msg void OnClickedBtn2();
afx_msg void OnClickedBtn3();
afx_msg void OnClickedBtnAll();
目前想要在OnClickedBtnAll()這個點擊事件里,將OnClickedBtn1();、OnClickedBtn2();、OnClickedBtn3();這三個點擊事件合并起來,并按照先后順序執行,在這三個點擊事件里,都有多執行緒在里面。
一下是我使用的方法:
//方法1
int CTestDlg::clickedBtn1()
{
OnClickedBtn1();
return 1;
}
int CTestDlg::clickedBtn2()
{
OnClickedBtn2();
return 1;
}
int CTestDlg::clickedBtn3()
{
OnClickedBtn3();
return 1;
}
void CTestDlg::OnClickedBtnAll()
{
do {
int retValue = clickedBtn1();
if (retValue == 1)
{
retValue = clickedBtn2();
if (retValue == 1)
{
retValue = clickedBtn3();
if (retValue == 1)
{
AfxMessageBox(_T("執行完成"));
}
else
{
break;
}
}
else
{
break;
}
}
else
{
break;
}
} while (0);
}
//方法2
通過自定義訊息SendMessage,將點擊事件放在里面,然后,直到該事件完成,再發下一個點擊事件的自定義訊息,如下:
SendMessage(MYWM_BTN1_STATUS, NULL, NULL);
ON_MESSAGE(MYWM_BTN1_STATUS, &CTestDlg::OnMywmClickedBtn1)
ON_MESSAGE(MYWM_BTN2_STATUS, &CTestDlg::OnMywmClickedBtn2)
ON_MESSAGE(MYWM_BTN3_STATUS, &CTestDlg::OnMywmClickedBtn3)
afx_msg LRESULT CTestDlg::OnMywmClickedBtn1(WPARAM wParam, LPARAM LPARAM)
{
OnClickedBtn1();
SendMessage(MYWM_BTN2_STATUS, NULL, NULL);
return 0;
}
afx_msg LRESULT CTestDlg::OnMywmClickedBtn2(WPARAM wParam, LPARAM LPARAM)
{
OnClickedBtn2();
SendMessage(MYWM_BTN3_STATUS, NULL, NULL);
return 0;
}
afx_msg LRESULT CTestDlg::OnMywmClickedBtn3(WPARAM wParam, LPARAM LPARAM)
{
OnClickedBtn3();
return 0;
}
以上,第一種方法沒有按照順序去執行,第二種方法按照點擊事件的順序執行,但會導致MFC程式出現卡死的現象。
給位大佬,請問還有什么更好的辦法能實作或怎么解決這樣的問題呢?還希望給位有經驗的大佬能給點幫助或意見,小弟不勝感激!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/276798.html
標籤:基礎類
