본문 바로가기

Programming/MFC

창의 크기를 고정시키거나 제한하는 방법

출처 미니의 작은 행복안으로... | 현미니
원문 http://blog.naver.com/khyunmin82/60019068438



창이 Maximize되었을 때의 크기와 위치를 알아낼 때,

그리고 창의 최대, 최소 Tracking size를 알아낼 때,

WM_GETMAXMININFO가 발생합니다.


따라서, 이 메시지가 발생할 때, MINMAXINFO의 정보를 채워주면 됩니다.

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)

{ //창의 크기가 (300, 300)에서 (400, 400)까지만 되도록 할때...

 lpMMI->ptMinTrackSize = CPoint(300, 300);

lpMMI->ptMaxTrackSize = CPoint(400, 400);

//lpMMI->ptMaxTrackSize = CPoint(300, 300);

//위와 같이 하면, 창의 크기가 (300, 300)으로 고정되어서

//바꿀 수가 없게 된다.

CFrameWnd::OnGetMinMaxInfo(lpMMI); }  


SDI 프로젝트에서 윈도우 크기 변경 못하게 하기방법은 여러가지가 있다..

 OnSize() 함수를 오버라이드 해줘도 되고 CMainFrame의 OnGetMinMaxInfo 라는 함수를 오버라이드 해서 MINMAXINFO라는 구조체를 변경해서 넘겨줄수도 있다..

그러나 가장 간단하면서도 확실한 방법은

CMainFrame::PreCreateWindow 함수에 다음의 한줄을 추가하는것이다.


cs.style &= ~WS_THICKFRAME;이것만으로 마우스를 테두리에 가져갔을때 커서 모양이 바뀌는 현상방지, 상태바의 그리퍼 제거, 시스템 메뉴에서의 이동메뉴 비활성화 등이 모두 이루어진다.


그외에..
최대화도 안되게 하고 싶다면 WS_MAXMIZEBOX 속성도 제거해주면 된다.


윈도우의 크기를 지정하려면, cs.x 와 cs.y에 가로 세로값을 대입해주면 된다.


  [Visual C++] 메뉴다이얼로그에서 창 크기 조절
 
//sample.cpp 에서 아래 항목에서        

if (!ProcessShellCommand(cmdInfo))
                return FALSE;      

// The one and only window has been initialized, so show and update it.
        m_pMainWnd->ShowWindow(SW_SHOW);
        m_pMainWnd->UpdateWindow();

//창 크기 조절을 위한 추가 코드
        m_pMainWnd->SetWindowPos(&CWnd::wndTopMost, 0, 0, 400, 600, NULL);      

return TRUE;

'Programming > MFC' 카테고리의 다른 글

데이터 형 및 변수명 관례  (0) 2006.03.20
WorkerThread 내에서 윈도우 API 사용하기  (0) 2006.03.20
CFileDialog 파일 저장하기  (1) 2006.03.09
CFileDialog::GetFileExt  (0) 2006.03.09
CFileDialog (file open)  (0) 2006.03.09