반응형
자식 윈도우를 일관 재배치하려면 아래의 메소드를 사용하면 된다.
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 390LRESULT 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 |
댓글