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

C++ CTreeview的checkbox使用方法

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

1. 消息事件

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

2. 消息事件總結

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

3. 消息處理注意事項

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

4. 使用方法

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

5. 響應NM_CLICK事件的函數代碼

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

相關文章

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

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

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

    C++ 異常的詳細介紹

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

    仿現代C++智能指針實現引用計數

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

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

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

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

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

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

    迭代器的主要作用就是讓算法能夠不用關心底層數據結構,其底層實際就是一個指針,或者是對指針進行了封裝,迭代器失效,實際就是迭代器底層對應指針所指向的空間被銷毀了,對迭代器失效我們了解了,那么現在我們就分析,在vector中哪些操作會導致迭代器失效
    2023-08-08
  • C語言鏈表實現貪吃蛇小游戲

    C語言鏈表實現貪吃蛇小游戲

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

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

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

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

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

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

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

最新評論

荣昌县| 延津县| 玉林市| 桐庐县| 开封市| 涞源县| 疏附县| 大邑县| 丰镇市| 黄陵县| 鹿泉市| 姚安县| 阿荣旗| 鱼台县| 泽普县| 大同市| 新昌县| 淅川县| 连平县| 平谷区| 紫云| 远安县| 永靖县| 长治县| 宽城| 阿拉尔市| 阿拉尔市| 太白县| 马山县| 保靖县| 徐水县| 嘉黎县| 德安县| 旬邑县| 昌乐县| 长顺县| 渑池县| 内丘县| 丹阳市| 都江堰市| 靖江市|