在按钮等响应事件中,常常会加入多线程的操作,但是如果将按钮文本等刷新操作写入多线程会造成崩溃,因此我们需要采用消息机制的办法来实现,以下是实现的实例:
#define WM_UPDATERIBBON_DATA WM_USER + 1
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(WM_UPDATERIBBON_DATA, OnMyMessage)
// 源文件中进行用户定义消息响应函数的实现
LRESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
CBCGPRibbonLabel *pRibbonBtn = NULL;
pRibbonBtn = DYNAMIC_DOWNCAST(CBCGPRibbonLabel, m_wndRibbonBar.FindByID(ID_LABEL_TEST, FALSE));
pRibbonBtn->SetText(L"bhutrkvghfcdrgxsgsxsd");
m_wndRibbonBar.AdjustSizeImmediate(TRUE);
m_wndRibbonBar.ForceRecalcLayout(TRUE);
return 0;
}
线程中使用实例:
int ConnectFun(CMainFrame* pMainFrame)
{
::SendMessage(pMainFrame->m_hWnd, WM_UPDATERIBBON_DATA, 0, 0);
return 1;
}
#include <thread>
void CMainFrame::OnShortcutsAbout ()
{
std::thread t(ConnectFun, this);
t.detach();
}