2011-02-23 3 views

답변

16

OnInitDialog 함수로 스레드를 간단하게 만들 수 있습니다. 다른 기능을 사용하거나 검색하거나 초기화 코드를 두 부분으로 나누어 작업을 복잡하게 만들 필요가 없습니다. (전송 해당하는 Windows 메시지가 없기 때문에 또한 하지 이러한 기능은 있습니다.)

당신이 스레드를 만들 전에 화면 에 대화 상자를 얻고 싶은 경우에, 당신은 표시 할 수 있습니다 그것은 수동으로 ShowWindow function을 사용합니다. 예를 들어 I 정상 이하 스레드 우선 순위를 변경하고, 스레드가 처음 실행될 때 I 정상 어리에 실을 설정 Waiting until the dialog box is displayed before doing something

+0

ShowWindow를 호출하면 왼쪽 상단에 대화 상자가 생겨 "CenterWindow()"를 호출해야한다는 것을 알게되었습니다. – Klox

+0

@klox 흠, 그럴 필요는 없습니다. 대화 상자는 자동으로 소유자 윈도우의 가운데에 배치됩니다. 이것은'OnInitDialog' 이후에 실행되는 내부 MFC 함수 인'_AfxPostInitDialog'에서 발생합니다. '_AfxPostInitDialog'는'OnInitDialog' 함수가 대화 상자의 좌표를 변경하지 않으면 실제로'CenterWindow'를 호출합니다. 그러나 명시 적으로 부르면 아무런 상처를 입지 않을 것입니다. 다중 모니터 시스템을 고려하여 합리적인 위치에 센터링을하고 있는지 확인하십시오. 기본 디스플레이를 항상 중심으로하는 것은 잘못된 결정입니다. :-) –

+0

소유자 창이 없습니다 (대화 상자는 유일한 창임). 설명은 내가 보는 행동의 변화를 설명하는 데 도움이됩니다. – Klox

0

OnInitDialog()은 초기화시 (WM_CREATE에 대한 반응으로) 호출되는 주요 기능입니다.

왜 거기에 스레드를 만들 수 없습니까?

+0

onintidialog 함수 안에 두 개의 스레드를 만들고 있는데 대화 상자가 실행 중일 때 대화 상자가 매우 느리게 진행됩니다. 즉, 대화 상자가 형성되고 스레드가 시작될 때 5 ms 시간 후에 ontimer 내부에 스레드가 생성됩니다. 그래서 타이머 대신 타이머를 생성하는 대신에 dialo를 호출 한 다른 함수가 있다면 createinstruction을 수행 한 다음 코드를 생성 할 수 있습니다. 함수가 존재합니까? – Suri

+1

'WM_INITDIALOG'에 대한 응답으로'OnInitDialog'가 호출되지 않았습니까? –

0

:

ShowWindow(SW_SHOW); 
RedrawWindow(); 

또한 레이몬드 첸 포스트 참조. 이것은 잘 작동합니다. 귀하의 회신에 감사드립니다.

관련 문제