프로그래밍 GUI에 문제가 있습니다. GUI가 실행되는 시간을 표시하고 매초마다이 수를 업데이트하고 싶습니다. 내 문제는, 내 GUI는 마우스를 움직일 때만 업데이트된다는 것입니다.창이 마우스 이동시에만 업데이트됩니다.
나는 InvalidateRect() 호출 바로 앞에 중단 점을 추가하여 프로그램을 단계별로 실행했습니다. 이 중단 점이있을 때 hwndTimeOn 핸들이 업데이트됨을 볼 수 있습니다 (기본적으로 내 프로그램이 중단되면 F5 키를 누를 때마다 핸들이 올바른 카운트로 업데이트 될 것입니다). 그러나 중단 점없이 내 프로그램을 실행할 때 내 마우스를 움직일 때 내 핸들 만 업데이트됩니다 ... 내 주 창이 포커스를 잃거나 활성화되지 않아서 hwndTimeOn을 올바르게 업데이트하지 못하게 될 수 있습니까? 그 밖의 무엇이 진짜 원인인지 모르겠습니다. 마우스 동작이나 클릭에 대한 메시지 처리 기능이 없으며 내 프로그램에서 hwndTimeOn 핸들을 업데이트하지 않습니다.
Heres는 일부 코드 :
일부 변수 사용 : 시간에 대한
CString temp, timeDiff;
time_t startCount, now, start;
double diffTime;
텍스트 편집 핸들 읽기 : 내 메시지 루프 내부
hwndTimeOn= CreateWindowEx(NULL,
"EDIT",
"Time On",
WS_TABSTOP | WS_VISIBLE |
WS_CHILD,
520,
5,
100,
24,
hwnd,
(HMENU)IDC_TIMEON,
GetModuleHandle(NULL),
NULL);
:
if (difftime(now, startCount) > 1)
{
diffTime = difftime(now, start);
temp.Format("%f", diffTime);
timeDiff = "Time On: ";
timeDiff.Append(temp);
SetWindowText(hwndTimeOn, timeDiff);
InvalidateRect(hwndTimeOn, NULL, TRUE);
startCount = now;
}
아니요. 시간 변경으로 인해 메시지 루프가 입력되는 Windows 메시지가 게시되지 않음을 의미합니다. 원하는 것을하기 위해서 WM_TIMER 이벤트를 창에 보낼 Windows 타이머를 사용해야합니다. 해당 이벤트에 대한 응답으로 UI를 업데이트 할 수 있습니다. –
좋아요. 고마워요. –