フォームのズーム方法

1948 ワード

まず、ウィンドウがドラッグしてサイズを変更できるかどうかはborderのプロパティによって決まります.
borderがResizingでウィンドウがドラッグしてサイズを変更できる場合のみ、他のプロパティではできません.
例:
通常、メインフォームにはTabCtrlコントロールがあり、TabCtrlでロードされたサブウィンドウがあり、サブウィンドウにはListCtrlコントロールとButtonがあります.
メインフォームをズームする場合、TabCtrlと現在のサブウィンドウを同期して拡大し、サブウィンドウがズームされると、上のListCtrl個のButtonコントロールもサイズと位置を調整します.
方法は次のとおりです.
ステップ1:メインウィンドウのWM_をリロードするSIZE法はTabCtrlとそのサブウィンドウのスケーリング結果を処理するために用いられる.注意WM_を使用しないでくださいSIZING、そうでないとスケール処理が点滅します.
// 
void CAppConfigDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	// TODO:   

	CRect rect;
	GetClientRect(&rect);

	//TabCtrl 
	if (m_TabCtrl.GetSafeHwnd())
	{
		m_TabCtrl.MoveWindow(0, 0, rect.Width(), rect.Height());
	}

	// 
	if (m_clsUploadAPK.GetSafeHwnd())
	{
		rect.left += 4;
		rect.top += 30;
		rect.right -= 3;
		rect.bottom -= 3;
		m_clsUploadAPK.MoveWindow(&rect);
	}
}

ステップ2:メインウィンドウWM_をリロードするSIZINGメソッドは、フォームの最小サイズをロックするために使用されます.これは、スケール中に常に制御する必要があります.最小サイズを制御したくない場合は、この手順を無視します.
// 
void CAppConfigDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
	CDialogEx::OnSizing(fwSide, pRect);

	// TODO:   

	if (pRect->right - pRect->left < m_nMinWidth)
	{
		pRect->right = pRect->left + m_nMinWidth;
	}
	if (pRect->bottom - pRect->top < m_nMinHeight)
	{
		pRect->bottom = pRect->top + m_nMinHeight;
	}
}

ステップ3:サブウィンドウのWM_をリロードするSIZEメソッドは、サブウィンドウ上のListCtrlとButtonの位置調整を処理する
// 
void CUploadAPK::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	// TODO:   

	// ListCtrl
	if (m_ctrApkList.GetSafeHwnd())
	{
		m_ctrApkList.MoveWindow(5, 47, cx - 12, cy - 85);
	}

	// 
	CRect rect;
	((CButton*)GetDlgItem(IDC_Upload))->GetClientRect(&rect);
	((CButton*)GetDlgItem(IDC_Upload))->MoveWindow(cx - rect.Width() - 10, cy - rect.Height() - 10, rect.Width(), rect.Height());
}