国产成人v爽在线免播放观看,日韩欧美色,久久99国产精品久久99软件,亚洲综合色网站,国产欧美日韩中文久久,色99在线,亚洲伦理一区二区

學(xué)習(xí)啦 > 學(xué)習(xí)英語 > 專業(yè)英語 > 計算機英語 > c中checkbox的用法

c中checkbox的用法

時間: 長思709 分享

c中checkbox的用法

  c中checkbox的用法的用法你知道嗎?下面小編就跟你們詳細介紹下c中checkbox的用法的用法,希望對你們有用。

  c中checkbox的用法的用法如下:

  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ù)代碼

  ?

  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; //接收有關(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;

  }

  ?

  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); //遞歸調(diào)用

  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); //設(shè)置父項的狀態(tài)

  }

熱門文章

537086