MFC程序员的WTL指南(8)分隔窗口
2006-07-22 22:03:11 来源:WEB开发网核心提示: LRESULT CMainFrame::OnCreate ( LPCREATESTRUCT lpcs ){//...// Create the splitter windowconst DWORD dwSplitStyle = WS_CHILD | WS_VISIBLE | WS_CLIP
LRESULT CMainFrame::OnCreate ( LPCREATESTRUCT lpcs )
{
//...
// Create the splitter window
const DWORD dwSplitStyle = WS_CHILD | WS_VISIBLE |
WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
dwSplitExStyle = WS_EX_CLIENTEDGE;
m_wndVertSplit.Create ( *this, rcDefault, NULL,
dwSplitStyle, dwSplitExStyle );
// Set the splitter as the client area window, and resize
// the splitter to match the frame size.
m_hWndClient = m_wndVertSplit;
UpdateLayout();
// Position the splitter bar.
m_wndVertSplit.SetSplitterPos ( 200 );
return 0;
}
需要注意的是在设置分隔窗口的位置之前要先设置m_hWndClient并调用CFrameWindowImpl::UpdateLayout()函数,UpdateLayout()将分隔窗口设置为初始时的大小。如果跳过这一步,分隔窗口的大小将不确定,可能小于200个象素点的宽度,最终导致SetSplitterPos()出现意想不到的结果。还有一种不调用UpdateLayout()函数的方,就是先得到框架窗口的客户区坐标,然后使用这个客户区坐标替换rcDefault坐标创建分隔窗口。使用这种方式创建的分隔窗口一开始就在正确的初始位置上,随后对位置调整的函数(例如 SetSplitterPos())都可以正常工作。
现在运行我们的程序就可以看到分隔条,即使没有创建任何窗格窗口它仍具有基本的行为。你可以拖动分隔条,用鼠标双击分隔条使其移到窗口的中间位置。
为了演示分隔窗口的不同使用方法,我将使用一个CListViewCtrl派生类和一个简单的CRichEditCtrl,下面是从CClipSpyListCtrl类摘录的代码,我们在左边的窗格使用这个类:
更多精彩
赞助商链接