一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++ CTreeview的checkbox使用方法

C++ CTreeview的checkbox使用方法

2021-02-28 11:36C++教程網 C/C++

這篇文章主要介紹了C++ CTreeview的checkbox使用方法的相關資料,需要的朋友可以參考下

1. 消息事件

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

2. 消息事件總結

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

3. 消息處理注意事項

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

4. 使用方法

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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);   //獲取當前復選狀態
    SetChildCheck(hTree,!bCheck);       //設置子項復選狀態
    SetParentCheck(hTree, bCheck);       //設置父項復選狀態
  }
  *pResult = 0;
}
?
1
2
3
4
5
6
7
8
9
10
11
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);  //獲取兄弟的句柄
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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);       //設置父項的狀態
  }

延伸 · 閱讀

精彩推薦
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
主站蜘蛛池模板: 亚洲国产第一区二区香蕉日日 | 俺去也亚洲色图 | 国产成人手机在线 | 9久re热视频这里只有精品 | 精品湿| 精品视频一区二区 | 色花堂国产精品首页第一页 | 全黄h全肉细节文在线观看 全彩成人18h漫画 | 亚洲色图欧美色 | 亚洲乱码一二三四区国产 | 国产一区二区在线免费观看 | 手机在线观看国产精选免费 | 欧美综合一区二区三区 | 成人欧美一区二区三区黑人 | 第一次处破女18分钟 | 99热免费在线 | 亚洲色大成网站www久久九九 | 欧美1区 | 国产九九在线观看播放 | 91爱爱网站 | 无码人妻精品一区二区蜜桃在线看 | 2021年国内自拍 | 亚洲成片在线看 | 成人免费一区二区三区在线观看 | 26uuu老色哥 236宅宅2021最新理论 | 2018天天拍拍拍免费视频 | 欧美成人免费tv在线播放 | 羞羞一区二区三区四区片 | 深夜福利入口 | 大象传媒1234区 | 男gaygays免费网站多人 | youjizzxxx69日本| 久久久免费热线精品频 | 好大好深视频 | avidolz中文版 | 国产亚洲综合成人91精品 | 日韩精品亚洲一级在线观看 | 91免费在线 | 激情亚洲 | 国产外围 | 久久中文字幕综合不卡一二区 |