2014-09-05 3 views
0

프로그래밍 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; 
    } 
+1

아니요. 시간 변경으로 인해 메시지 루프가 입력되는 Windows 메시지가 게시되지 않음을 의미합니다. 원하는 것을하기 위해서 WM_TIMER 이벤트를 창에 보낼 Windows 타이머를 사용해야합니다. 해당 이벤트에 대한 응답으로 UI를 업데이트 할 수 있습니다. –

+0

좋아요. 고마워요. –

답변

1

메시지가 없습니다. b 유휴 상태 일 때 창에 게시하면 GetMessage이 반환되지 않고 메시지 루프 안의 코드가 실행되지 않습니다.

마우스를 움직이면 WM_MOUSEMOVE 메시지가 게시되고 부작용으로 프로그램에서 메시지 루프 내에서 코드를 실행할 수 있습니다.

@KenWhite가 의견에 언급 한대로 WM_TIMER을 사용하십시오. 이러한 종류의 작업을 위해 설계되었습니다.

+0

그래, 고마워. 그 메시지가 유휴 상태 일 때 아무 메시지도 게시되지 않는다는 것을 알지 못했다. –

관련 문제