Re-sizing CFormView’s control

前一篇 Views in a Sizeable Docking Control Bar 提到要怎麼在 ControlBar 裡面放 CFormView,但是當窗口大小改變時裡面的 CEditCtrl 和 CComboBox 並沒有跟著一起縮放,所以這篇就來紀錄一下要怎麼修改。

1. 在 CProgMemView.h 中加入

afx_msg void OnSize(UINT nType, int cx, int cy);

2. 在 CProgMemView.cpp 中加入

BEGIN_MESSAGE_MAP(CProgMemView, CFormView)
	ON_WM_SIZE()
END_MESSAGE_MAP()

3. 實作OnSize(),m_cePM 和 m_cbPM 是 CProgMemView 中的兩個控制項

CFormView::OnSize(nType, cx, cy);
	CSize sizeTotal;
	sizeTotal.cx = cx;
	sizeTotal.cy = cy;
	SetScrollSizes(MM_TEXT, sizeTotal);

	if (m_cePM.m_hWnd)
	{
		CRect rect;
		m_cePM.GetWindowRect(rect);
		ScreenToClient(rect);
		rect.right = cx - rect.left;
		rect.bottom = cy - rect.left;
		m_cePM.MoveWindow(rect);
	}

	if (m_cbPM.m_hWnd)
	{
		CRect rect;
		m_cbPM.GetWindowRect(rect);
		ScreenToClient(rect);
		rect.right = cx - rect.left;
		rect.bottom = cy - rect.left;
		m_cbPM.MoveWindow(rect);
	}

這樣就完成了~下圖是成果(y)

2015012001 2015012002

[參考資料]

1. MFC 窗口自动填充 消息Onsize()