본문 바로가기
C & C++/MFC 컨트롤

자식 윈도우 일괄 배치

by izen8 2012. 6. 20.
반응형

자식 윈도우를 일관 재배치하려면 아래의 메소드를 사용하면 된다.

HDWP BeginDeferWindowPos( int nNumWindows );

HDWP DeferWindowPos( HDWP hWinPosInfo
 , HWND hWnd
 , HWND hWndInsertAfter
 , int x, int y, int cx, int cy, UINT uFlags );
 
BOOL EndDeferWindowPos( HDWP hWinPosInfo );
 
BeginDeferWindowPos() 메소드를 호출하여서 자식 윈도우의 크기와 위치를 저장하기 위한 
메모리를 할당받는다.
 
DeferWindowPos() 메소드를 호출하여서 각 자식 윈도우의 크기와 위치를 설정한다.
 
EndDeferWindowPos() 메소드를 호출하여서 위에서 만들어진 정보대로 자식 윈도우를 일괄
재배치시킨다.
 
위의 3가지의 메소드를 사용하면 MoveWindow() 또는 SetWindowPos() 를 사용했던 것보다
속도가 빠르고 이동중인 중간 과정이 보이지 않으므로 화면이 더 깔끔해진다.
 
예제: 윈도우API정복(개정판) - page 390
 
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage
 ,WPARAM wParam,LPARAM lParam)
{
 static HWND hBtn[5]; 
 int i; 
 HDWP hdwp; 
 
 switch (iMessage) 
 { 
 case WM_CREATE: 
 for (i=0;i<5;i++) 
 { 
 hBtn[i]=CreateWindow(TEXT("button"),TEXT("Test")
 , WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON
 , 0,0,0,0,hWnd,(HMENU)i,g_hInst,NULL); 
 } 
 return 0; 
 case WM_LBUTTONDOWN: 
 hdwp=BeginDeferWindowPos(5); 
 for (i=0;i<5;i++) 
 { 
 hdwp=DeferWindowPos(hdwp,hBtn[i],NULL
 ,i*120,i*50,100,20+i*8,SWP_NOZORDER); 
 
 } 
 EndDeferWindowPos(hdwp); 
 return 0; 
 case WM_RBUTTONDOWN: 
 hdwp=BeginDeferWindowPos(5); 
 for (i=0;i<5;i++) 
 { 
 hdwp=DeferWindowPos(hdwp,hBtn[i],NULL
 ,480-i*120,i*50,100,52-i*8,SWP_NOZORDER); 
 } 
 EndDeferWindowPos(hdwp); 
 return 0; 
 case WM_DESTROY: 
 PostQuitMessage(0);
 return 0; 
 } 
 
 return(DefWindowProc(hWnd,iMessage,wParam,lParam)); 
} 
반응형

'C & C++ > MFC 컨트롤' 카테고리의 다른 글

자신의 자식 모달 모두 닫는법  (0) 2012.06.20
화면 깜박임 방지  (0) 2012.06.20
리스트 컨트롤 사용예제 - 리스트  (2) 2012.06.20
Toolbar & Menu  (0) 2012.02.09
기존 MFC UI 에 리본바 적용하기  (0) 2012.01.25

댓글