欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ CTreeview的checkbox使用方法

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

1. 消息事件

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

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

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

3. 消息處理注意事項(xiàng)

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

4. 使用方法

   (1)若傳遞TVHT_ONITEMSTATEICON
          獲取選擇ITEM的狀態(tài)并取反
              若有子項(xiàng)則所有子項(xiàng)設(shè)置為一致
              若沒(méi)有子項(xiàng)則
                  若當(dāng)前狀態(tài)為T(mén)RUE則設(shè)置父項(xiàng)為T(mén)RUE;否則遍歷所有兄弟項(xiàng),若全為FALSE則設(shè)置父項(xiàng)為FALSE。
         若選擇了新ITEM則設(shè)置新ITEM為選擇項(xiàng)
   (2)若未傳遞TVHT_ONITEMSTATEICON
          設(shè)置更新ITEM狀態(tài),獲取選擇ITEM的狀態(tài)
              若有子項(xiàng)則所有子項(xiàng)設(shè)置為一致
              若沒(méi)有子項(xiàng)則
                  若當(dāng)前狀態(tài)為T(mén)RUE則設(shè)置父項(xiàng)為T(mén)RUE;否則遍歷所有兄弟項(xiàng),若全為FALSE則設(shè)置父項(xiàng)為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)點(diǎn)擊測(cè)試的信息的整數(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)) //點(diǎn)中復(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è)置子項(xiàng)復(fù)選狀態(tài)
    SetParentCheck(hTree, bCheck);       //設(shè)置父項(xiàng)復(fù)選狀態(tài)
  }
  *pResult = 0;
}

void CTestTimerDlg::SetChildCheck(HTREEITEM hTree,BOOL bCheck)
{
  m_TreeCtrl.Expand(hTree,TVE_EXPAND);
  hTree = m_TreeCtrl.GetChildItem(hTree); //獲取子項(xiàng)句柄
  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)         //判斷是否還有兄弟項(xiàng)被選擇
      {
        return;
      }
      hChild = m_TreeCtrl.GetNextSiblingItem(hChild);
    }
    m_TreeCtrl.SetCheck(hParent,!bCheck);
    SetParentCheck(hParent,bCheck);       //設(shè)置父項(xiàng)的狀態(tài)
  }

相關(guān)文章

  • C\C++ 獲取當(dāng)前路徑實(shí)例詳解

    C\C++ 獲取當(dāng)前路徑實(shí)例詳解

    這篇文章主要介紹了C\C++ 獲取當(dāng)前路徑實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語(yǔ)言入門(mén)篇--充分理解操作符

    C語(yǔ)言入門(mén)篇--充分理解操作符

    本篇文章是基礎(chǔ)篇,適合c語(yǔ)言剛?cè)腴T(mén)的朋友,本文主要介紹了c語(yǔ)言的操作符基礎(chǔ)理論,希望可以幫助大家快速入門(mén)c語(yǔ)言的世界,更好的理解c語(yǔ)言
    2021-08-08
  • C語(yǔ)言中switch語(yǔ)句基本用法實(shí)例

    C語(yǔ)言中switch語(yǔ)句基本用法實(shí)例

    switch的中文翻譯是開(kāi)關(guān),顧名思義,開(kāi)關(guān)的作用就是控制連通或者中斷,在C語(yǔ)言中switch語(yǔ)句的作用也是大同小異,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中switch語(yǔ)句基本用法的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • C語(yǔ)言學(xué)習(xí)之關(guān)鍵字的示例詳解

    C語(yǔ)言學(xué)習(xí)之關(guān)鍵字的示例詳解

    關(guān)鍵字,這名字一聽(tīng),就很關(guān)鍵。而有些關(guān)鍵字,你可能不是很了解,更別談使用。所以,這篇文章將帶你見(jiàn)識(shí)常見(jiàn)的關(guān)鍵字,一起領(lǐng)略它們的風(fēng)采吧
    2022-10-10
  • 深入理解堆排序及其分析

    深入理解堆排序及其分析

    本篇文章是對(duì)堆排進(jìn)行了詳細(xì)的分析以及介紹,需要的朋友參考下
    2013-05-05
  • 利用Matlab實(shí)現(xiàn)迭代適應(yīng)點(diǎn)算法

    利用Matlab實(shí)現(xiàn)迭代適應(yīng)點(diǎn)算法

    道格拉斯-普克算法(Douglas–Peucker?algorithm,亦稱為拉默-道格拉斯-普克算法、迭代適應(yīng)點(diǎn)算法、分裂與合并算法)是將曲線近似表示為一系列點(diǎn),并減少點(diǎn)的數(shù)量的一種算法。本文將利用Matlab實(shí)現(xiàn)這一算法,需要的可以參考一下
    2022-04-04
  • C語(yǔ)言 自增自減運(yùn)算的區(qū)別詳解及實(shí)例

    C語(yǔ)言 自增自減運(yùn)算的區(qū)別詳解及實(shí)例

    這篇文章主要介紹了C語(yǔ)言中的++a和a++的區(qū)別詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • STL常用容器詳細(xì)解析

    STL常用容器詳細(xì)解析

    這里我們不涉及容器的基本操作之類(lèi),只是要討論一下各個(gè)容器其各自的特點(diǎn)STL中的常用容器包括:順序性容器(vector、deque、list)、關(guān)聯(lián)容器(map、set)、容器適配器(queue、stac)
    2013-09-09
  • C語(yǔ)言中g(shù)etchar函數(shù)詳解看這一篇就夠了(函數(shù)功能、使用、返回值)

    C語(yǔ)言中g(shù)etchar函數(shù)詳解看這一篇就夠了(函數(shù)功能、使用、返回值)

    getchar讀取字符的函數(shù),今天通過(guò)本文給大家介紹C語(yǔ)言中g(shù)etchar函數(shù)簡(jiǎn)介用法示例詳解,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • 總結(jié)UNIX/LINUX下C++程序計(jì)時(shí)的方法

    總結(jié)UNIX/LINUX下C++程序計(jì)時(shí)的方法

    本文總結(jié)了下UNIX/LINUX下C++程序計(jì)時(shí)的一些函數(shù)和方法,對(duì)日常使用C++程序的朋友很有幫助,有需要的小伙伴們可以參考學(xué)習(xí),下面一起來(lái)看看吧。
    2016-08-08

最新評(píng)論