반응형
자식 윈도우를 일관 재배치하려면 아래의 메소드를 사용하면 된다.
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 컨트롤' 카테고리의 다른 글
[Dialog] 윈도우 작업영역 크기 설정 (0) | 2011.12.14 |
---|---|
[Dialog] 대화상자를 부모 윈도우 정 중앙에 위치시키기 (0) | 2011.12.14 |
[Dialog / 메뉴] 대화상자에서 메뉴 on/off 시키기 (0) | 2011.12.14 |
[Dialog] 윈도우 그리기 lock 하기 (0) | 2011.12.14 |
[Dialog] 캡션이나 아이콘을 깜박이게 하는 FlashWindow (0) | 2011.12.14 |
댓글