欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
轉 使用CSplitterWnd分割窗口

隨筆- 4 文章- 0 評論- 0 

轉 使用CSplitterWnd分割窗口

原帖:http://luwenjie0904.blog.163.com/blog/static/9656154120113891022326/

 

一、基本的CSplitterWnd的使用

 


1. 在CMainFrame中添加一個(gè)CSplitterWnd成員:
 CSplitterWnd m_splitterwnd1;


2. 基于CView創(chuàng )建兩個(gè)新的視圖類(lèi),CViewLeft和CViewRight,一個(gè)用于在左邊顯示,一個(gè)用于在右邊顯示。


3. 重載CMainFrame的OnCreateClient函數,
在并其中調用CSplitterWndr的CreateStatic函數創(chuàng )建該分割窗口,CreateView函數創(chuàng )建左右兩個(gè)視圖,SetColumnInfo設定分割窗口的列的寬度:

 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
 {
  // TODO: 在此添加專(zhuān)用代碼和/或調用基類(lèi)
  m_mysplitter1.CreateStatic(this, 1, 2);    //創(chuàng )建一個(gè)一行二列的分割窗口
  m_mysplitter1.CreateView(0, 0, RUNTIME_CLASS(CViewLeft), CSize(0, 0),
   pContext);   //建立第0行第0列的視圖
 
 m_mysplitter1.CreateView(0, 1, RUNTIME_CLASS(CViewRight), CSize(0, 0),
   pContext);   //建立第0行第1列的視圖

  m_mysplitter1.SetColumnInfo(0, 250, 10);    //設定某列的寬度,這里表示設定第0列的理想寬度為250像素,最小寬度為10像素(什么是最小寬度?沒(méi)弄明白)

  return TRUE;

  //return CFrameWnd::OnCreateClient(lpcs, pContext);
 }
 
 運行后就可以看到生成了分割為左右兩個(gè)視圖的窗口。

 

二、為分割窗添加一些自己需要的功能
 從系統的CSplitterWnd類(lèi)派生一個(gè)新類(lèi)。
 在類(lèi)視圖中右鍵,選擇“添加”->“類(lèi)”,在彈出窗口中選擇MFC類(lèi),輸入新類(lèi)的名字CMySplitter,基類(lèi)選擇為CWnd(這里基類(lèi)的選項里面沒(méi)有CSplitterWnd,所以要先選擇Cwnd)。然后把生成的MySplitter.h和MySplitter.cpp里面的三個(gè)地方的“Cwnd”改成“CSplitterWnd”。
 MySplitter.h中:
  class CMySplitter : public CSplitterWnd
 Mysplitter.cpp中:
  IMPLEMENT_DYNAMIC(CMySplitter, CSplitterWnd)
  BEGIN_MESSAGE_MAP(CMySplitter, CSplitterWnd)
  
1. 雙擊分隔欄展開(kāi)或者收起左邊的一欄
 重載OnLButtonDblClk函數:
 void CMySplitterWnd::OnLButtonDblClk(UINT nFlags, CPoint point)
 {
  // TODO: 在此添加消息處理程序代碼和/或調用默認值

  //CSplitterWnd::OnLButtonDblClk(nFlags, point);
  int left, min;
  GetColumnInfo(0, left, min);    //得到第0欄(即左邊的一欄)的寬度
 
 if(left == 0 || left == min)     //如果當前已經(jīng)是收起的狀態(tài)
 
 {
   SetColumnInfo(0, 250, 10);   //重新設置左邊一欄的寬度,這里設置為250,即展開(kāi)
 
 }
  else
  {
   SetColumnInfo(0, 0, 10);    //重新設置左邊一欄的寬度,這里設置為0,即收起
  }
  RecalcLayout();         //重新構建窗口布局
 
}
 
2. 設置分隔欄的寬度
 在CMySplitter的構造函數中(這里是把寬度設為11像素):
 m_cxSplitterGap = 11;
 m_cxSplitter = 11;   
 幾個(gè)相關(guān)變量的意義:
 //int   m_cxSplitter,   m_cySplitter;                     //   size   of   splitter   bar  
 //int   m_cxBorderShare,   m_cyBorderShare;        //   space   on   either   side   of   splitter  
 //int   m_cxSplitterGap,   m_cySplitterGap;         //   amount   of   space   between   panes  
 //int   m_cxBorder,   m_cyBorder;                            //   borders   in   client   area    
 

3. 禁止拖動(dòng)分隔欄的位置
(1)重載OnLButtonDown函數,改成什么都不做:
 void CMySplitter::OnLButtonDown(UINT nFlags, CPoint point)
 {
  // TODO: 在此添加消息處理程序代碼和/或調用默認值  
  //CSplitterWnd::OnLButtonDown(nFlags, point);

 }
