2012-04-17 2 views
1

MFC에 익숙하지 않으므로 부담하십시오. 이중 화면 모니터에 전체 화면으로 표시되는 대화 상자가 있습니다. 이 대화 상자는 모달이 아닌 다른 대화 상자에서 인스턴스화됩니다 (단추를 클릭 할 때). 같은 뭔가 : MyChildNonModalDlgOnInitDialog()에서포커스를 잃었을 때 MFC 대화 상자가 멈 춥니 다

void MyCParentDlg::OnBnClickedButton1() 
{ 
     dlg2 = new MyChildNonModalDlg(); 
     dlg2->ShowWindow(SW_SHOW); 
} 

ShowWindow(SW_MAXIMIZE)은없는 테두리 대화 전체 화면 만들기 위해 호출됩니다. 실행 내가 (다른 화면에 말) 대화 ​​밖에 내 마우스로 클릭하면 대화 상자가 지속적으로 업데이트되는

void MyChildNonModalDlg::onBnClickedBut2() { 
    // Display images on the dialog one by one for a very long time 
} 

onBnClickedBut2 동안 대화 의미 : 자, MyChildNonModalDlg 내부 버튼 콜백 이벤트가 포커스가 풀리면 멈 춥니 다!

OnBnClickedBut2() 내부의 프로세스가 스레드 내에서 실행되어야하는 멀티 스레딩으로 고정 될 수 있지만 스레드에 대해 거의 알지 못하는 누군가가 나를 올바른 방향으로 안내하거나 제공 할 수 있는지 여부를 알고 있습니다. 이 작업을 수행 할 수있는 코드 예제는 무엇입니까?

+0

자식 대화 상자가 전체 화면이 아닌 ** 일 때도 동일한 문제가 발생합니다. 따라서이 문제는 전체 화면 모드로 인한 것이 아닙니다. –

+1

Windows가 "응답하지 않음"고스트 창을 표시하기 때문에 멈 춥니 다. 이것은 UI 코드에서 유효하지 않습니다. 다른 스레드에서 긴 루프를 실행해야합니다. –

+1

OK 제가 생각한 것 중 하나는 여기에 있습니다. MFC의 스레딩에 대한 훌륭한 소개입니다. 예제 코드를 다운로드하고 공부하면 실제로 한 시간 안에 멀티 스레딩을 수행하는 방법과 이것도 아주 작은 스레드 배경을 배울 수있었습니다. 링크 : http://www.codeproject.com/Articles/5542/Simple-Multithreaded-Application-in-pure-C-Win32-a –

답변

0

onBnClickedBut2 안에 새 스레드를 만들려면 AfxBeginThread을 사용하십시오. UI 이벤트 핸들러를 차단하지 않아도됩니다. 당신이 지금 그것을 가지고 있기를 바랍니다.

관련 문제