|
고명학 님이 쓰신 글 :
: 안녕하세요..
:
: 폼의 크기를 마우스로 늘렸다가 줄였다가 할 수 있는 상태인데요..
:
: 폼의 크기를 마우스로 드래그를 해서 최소로 줄이면 타이틀바의 멘끝부분만 나오는 사이즈로 줄일 수 가 있는데요.
:
: 일정한 크기이하로 줄어들지 안게하려면.. 어떻게 해야 하나요..
:
: 예를 들어... 윈집같은 경우 제일 작은 크기가 정해져 있어서 그이하로 줄어들지 않는 경우처럼요...
:
: 알려주시면 고맙겠습니다...
:
임펠리테리입니다.
폼을 일정 크기 이하로 줄이는 것을 막기 위해서는 폼에 들어오는 메시지 중 WM_GETMINMAXINFO 메시지를 가로채서 처리하면 됩니다. 이 메시지는 폼이 리사이즈될 때 호출되는데, 이 메시지의 LParam에 넘어오는 MINMAXINFO 구조체의 ptMinTrackSize에 최소 크기를 돌려주면 이 크기 이하로는 줄어들지 않습니다. 여기서는 메시지 핸들러를 이용해서 구현해보도록 하죠.
먼저 폼 클래스 선언의 마지막 } 를 닫기 직전에 다음과 같이 메시지핸들러를 만들어넣습니다.
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_GETMINMAXINFO, TWMGetMinMaxInfo, WMGetMinMaxInfo);
END_MESSAGE_MAP(TForm);
그런 후, 역시 폼 클래스의 멤버함수로(private가 좋습니다) 다음과 같이 실제 메시지핸들러 함수의 선언을 추가합니다.
void WMGetMinMaxInfo(TWMGetMinMaxInfo &msg);
마지막으로, 폼의 cpp 파일에 메시지핸들러의 실제 바디를 만듭니다.
void TForm1::WMGetMinMaxInfo(TWMGetMinMaxInfo &msg)
{
msg.MinMaxInfo->ptMinTrackSize = Point(200, 200);
}
이것으로 끝입니다. 여기서는 ptMinTrackSize를 200, 200으로 설정했으므로 200x200 크기 이하로는 폼이 줄어들지 않습니다.
이와 비슷하게, ptMaxTrackSize를 설정해주면 리사이즈해서 늘릴 수 있는 최대크기가 정해집니다. 최대화 버튼을 눌렀을 때의 크기를 설정하려면 ptMaxSize를 설정하면 되구요.
그럼 참고하시길...
|