2011-04-28 7 views
0

나는 MFC (Wince 플랫폼)에 하나의 대화 상자가 있고 그 위에 하나의 목록 상자가 있습니다. 대화 상자가 표시되면 스레드를 생성해야합니다. 그러나 ShowWindow()를 완료하기 전에 스레드가 시작되는 것처럼 보일 때가 있습니다. 대화 상자가 화면에 완전히 표시 될 때까지 스레드 실행을 어떻게 제한 할 수 있습니까?대화 상자의 ShowWindow()를 제한하려면

감사합니다,

무 케시

+0

'ShowWindow'는 대화 상자로 사용되지 않습니다. –

+0

하지만 그 작업 ... 내 지식 대화 상자에 대한 모든 윈도우의 특정 종류의 창입니다. 쇼 윈도우는 모든 종류의 서브 윈도우에서도 작동합니다. (버튼,리스트, 에디트 박스 등) – mukesh

+0

MFC를 사용하고 있다면 처음에는 ShowWindow를 사용하지 말아야합니다. 그러나 "대화 상자"는 일반적으로 * 모달 대화 상자 *를 말합니다.이 경우 MFC에서 DoModal을 사용합니다. –

답변

0

당신은 대화 상자가 처음으로 활성화됩니다 때 스레드를 생성 할 수 있습니다. WM_ACTIVATE 메시지 중 하나를 사용해야합니다.

+0

흠 좋아,하지만 그런 대화 상자는 한 번만 생성됩니다. 모달 적은 대화 상자를 사용하고 있습니다. 나는 이미 기억 속에 창조했다. 그래서 버튼을 클릭하고 표시하고 창을 숨길 필요가 있습니다. 그래서 하나의 버튼을 클릭하면 창을 표시하고 스레드를 시작하고 다른 버튼을 클릭하면 창을 숨긴 다음 스레드를 중지합니다. 중지 버튼에 대해서는 괜찮습니다.하지만 시작 버튼 스레드가 완료되기 전에 시작되는 동안 ShowWindow() 호출 – mukesh

0

대화 상자가 표시되는 것과 동시에 스레드가 시작되도록하려면 WM_PAINT가 처음 처리 될 때 마지막으로 스레드를 시작하십시오.

+0

감사합니다 codebolt, 내가 OnPaint() 함수의 마지막 문장으로 시작 스레드를 호출해야한다고 말하는 것입니까? – mukesh

+0

예, 한 번만 수행해야합니다 (OnPaint는 여러 번 호출됩니다). 따라서 이미 스레드를 시작했는지 확인하기위한 테스트를 수행하십시오. –

+0

그래,이 시도했지만 여전히 동일한 응답을 보여줍니다. – mukesh

1

그리기에는 두 번째 스레드를 사용하지 않아야합니다 (다른 사람들이 말했듯이).

다른 스레드에서 작업이 발생할 때 창을 업데이트하려면 다른 스레드에서 다시 칠하기를 강제로 취소 한 다음 다시 칠하기가 발생하면 새 값이있는 창을 업데이트하십시오. 이렇게하면 문제가있는 페인트 작업의 끔찍한 동기화를 수행하지 않아도됩니다.

관련 문제