在应用中,有时需要将FORMVIEW中的有些控件设置为自动适应窗口大小变化。
例如CListCtrl这样的控件。有人使用MoveWindow(),而我更喜欢使用SetWindowPos,因我们遇到的问题,更多是只想改变控件的cx,cy(控件大小),不想改变其x,y(坐标位置)。
class CListCtrlEx : public CListCtrl
{
DECLARE_DYNAMIC(CListCtrlEx)
public:
CListCtrlEx();
virtual ~CListCtrlEx();
void AutoSize(CWnd* pParent,int cx,int cy)
{
if(GetSafeHwnd() != NULL)
{
int v = ::GetSystemMetrics(SM_CXVSCROLL);
int h = ::GetSystemMetrics(SM_CXHSCROLL);
CRect rect;
GetWindowRect(&rect);
pParent->ScreenToClient(&rect);
SetWindowPos(&wndBottom,0,0,cx - h ,cy - v - rect.top,SWP_NOMOVE);
}
}
protected:
DECLARE_MESSAGE_MAP()
};
//使用
void CFormViewEx::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
if(m_list.GetSafeHwnd() != NULL)
{
m_list.AutoSize(this,cx,cy);
}
}