WEB开发网
开发学院软件开发VC MFC程序员的WTL指南(8)分隔窗口 阅读

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类摘录的代码,我们在左边的窗格使用这个类:

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:MFC 程序员 WTL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接