當前位置

首頁 > 商務英語 > 計算機英語 > c中checkbox的用法

c中checkbox的用法

推薦人: 來源: 閱讀: 1.45W 次

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

c中checkbox的用法

  c中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_enToClient(&point); //轉化成客戶座標

hTree = m_est(point,&uFlag); //返回與CtreeTtrl關聯的游標的當前位置和控制代碼

if((TVHT_NOWHERE & uFlag))

{

return;

}

if (hTree && (TVHT_ONITEMSTATEICON & uFlag)) //點中複選框

{

m_ctItem(hTree);

CString temp = m_temText(hTree) + "rn";

TRACE(temp);

bCheck = m_heck(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_nd(hTree,TVE_EXPAND);

hTree = m_hildItem(hTree); //獲取子項控制代碼

while (hTree)

{

m_heck(hTree, bCheck);

SetChildCheck(hTree,bCheck); //遞迴呼叫

hTree = m_extSiblingItem(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_arentItem(hTree);

if (hParent)

{

HTREEITEM hChild = m_hildItem(hParent);

while (hChild)

{

if (hChild == hTree)

{

hChild = m_extSiblingItem(hChild);

continue;

}

BOOL bflag = m_heck(hChild);

if (bCheck == bflag) //判斷是否還有兄弟項被選擇

{

return;

}

hChild = m_extSiblingItem(hChild);

}

m_heck(hParent,!bCheck);

SetParentCheck(hParent,bCheck); //設定父項的狀態

}