程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 分割窗口後如何限制分割條的移動范圍

分割窗口後如何限制分割條的移動范圍

編輯:關於VC++

做一個項目,把一個單文檔的窗口分割成左右兩列,同時還需要設置左邊窗口的最小尺寸。

找了很多資料,都是針對對話框或者文檔的,試了OnSizing和GetMinMaxInfo,結果對分割窗口無效。

後來看到分割窗口的例子有鎖定分割條的代碼,跟同事討論了一下,來了靈感。下面是解決辦法,其實很簡單的,

可能以前有人做過吧,不過我在網上沒有搜索到,所以把我的做法寫出來跟大家分享。

一、新建一個類CMySplitter,基類為CSplitterWnd

二、重載該類的OnMouseMove函數:

void CMySplitter::OnMouseMove(UINT nFlags, CPoint point)
{
  // 限制切分條的運動范圍。
  if(point.x<228||point.x>600)
  {
    CWnd::OnMouseMove(nFlags, point);
  }
  else
  {
    CSplitterWnd::OnMouseMove(nFlags, point);
  }
}

三、 然後就可以跟一般的窗口分割那樣去做了,if(point.x<228||point.x>600)這裡的范圍可以隨你去設置了 ^_^,夠簡單吧。

四、切分窗口

切分窗口就不用講那麼詳細了,在MaiFram.h建立切分條對象:

protected:
CMySplitter m_wndSplitter; //切分窗口對象
//在MaiFram.cpp中實現窗口切分:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)
{
  // 創建拆分器窗口
  if (!m_wndSplitter.CreateStatic(this, 1, 2))
    return FALSE;
  if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(228, 100), pContext) ||
    !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDataEditView), CSize(100, 100), pContext))
  {
    m_wndSplitter.DestroyWindow();
    return FALSE;
  }
  return TRUE;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved