首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

CSplitterWnd瓜分窗口运行时出错

2013-06-26 
CSplitterWnd分割窗口运行时出错BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContex

CSplitterWnd分割窗口运行时出错
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
return m_wndSplitter.Create(this,
2, 2,               // TODO: adjust the number of rows, columns
CSize(10, 10),      // TODO: adjust the minimum pane size
pContext);
}
这段代码把窗口分割成2行,2列,如果我想分成4行4列,就把上面的,2,2,改为,4,4了,可以编译通过,可是运行的时候就出错,请问如何解决,谢谢 mfc CSPliterWnd
[解决办法]
能开一个窗口,把窗口分成左右两部分,然后在每一部分里画个圈
这是VC的例子Viewex中的代码。
BOOL C3WaySplitterFrame::OnCreateClient(LPCREATESTRUCT lpcs,
  CCreateContext* pContext)
{
 // create a splitter with 1 row, 2 columns
 if (!m_wndSplitter.CreateStatic(this, 1, 2))
 {
  TRACE0("Failed to CreateStaticSplitter\n");
  return FALSE;
 }

 // add the first splitter pane - the default view in column 0
 if (!m_wndSplitter.CreateView(0, 0,
  pContext->m_pNewViewClass, CSize(200, 50), pContext))
 {
  TRACE0("Failed to create first pane\n");
  return FALSE;
 }

 // add the second splitter pane - which is a nested splitter with 2 rows
 if (!m_wndSplitter2.CreateStatic(
  &m_wndSplitter,     // our parent window is the first splitter
  2, 1,               // the new splitter is 2 rows, 1 column
  WS_CHILD 
[解决办法]
 WS_VISIBLE 
[解决办法]
 WS_BORDER,  // style, WS_BORDER is needed
  m_wndSplitter.IdFromRowCol(0, 1)
   // new splitter is in the first row, 2nd column of first splitter
    ))
 {
  TRACE0("Failed to create nested splitter\n");
  return FALSE;
 }

 // now create the two views inside the nested splitter
 int cyText = max(lpcs->cy - 70, 20);    // height of text pane

 if (!m_wndSplitter2.CreateView(0, 0,
  RUNTIME_CLASS(CTextView), CSize(0, cyText), pContext))
 {
  TRACE0("Failed to create second pane\n");
  return FALSE;
 }
 if (!m_wndSplitter2.CreateView(1, 0,
  RUNTIME_CLASS(CColorView), CSize(0, 0), pContext))


 {
  TRACE0("Failed to create third pane\n");
  return FALSE;
 }

 // it all worked, we now have two splitter windows which contain
 //  three different views
 return TRUE;


******************************************************
VS里面两侧的资源面板与属性面板是用的DockPane,不是用的Splitter。如果你用VS2008加SP1,或者VS2010的话,可能直接生成VS一样的框架。
追问
额,这个Frame重载OnCreateClient意义不大啊。。。其实我主要求CTextView之类的View的具体写法。
评论
[解决办法]
0
2013-02-20 21:36clever_wolf
[解决办法]
十四级
这是VC的例子VIEWEX代码完全按照您的要求。 
 BOOL C3WaySplitterFrame ::的OnCreateClient(LPCREATESTRUCT LPCS,
 CCreateContext * pContext)
 {
 / /创建一个分离器,有1行2列
(m_wndSplitter。 CreateStatic(这一点,1,2)){
 
 TRACE0(“到CreateStaticSplitter \ n”); 
返回FALSE; 

 
 / /添加第一个分离器窗格 - 列的默认视图0 
(m_wndSplitter.CreateView(0,0,
 pContext-> m_pNewViewClass,CSIZE(200,50),pContext)) {
 TRACE0(“未能创建第一个窗格\ n”); 
返回FALSE; 

 
 / /添加第二个分离器窗格 - 这是一个嵌套分离器(m_wndSplitter2.CreateStatic(
 m_wndSplitter,/ /?我们的父窗口的第一分2行
 
 2,1,/ /?新的分离器2行,1列
 WS_CHILD 
[解决办法]
 WS_VISIBLE 
[解决办法]
 WS_BORDER,/ /?的风格,WS_BORDER需要
 m_wndSplitter.IdFromRowCol(0,1)
 / /新的分离器是在第一行中,第2列的第一分
))
 {
 TRACE0(“无法创建嵌套的分离器\ n”); 
返回FALSE; 

  BR /> / /现在创建两个视图里面的嵌套分离器
诠释cyText = MAX(LPCS - > CY - 70,20); / /文本窗格的高度
 
如果(! m_wndSplitter2。CreateView的(0,0,
 RUNTIME_CLASS(CTextView)的,CSIZE(0,cyText),pContext)){
 
 TRACE0(“未能创建了第二个窗格\ n”); BR />返回FALSE;} 
 
(m_wndSplitter2.CreateView(1,0,
 RUNTIME_CLASS(CColorView)的,CSIZE(0,0),pContext))
 { 
 TRACE0(“无法创建第三个窗格\ n”); 
返回FALSE; 

 
 / /它的所有工作,我们现在有两个分割窗口包含
 / /三种不同的看法
返回TRUE; 

 
 ******************** ********************************** 
 VS两侧的面板资源的属性面板DockPane,不与分配器。如果您使用的是VS2008 SP1加或VS2010,它可以直接生成的VS的框架。

热点排行