最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ CTreeview的checkbox使用方法

 更新時間:2015年06月29日 12:38:25   投稿:hebedich  
這篇文章主要介紹了C++ CTreeview的checkbox使用方法的相關(guān)資料,需要的朋友可以參考下

1. 消息事件

   (1)鼠標(biāo)點擊當(dāng)前ITEM的CHECKBOX:引發(fā)NM_CLICK事件并傳遞TVHT_ONITEMSTATEICON。
   (2)鼠標(biāo)點擊當(dāng)前ITEM的TEXT:引發(fā)NM_CLICK事件。
   (3)鼠標(biāo)點擊新ITEM的CHECKBOX:引發(fā)TVN_SELCHANGED事件、NM_CLICK事件并傳遞TVHT_ONITEMSTATEICON。
   (4)鼠標(biāo)點擊新ITEM的TEXT:引發(fā)NM_CLICK事件、TVN_SELCHANGED事件。

2. 消息事件總結(jié)

   點擊ITEM會引發(fā)NM_CLICK事件。若點擊CHECKBOX則傳遞TVHT_ONITEMSTATEICON。
   因此可不處理TVN_SELCHANGED事件而只處理NM_CLICK事件。

3. 消息處理注意事項

   (1)點擊CHECKBOX后會自動更新CheckBox的狀態(tài),因此在處理代碼中不需要使用SetCheck函數(shù)設(shè)置狀態(tài),而GetCheck函數(shù)返回也是其原始狀態(tài)。
   (2)點擊新CHECKBOX后不會自動將對應(yīng)的ITEM設(shè)置為選擇狀態(tài),需要使用SelectItem函數(shù)進行設(shè)置。

4. 使用方法

   (1)若傳遞TVHT_ONITEMSTATEICON
          獲取選擇ITEM的狀態(tài)并取反
              若有子項則所有子項設(shè)置為一致
              若沒有子項則
                  若當(dāng)前狀態(tài)為TRUE則設(shè)置父項為TRUE;否則遍歷所有兄弟項,若全為FALSE則設(shè)置父項為FALSE。
         若選擇了新ITEM則設(shè)置新ITEM為選擇項
   (2)若未傳遞TVHT_ONITEMSTATEICON
          設(shè)置更新ITEM狀態(tài),獲取選擇ITEM的狀態(tài)
              若有子項則所有子項設(shè)置為一致
              若沒有子項則
                  若當(dāng)前狀態(tài)為TRUE則設(shè)置父項為TRUE;否則遍歷所有兄弟項,若全為FALSE則設(shè)置父項為FALSE。

5. 響應(yīng)NM_CLICK事件的函數(shù)代碼

void CTestTimerDlg::OnClickTree(NMHDR* pNMHDR, LRESULT* pResult)
{
  // TODO: Add your control notification handler code here
  CPoint point;
  UINT uFlag;                 //接收有關(guān)點擊測試的信息的整數(shù)
  HTREEITEM hTree;
  BOOL bCheck;
  GetCursorPos(&point);            //獲取屏幕鼠標(biāo)坐標(biāo)
  m_TreeCtrl.ScreenToClient(&point);      //轉(zhuǎn)化成客戶坐標(biāo)
  hTree = m_TreeCtrl.HitTest(point,&uFlag);  //返回與CtreeTtrl關(guān)聯(lián)的光標(biāo)的當(dāng)前位置和句柄
  if((TVHT_NOWHERE & uFlag))
  {
    return;
  }
  if (hTree && (TVHT_ONITEMSTATEICON & uFlag)) //點中復(fù)選框
  {
    m_TreeCtrl.SelectItem(hTree);
    CString temp = m_TreeCtrl.GetItemText(hTree) + "\r\n";
    TRACE(temp);
    bCheck = m_TreeCtrl.GetCheck(hTree);   //獲取當(dāng)前復(fù)選狀態(tài)
    SetChildCheck(hTree,!bCheck);       //設(shè)置子項復(fù)選狀態(tài)
    SetParentCheck(hTree, bCheck);       //設(shè)置父項復(fù)選狀態(tài)
  }
  *pResult = 0;
}

void CTestTimerDlg::SetChildCheck(HTREEITEM hTree,BOOL bCheck)
{
  m_TreeCtrl.Expand(hTree,TVE_EXPAND);
  hTree = m_TreeCtrl.GetChildItem(hTree); //獲取子項句柄
  while (hTree)
  {
    m_TreeCtrl.SetCheck(hTree, bCheck);   
    SetChildCheck(hTree,bCheck);      //遞歸調(diào)用
    hTree = m_TreeCtrl.GetNextSiblingItem(hTree);  //獲取兄弟的句柄
  }
}

