在应用中,有时需要将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);
}
}
本文详细介绍了如何在C++应用中使用SetWindowPos函数来实现CListCtrl等控件的自动适应窗口大小变化,避免了使用MoveWindow带来的问题。通过示例代码展示了如何在类中封装此功能。
1万+

被折叠的 条评论
为什么被折叠?



