青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

鐵觀音

C++編程寶典

   ::  ::  ::  ::  :: 管理 ::
  1 隨筆 :: 19 文章 :: 0 評論 :: 0 Trackbacks
簡 介】
  目前基于分割視圖的應用開發十分流行,分割視圖技術是在同一個框架窗口下同時顯示多個視圖的一項技術。運用分割視圖,可以在較短時間內給用戶更多的信息量,從而使得用戶界面更加的友好,增強了軟件的可操作性。本文提出一個分割視圖的通用創建框架。

目前基于分割視圖的應用開發十分流行,分割視圖技術是在同一個框架窗口下同時顯示多個視圖的一項技術。運用分割視圖,可以在較短時間內給用戶更多的信息量,從而使得用戶界面更加的友好,增強了軟件的可操作性。本文提出一個分割視圖的通用創建框架。  

  1.分割視圖創建框架

  分割視圖的創建大體上分為兩個步驟:其一是創建分割窗體;然后就是處理鼠標和鍵盤等消息。

  1) 創建分割窗體

  MFC提供分割窗體類CsplitterWnd,它提供了很多對于分割窗體操作的成員函數,每一個分割窗體都是一個CsplitterWnd的對象。本文提出的框架由于需要對定制的分割窗體進行擴充處理,所以首先從CsplitterWnd繼承一個子類CFixSplitterWnd,然后每個分割窗體是一個CfixSplitterWnd的對象,這樣以后只需要對CfixSplitterWnd進行改寫后就可以增強分割窗體的功能。(后面將提出這種改寫)

  創建分割窗體最重要的函數是主框架類的OnCreateClient函數,它將在主框架創建的時候調用,本文將創建一個如下顯示的分割窗體:

VC設計分割視圖通用創建框架
  

  則可以如下實現:  

  //成員變量聲明

  CFixSplitterWnd m_wndSplitterH; //用于橫向切割

  CFixSplitterWnd m_wndSplitterV; //用于縱向切割

  BOOL m_bCreateSplitter;  

  //分割窗體的實現

  BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)

  {

  //對整個主框架進行混合分割視圖

  BOOL bResult=m_wndSplitterV.CreateStatic(this,1,2);

  ASSERT(bResult);

  m_wndSplitterH.CreateStatic(&m_wndSplitterV,4,1,WS_CHILD   WS_VISIBLE,m_wndSplitterV.IdFromRowCol(0,1));

//創建各自子窗片的對應的視圖

  m_wndSplitterV.CreateView(0,0,RUNTIME_CLASS(CSceneView),CSize(600,600),pContext);

  m_wndSplitterH.CreateView(0,0,RUNTIME_CLASS(CPitchView),CSize(100,100),pContext);

  m_wndSplitterH.CreateView(1,0,RUNTIME_CLASS(CYawView),CSize(100,100),pContext);

  m_wndSplitterH.CreateView(2,0,RUNTIME_CLASS(CRollView),CSize(100,100),pContext);

  m_wndSplitterH.CreateView(3,0,RUNTIME_CLASS(CControlView),CSize(100,100),pContext);

  //設置窗格的初始化的大小

  m_wndSplitterV.SetRowInfo(0,IDEAL_RAWHEIGHT,0);

  m_bCreateSplitter=TRUE;

  //激活sceneview使得其可以接受命令消息

  m_wndSplitterV.SetActivePane(0,0,NULL);

  return bResult;

  }

  //主框架窗體大小發生變化,調節相應的窗體大小

  void CMainFrame::OnSize(UINT nType, int cx, int cy)

  {

  CMDIFrameWnd::OnSize(nType, cx, cy);

  CRect rect;

  GetClientRect(rect);

  if (m_bCreateSplitter)?
??????{

  m_wndSplitterV.SetColumnInfo(0,rect.Width() *3/4,10);

  m_wndSplitterV.SetColumnInfo(1,rect.Width() *1/4,10);

  m_wndSplitterH.SetRowInfo(0,rect.Height() /6,10);

  m_wndSplitterH.SetRowInfo(1,rect.Height() /6,10);

  m_wndSplitterH.SetRowInfo(2,rect.Height() /6,10);

  m_wndSplitterH.SetRowInfo(3,rect.Height()/2,10);

  }

  m_wndSplitterV.RecalcLayout();

  m_wndSplitterH.RecalcLayout();

  }

  注意m_wndSplitterH.CreateView 中的第二個參數,這個參數將分割窗體和相應的視圖類相對應。

  通過上述的程序代碼即可創建圖1所示的分割窗體,那么由于這里每個分割窗體都是一個CfixSplitterWnd對象,所以可以通過改寫CfixSplitterWnd類的虛函數或消息處理函數來完成自己特定的應用實現。(注意,如果需要對定制有特定屬性的分割窗體,一定要派生自己的分割窗體類而不能是MFC的CsplitterWnd類)這里我們需要分割窗體不能隨鼠標拖動而改變其大小,即所有窗格的大小都是一定的,不能在運行時刻改變。所以必須在CfixSplitterWnd類的實現中加入如下代碼:  

  void CFixSplitterWnd::OnMouseMove(UINT nFlags, CPoint point)

  {

  CWnd::OnMouseMove(nFlags, point); //防止鼠標出現拖動狀

  // CSplitterWnd::OnMouseMove(nFlags, point); //鼠標會在窗體邊界出現拖動狀

  }

  至此,分割窗體已經創建完畢,下面需要在分割窗體里處理消息。

  2) 分割窗體處理消息

  在分割窗體里處理消息和一般的文檔視圖模型處理消息大致一樣,但它也有其特殊之處。具體來說,由于各個分割窗體已經與具體的視圖類相聯系了,所以在需要處理各個分割窗體中的消息時,可以直接到相應的視圖類中進行處理;另外,多視圖之間的切換會導致目標焦點之間的變更,這樣會影響菜單中與視圖有關的命令的執行。比如在圖1中所示的分割窗體中,有一個“開始”命令必須是焦點在CsceneView視圖上時才能執行,否則就應該讓該命令不能執行(即該菜單呈現灰色),則實現時可以首先對鼠標進行點擊測試,判斷是否在CsceneView視圖范圍內,如果是的話就允許執行,否則就不允許執行。

  2.結論

  通過本文提出的分割視圖創建框架,可以滿足對視圖進行復雜控制的需求,希望本文可以給大家一個啟發,從而能夠創建更為完美的分割視圖應用程序。
