原址:http://hi.baidu.com/kuliuheng/blog/item/d5cecd1cd8388d1834fa4145.html
这是一个困扰了我很久的问题,也许我是因为我没有认真的去想这个问题吧——当分割了单文档窗口之后,改变左子窗口大小总会出现一个滚动条,甚是奇怪!
就像这样:
CRect rect;
GetClientRect(&rect); // 获取当前客户区view大小
CSize size = GetTotalSize(); // 获取scroll view的总大小
rect.right = rect.left + size.cx; // 根据scroll view大小重新确定当前view大小
rect.bottom = rect.top + size.cy;
if (m_listBox != NULL)
{
m_listBox->MoveWindow(&rect, TRUE); // 将自定义的ListBox布满整个view区域
}
void CMessageListView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(&rect); // 获取当前客户区view大小
CSize size;
size.cx = rect.right - rect.left;
size.cy = rect.bottom - rect.top;
SetScrollSizes(MM_HIMETRIC, size); // 将CScrollView的大小设置为当前客户区大小
if (m_listBox != NULL)
{
m_listBox->MoveWindow(&rect, TRUE);
}
}
效果如下:
看,即使是左边frame缩小到这么小,也不会出现滚动条了。这个问题虽然不大,但是困扰了我很久,在网上竟然没有找到相关的文章,就连获取内部View 大小的方法,很少人用GetTotalSize这个方法,都说使用GetClientRect函数。这两者的区别我就不多说了,其实,只有在使用自定义的Form view 时才需要用到GetTotalSize这个函数(个人体会)。