페이지

2010년 4월 8일 목요일

[두루에디트 제작기] WS_VISIBLE 과 SetRedraw와의 관계

인쇄미리보기시 MDI 어플리케이션에서 툴바,MDI client,MDI Child 윈도우 등을 감추고 인쇄미리보기 창을 전면에 띄워야 한다.
이때,MDI Client를 (class name:"MDIClient") Fake 하여 전체 화면을 차지해야 한다.
그런데 툴바나 다른 메인프로그램의 어플리케이션 고유 기능 중 만일 SetRedraw를 하는 경우는
이렇게 ShowWindow(SW_HIDE)나 SetWindowPos(SWP_HIDEWINDOW) 등으로 숨긴 메인프레임의 MDI Client 창이 별안간 WS_VISIBLE 속성이 되살아 나게 된다.

즉,SetRedraw(FALSE) 후 SetRedraw(TRUE) 가 자신의 코드 어디선가 호출된다면,갑자기 숨긴창이 SW_SHOW 될 것이므로 주의해야 한다. 결국,Window 가 visible 상태가 아닌경우는 함수 사용을 하지 않도록 해야 한다.

다음은 KFC library(자작 SDK API 기반 C++ 클래스기반의 윈도우즈 개발 라이브러리 툴킷이다)
의 함수 예이다.


/*
caution! if the window has not WS_VISIBLE result of called ShowWindow(SW_HIDE),
or SetWindowPos(SWP_HIDEWINDOW)
and then try to SetRedraw(TRUE),the Disabled window is shown as WS_VISIBLE.
so,beforecalling SetRedraw,check the window is visible now.
*/
void KFCWnd::SetRedraw(BOOL bRedraw)
{
if(m_hWnd && ::IsWindow(m_hWnd) && ::IsWindowVisible(m_hWnd))
::SendMessage(m_hWnd, WM_SETREDRAW, bRedraw, 0);
}

댓글 없음:

댓글 쓰기