2012-04-17 3 views
1

Я новичок в 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() должен выполняться внутри потока, но как кто-то, кто очень мало знает о потоке, может кто-то указать мне в правильном направлении или предоставить примеры кода, которые могут это сделать?

+0

Обратите внимание, что такая же проблема возникает, когда дочерний диалог ** не является ** полноэкранным, поэтому эта проблема не из-за того, что она находится в полноэкранном режиме. –

+1

Это зависает, потому что Windows помещает «не отвечающее» окно призраков. Это просто неверно в коде UI, вы * должны * запускать длинные петли в другом потоке. –

+1

OK Я думаю, что я понял это, вот отличное введение в потоки в MFC, загрузка кода примера и изучение его на самом деле помогли мне узнать в течение часа, как делать многопоточность, и это тоже с очень маленьким фоном. Ссылка: http://www.codeproject.com/Articles/5542/Simple-Multithreaded-Application-in-pure-C-Win32-a –

ответ

0

Используйте AfxBeginThread для создания новой темы внутри onBnClickedBut2. Вы не должны блокировать обработчики событий UI. Надеюсь, ты это догадался.