|
조세현 님이 쓰신 글 :
: TTimer를 사용해서 임의의 함수를 거치는 동안 ProgressBar를 시간이 갈 수록 채우려고 하는데
:
: 해당 함수가 끝난 다음에야 ProgressBar가 채워지네요
:
: 함수에 들어가기 전에 타이머를 셋시켰는데 말이죠...
:
: 함수 수행 중간엔 타이머가 안 걸리나요?
함수 내의 코드에서 loop를 사용하는 것으로 생각되는군요.
이론적으로는 가능한 얘기지만 loop를 사용하는 경우 window message가 정상적으로 처리되지 않는 경우가 있습니다. 정확히 표현하면 message queue에 쌓여있고 pumping이 되지 않는 것이지요.
함수의 실행이 끝나면 message가 한꺼번에 처리되고 그래서 ProgressBar가 한꺼번에 쫘악 채워질것입니다.
이를 해결하기위해서는 loop내에 Application->ProcessMessages()를 호출하여 Message를 pumpin하거나
loop 내에서 다음 함수를 호출하여 WM_PAINT message만을 pumping하면 원하는 결과를 얻을 수 있을것입니다.
// WM_PAINT message pumping 함수
void __fastcall PumpPaintMessage(HWND hWnd)
{
MSG msg;
while(::PeekMessage(&msg, hWnd, WM_PAINT, WM_PAINT, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
도움이 됬길 바랍니다.
즐프하시길~~
|