Я новичок в MFC, поэтому, пожалуйста, несите меня. У меня есть Диалог, который отображается в полноэкранном режиме на экране с двойным экраном. Этот диалог создается внутри другого немодального диалога (при нажатии кнопки). Что-то вроде:Диалог MFC зависает, когда он теряет фокус
void MyCParentDlg::OnBnClickedButton1()
{
dlg2 = new MyChildNonModalDlg();
dlg2->ShowWindow(SW_SHOW);
}
В OnInitDialog()
из MyChildNonModalDlg
, ShowWindow(SW_MAXIMIZE)
вызывается сделать это диалоговое окно полноэкранного с не-границы. Теперь, есть событие кнопки обратного вызова внутри MyChildNonModalDlg
:
void MyChildNonModalDlg::onBnClickedBut2() {
// Display images on the dialog one by one for a very long time
}
Хотя onBnClickedBut2
работают и диалог постоянно обновляются, если я нажимаю с моей мыши вне диалога (скажем, на другом экране), что означает, когда диалог теряет фокус, он замерзает!
Я знаю, что это возможно, что можно зафиксировать с помощью многопоточности, где процесс внутри OnBnClickedBut2()
должен выполняться внутри потока, но как кто-то, кто очень мало знает о потоке, может кто-то указать мне в правильном направлении или предоставить примеры кода, которые могут это сделать?
Обратите внимание, что такая же проблема возникает, когда дочерний диалог ** не является ** полноэкранным, поэтому эта проблема не из-за того, что она находится в полноэкранном режиме. –
Это зависает, потому что Windows помещает «не отвечающее» окно призраков. Это просто неверно в коде UI, вы * должны * запускать длинные петли в другом потоке. –
OK Я думаю, что я понял это, вот отличное введение в потоки в MFC, загрузка кода примера и изучение его на самом деле помогли мне узнать в течение часа, как делать многопоточность, и это тоже с очень маленьким фоном. Ссылка: http://www.codeproject.com/Articles/5542/Simple-Multithreaded-Application-in-pure-C-Win32-a –