posted on 2006-09-01 10:08 鐵觀音 閱讀(220) 評論(0)  編輯 收藏 引用 所屬分類: VC界面控件類
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲日本在线观看| 欧美日韩国产综合网| 欧美一区二区三区视频免费| 中日韩高清电影网| 日韩一二在线观看| 亚洲调教视频在线观看| 亚洲午夜在线观看| 久久爱另类一区二区小说| 久久久久久久久久看片| 欧美aⅴ一区二区三区视频| 欧美国产日韩一区二区在线观看| 亚洲电影专区| 这里只有精品在线播放| 亚洲男同1069视频| 久久久久久久综合| 欧美精品观看| 久久久www免费人成黑人精品 | 国产有码在线一区二区视频| 国产在线精品自拍| 亚洲国产精品久久| 亚洲欧美另类在线观看| 久久躁日日躁aaaaxxxx| 亚洲国产精品成人一区二区| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲精品欧洲精品| 亚洲小说春色综合另类电影| 欧美一区二区三区在线视频| 欧美成黄导航| 亚洲午夜精品福利| 欧美1区2区| 国产三级欧美三级日产三级99| 亚洲国产精品一区二区三区| 午夜欧美精品| 亚洲精品国产精品国自产在线| 亚洲欧洲av一区二区| 欧美大片18| 激情六月婷婷综合| 亚洲影院污污.| 亚洲国产欧美久久| 久久www成人_看片免费不卡| 欧美性一区二区| 亚洲黄色大片| 久久久之久亚州精品露出| 99riav久久精品riav| 久久综合久久美利坚合众国| 国产午夜精品麻豆| 亚洲中字黄色| 日韩午夜电影| 欧美黑人多人双交| 亚洲国产91精品在线观看| 欧美在线不卡视频| 99国产精品一区| 欧美激情亚洲精品| 亚洲激情综合| 欧美国产日韩a欧美在线观看| 久久精品成人一区二区三区| 国产精品久久久久影院亚瑟| 日韩午夜精品| 亚洲精品乱码久久久久久蜜桃91 | 欧美在线视频一区二区| 99精品视频一区| 欧美日韩999| a91a精品视频在线观看| 亚洲国产欧美一区| 狂野欧美激情性xxxx欧美| 性xx色xx综合久久久xx| 在线亚洲激情| 欧美性视频网站| 亚洲图片欧洲图片av| 日韩网站在线观看| 欧美午夜视频在线| 亚洲一区二区三区免费在线观看| 亚洲美女少妇无套啪啪呻吟| 欧美激情一区二区三区蜜桃视频| 亚洲精品免费在线| 亚洲一区二区三区在线观看视频 | 亚洲国产综合视频在线观看 | 国产精品麻豆欧美日韩ww| 中国成人黄色视屏| 亚洲性av在线| 狠狠爱综合网| 亚洲国产1区| 欧美日韩一区二区国产| 午夜视频一区二区| 久久精品国产久精国产爱| 亚洲第一视频网站| 亚洲国内在线| 国产欧美精品xxxx另类| 老司机午夜精品视频| 欧美福利视频| 欧美一区二区三区免费视| 久久激情五月婷婷| 亚洲精品乱码视频| 亚洲一区二区三区视频播放| 玉米视频成人免费看| 亚洲毛片在线观看.| 国产欧美精品| 亚洲黄色成人| 国产亚洲一区二区三区在线观看 | 亚洲视频一区二区在线观看| 国产综合久久久久影院| 亚洲国产精品毛片| 国产精品综合视频| 亚洲东热激情| 国产精品一区二区久激情瑜伽| 美女精品自拍一二三四| 欧美日本一区二区三区| 久久精品免费看| 欧美日韩一级片在线观看| 美女主播精品视频一二三四| 欧美视频免费在线观看| 欧美丰满高潮xxxx喷水动漫| 国产精品免费在线| 欧美大胆成人| 国产日韩欧美中文在线播放| 亚洲人线精品午夜| 影音先锋另类| 欧美在线精品一区| 亚洲欧美日韩在线不卡| 欧美激情亚洲| 亚洲第一主播视频| 国模大胆一区二区三区| 亚洲人成网站在线观看播放| 亚洲精选久久| 亚洲国产婷婷香蕉久久久久久99| 午夜久久tv| 亚洲欧美中文日韩v在线观看| 免费欧美日韩| 久久亚洲国产精品一区二区| 国产精品视频不卡| 夜色激情一区二区| 亚洲剧情一区二区| 欧美超级免费视 在线| 裸体一区二区| 亚洲电影一级黄| 久久视频一区二区| 免费看亚洲片| 影音先锋成人资源站| 久久精品国产亚洲5555| 久久精品一区| 国产一区二区三区成人欧美日韩在线观看 | 亚洲欧美日韩视频二区| 欧美一级欧美一级在线播放| 国产精品无码永久免费888| 亚洲一区欧美| 久久免费高清视频| 亚洲国产精品第一区二区| 久久这里有精品15一区二区三区| 欧美福利在线观看| 一本到高清视频免费精品| 欧美亚洲成人网| 久久久久久久国产| 91久久精品一区二区别| 亚洲午夜成aⅴ人片| 国产欧美一区二区精品仙草咪| 欧美在线观看视频在线| 欧美77777| 亚洲欧美日韩一区二区| 国产一区二区三区黄| 老司机aⅴ在线精品导航| 亚洲国产欧美在线人成| 亚洲欧美春色| 国内外成人免费激情在线视频 | 亚洲国产精品欧美一二99| 国产精品国产自产拍高清av王其 | 欧美福利电影在线观看| 欧美日韩精品一区二区| 亚洲欧美国产三级| 久久成人免费| 黑丝一区二区三区| 欧美日韩精品伦理作品在线免费观看 | 欧美视频免费在线观看| 亚洲综合日本| 久久久久久久尹人综合网亚洲| 欧美午夜一区| 亚洲日本aⅴ片在线观看香蕉| 欧美剧在线观看| 欧美成年人网站| 午夜日韩福利| 精品成人国产在线观看男人呻吟| 久久琪琪电影院| 美女日韩欧美| 亚洲欧美亚洲| 国产一区二区三区免费在线观看| 久久精品欧美日韩| 激情久久久久久久久久久久久久久久 | 亚洲精品一区二区三区不| 欧美色图一区二区三区| 午夜一区不卡| 欧美在线免费看| 亚洲一二三区在线观看| 国产字幕视频一区二区| 欧美国产丝袜视频| 久久影视三级福利片| 夜色激情一区二区| 老司机一区二区| 亚洲综合999| 一区二区激情小说| 狠狠色综合网| 国产精品久久久对白|