我想要在加载3D stl文件时隐藏2个mfc按钮,然后在stl加载完成时再次显示按钮。这是为了防止用户在正在进行加载时重新加载模型。
代码片段如下
{ // change control state when model loads
((CButton *)this->GetDlgItem(IDC_RELOAD_STOCK_BUTTON))->ShowWindow(SW_HIDE);
((CButton *)this->GetDlgItem(IDOK))->ShowWindow(SW_HIDE);
UpdateWindow();
}
// this process takes few seconds to load the file in the memory
customStockModel.LoadFile(pathName.GetBuffer(pathName.GetLength()));
{
// change control state when the model has loaded
((CButton *)this->GetDlgItem(IDC_RELOAD_STOCK_BUTTON))->ShowWindow(SW_SHOW);
((CButton *)this->GetDlgItem(IDOK))->ShowWindow(SW_SHOW);
UpdateWindow();
}
按钮确实隐藏并重新出现,但是当我隐藏按钮区域时,当按钮控件重新出现在屏幕上时,会立即调用onclick处理程序。似乎点击消息已排队,一旦按钮被激活,mfc就会调用处理程序。我在这里做错了什么?
答案 0 :(得分:0)
理想情况下,您应该在一个线程中读取您的文件 - 这将允许您的应用程序正常刷新并处理消息。 现在,如果您对此不确定(多线程 很难),您可以定期调用lenghty函数中的以下函数来清除消息循环。
BOOL YourClass::DoEvents()
{
MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
return FALSE;
}
if (!AfxGetApp()->PreTranslateMessage(&msg))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
return TRUE;
}
它会起作用,但“适当的程序员”会在看到这个时尖叫! 祝你好运