void CTestTimerDlg::SetParentCheck(HTREEITEM hTree,BOOL bCheck)
{
  HTREEITEM hParent = m_TreeCtrl.GetParentItem(hTree);
  if (hParent)
  {
    HTREEITEM hChild = m_TreeCtrl.GetChildItem(hParent);
    while (hChild)
    {
      if (hChild == hTree)
      {
        hChild = m_TreeCtrl.GetNextSiblingItem(hChild);
        continue;
      }
      BOOL bflag = m_TreeCtrl.GetCheck(hChild);
      if (bCheck == bflag)         //判斷是否還有兄弟項被選擇
      {
        return;
      }
      hChild = m_TreeCtrl.GetNextSiblingItem(hChild);
    }
    m_TreeCtrl.SetCheck(hParent,!bCheck);
    SetParentCheck(hParent,bCheck);       //設(shè)置父項的狀態(tài)
  }

相關(guān)文章

  • C語言實現(xiàn)動態(tài)順序表詳解

    C語言實現(xiàn)動態(tài)順序表詳解

    這篇文章主要介紹了C語言實現(xiàn)動態(tài)順序表的實現(xiàn)代碼的相關(guān)資料,動態(tài)順序表在內(nèi)存中開辟一塊空間,可以隨我們數(shù)據(jù)數(shù)量的增多來擴容,需要的朋友可以參考下
    2021-08-08
  • C++ 異常的詳細(xì)介紹

    C++ 異常的詳細(xì)介紹

    這篇文章主要介紹了C++ 異常的詳細(xì)介紹的相關(guān)資料,希望通過本文大家能夠掌握C++異常的使用方法,需要的朋友可以參考下
    2017-09-09
  • 仿現(xiàn)代C++智能指針實現(xiàn)引用計數(shù)

    仿現(xiàn)代C++智能指針實現(xiàn)引用計數(shù)

    這篇文章主要為大家詳細(xì)介紹了如何仿現(xiàn)代C++智能指針實現(xiàn)引用計數(shù),文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以了解下
    2024-03-03
  • C++中std::vector的具體使用

    C++中std::vector的具體使用

    C++標(biāo)準(zhǔn)庫中的std::vector是一種動態(tài)數(shù)組容器,適用于算法競賽中的動態(tài)數(shù)據(jù)存儲、數(shù)組擴展和模擬棧/二維數(shù)組等場景,本文就來介紹一下,感興趣的可以了解一下
    2025-02-02
  • C++計算圖任意兩點間的所有路徑

    C++計算圖任意兩點間的所有路徑

    這篇文章主要為大家詳細(xì)介紹了C++求圖任意兩點間的所有路徑 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C++ STL_vector 迭代器失效問題的解決方法

    C++ STL_vector 迭代器失效問題的解決方法

    迭代器的主要作用就是讓算法能夠不用關(guān)心底層數(shù)據(jù)結(jié)構(gòu),其底層實際就是一個指針,或者是對指針進行了封裝,迭代器失效,實際就是迭代器底層對應(yīng)指針?biāo)赶虻目臻g被銷毀了,對迭代器失效我們了解了,那么現(xiàn)在我們就分析,在vector中哪些操作會導(dǎo)致迭代器失效
    2023-08-08
  • C語言鏈表實現(xiàn)貪吃蛇小游戲

    C語言鏈表實現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • opencv配置的完整步驟(win10+VS2015+OpenCV3.1.0)

    opencv配置的完整步驟(win10+VS2015+OpenCV3.1.0)

    OpenCV是計算機視覺中經(jīng)典的專用庫,其支持多語言、跨平臺,功能強大,這篇文章主要給大家介紹了關(guān)于opencv配置(win10+VS2015+OpenCV3.1.0)的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • Linux下動靜態(tài)庫的打包與使用指南(C/C++)

    Linux下動靜態(tài)庫的打包與使用指南(C/C++)

    c++是面向?qū)ο蟮木幊陶Z言,比較方便實現(xiàn)某些第三方庫,比如翻譯其他面向?qū)ο笳Z言的代碼,比c語言要方便的多,下面這篇文章主要給大家介紹了關(guān)于Linux下C/C++動靜態(tài)庫的打包與使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • C++的靜態(tài)聯(lián)編和動態(tài)聯(lián)編

    C++的靜態(tài)聯(lián)編和動態(tài)聯(lián)編

    本文闡述了靜態(tài)聯(lián)編和動態(tài)聯(lián)編的概念和區(qū)別,通過具體實例分析了實現(xiàn)動態(tài)聯(lián)編的條件,指出了虛函數(shù)是實現(xiàn)動態(tài)聯(lián)編的基礎(chǔ)。
    2016-03-03

最新評論

留坝县| 南澳县| 都江堰市| 台南县| 平果县| 安陆市| 天气| 湟源县| 天长市| 沿河| 漯河市| 阿尔山市| 贺州市| 泽普县| 田阳县| 斗六市| 大安市| 枞阳县| 广德县| 陇南市| 平顺县| 友谊县| 德兴市| 琼结县| 凤山县| 水富县| 富平县| 襄汾县| 红桥区| 石景山区| 青河县| 丰都县| 三穗县| 安多县| 临泽县| 资源县| 深州市| 白水县| 白玉县| 浠水县| 承德县|