인덱싱 할때 인덱싱 창이 다른 윈도우 가려졌거나
포커스가 다른 윈도우로 넘어갈 경우 내부적으로 인덱싱은 되고 있지만
화면에 출력이 안나오는 버그에 사용할 코드.
출처: http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=275&page=9
----------------------------------------------------------------------------------------------------------------
// OnUpdateWindow() 함수가 호출되면 화면상 노출된 모든 윈도우(자식윈도우포함)를 찾아서
// 갱신명령을 보내게 된다.
void 클래스명::OnUpdateWindow()
{
// 부모윈도우로 데스크탑을 사용하며 데스크탑의 차일드 윈도우에서 검색하며
// 첫번째 차일드 윈도우 핸들부터 검색을 시작한다.
HWND h_wnd = FindWindowEx(NULL, NULL, NULL, NULL);
while(h_wnd != NULL){
// IsWindow()함수는 윈도우 핸들이 유효한지 체크한다.
// IsWindowVisible()함수는 윈도우가 WS_VISIBLE을 가지고 있는지를 리턴하기 때문에
// 윈도우가 다른 윈도우에 가려져 있더라도 nonzero를 리턴한다.
if(IsWindow(h_wnd) && ::IsWindowVisible(h_wnd)) FindWindowAndUpdate(h_wnd);
// Z-Order상에 다음 윈도우부터 검색을 한다.
h_wnd = FindWindowEx(NULL, h_wnd, NULL, NULL);
::InvalidateRect(h_wnd, NULL, TRUE);
}
}
void 클래스명::FindWindowAndUpdate(HWND parm_h_window)
{
// parm_h_window 에 속한 차일드 윈도우를 검색한다.
HWND h_find_wnd = FindWindowEx(parm_h_window, NULL, NULL, NULL);
while(h_find_wnd != NULL){
if(IsWindow(h_find_wnd) && ::IsWindowVisible(h_find_wnd)){
FindWindowAndUpdate(h_find_wnd);
::InvalidateRect(h_find_wnd, NULL, TRUE);
}
h_find_wnd = FindWindowEx(parm_h_window, h_find_wnd, NULL, NULL);
}
}
최근 덧글