(2)重載OnMouseMove函數,也改成什么都不做:
 void CMySplitter::OnMouseMove(UINT nFlags, CPoint point)
 {
  // TODO: 在此添加消息處理程序代碼和/或調用默認值

  //CSplitterWnd::OnMouseMove(nFlags, point);  
 }

 

 

 

 

4. 在分隔欄上添加一個(gè)”按鈕“
(1)在資源視圖中導入兩張位圖資源,分另是一個(gè)向左的箭頭和一個(gè)向右的箭頭,圖片大小為(6*31)像素:IDB_BITMAP_LEFT,IDB_BITMAP_RIGHT
(2)為CMySplitter類(lèi)添加顯示該“按鈕”相關(guān)的成員:
 CBitmap m_bitmapleft;    //左箭頭位圖
 CBitmap m_bitmapright;    //右箭頭位圖
 CDC m_dcMem;       //
 CRect m_rectImgBtn;    //顯示該“按鈕”的矩形區域
(3)添加一個(gè)成員函數得到顯示該“按鈕”的矩形區域:
 //這個(gè)函數用來(lái)得到顯示該按鈕的矩形區域
 void CMySplitter::GetImgBtnRect(void)
 {
  CRect r;
  int left, min;
  GetWindowRect(&r);
  GetColumnInfo(0, left, min);
  m_rectImgBtn.SetRect(left+2+2, r.Height()/2-16,
    left+2+8, r.Height()/2+15); //這里這么寫(xiě)是根據WindowsXP顯示的分隔欄來(lái)確定的,要用繪圖軟件測一下
  if(left == 250)    //這里用到了正常顯示下的左欄是250像素寬
  {
   if(m_dcMem != NULL)
   {
    m_dcMem.SelectObject(m_bitmapleft);    //這個(gè)DC選擇左箭頭的圖片
   }
  }
  else
  {
   if(m_dcMem != NULL)
   {
    m_dcMem.SelectObject(m_bitmapright);    //這個(gè)DC選擇右箭頭的圖片
   }
  }
 }
(4)重載OnDrawSplitter函數,畫(huà)出該按鈕:
 void CMySplitter::OnDrawSplitter(CDC* pDC, ESplitType nType,
         const CRect& rect)
 {
  // TODO: 在此添加專(zhuān)用代碼和/或調用基類(lèi)
  CSplitterWnd::OnDrawSplitter(pDC, nType, rect);   //本來(lái)的畫(huà)分隔欄

  if(pDC != NULL)
  {
   if(m_dcMem == NULL)
   {
    m_dcMem.CreateCompatibleDC(NULL);      //CreateCompatibleDC參數為NULL表示創(chuàng )建一個(gè)與當前顯示器兼容的DC
   }
   GetImgBtnRect();
   pDC->BitBlt(m_rectImgBtn.left, m_rectImgBtn.top,
    m_rectImgBtn.Width(), m_rectImgBtn.Height(), 
    &m_dcMem, 0, 0, SRCCOPY);         //從m_dcMem中把圖片復制到pDC中并畫(huà)出來(lái)(大概是這個(gè)意思)
   }
  }
 }
(5)重載OnLButtonUp函數,使得點(diǎn)擊該“按鈕”時(shí)可以收起或者展開(kāi)左欄
 void CMySplitter::OnLButtonUp(UINT nFlags, CPoint point)
 {
  // TODO: 在此添加消息處理程序代碼和/或調用默認值
  GetImgBtnRect();
  if(m_rectImgBtn.PtInRect(point))   //如果鼠標當前是在“按鈕”區域內
  {
   //這里判斷一下左欄是否收起了,如果是,隱藏左欄;不是則顯示左欄
   //通過(guò)GetColumnInfo和SetColumnInfo

  }
  else
  {
   CSplitterWnd::OnLButtonUp(nFlags, point);
  }
 }
(6)重載OnMouseMove函數,當鼠標移動(dòng)到“按鈕”上時(shí),把鼠標形狀變成手形
 void CMySplitter::OnMouseMove(UINT nFlags, CPoint point)
 {
  // TODO: 在此添加消息處理程序代碼和/或調用默認值
  GetImgBtnRect();
  if(m_rectImgBtn.PtInRect(point))
  {
   ::SetCursor(LoadCursor(NULL, IDC_HAND));
  }
  else
  {
   ::SetCursor(LoadCursor(NULL, IDC_ARROW));
  }
 }

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
CSplitterWnd技巧
onChar()
如何在MFC單文檔中創(chuàng )建多視圖
VC++之菜單之右鍵彈出菜單
MFC靜態(tài)分割視圖窗口,視圖切換,分割欄固定
如何給button等按鈕和控件加背景色或者圖片?還有dialog如何增加背景色和圖片背景,...
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久