当前位置

首页 > 商务英语 > 计算机英语 > c中checkbox的用法

c中checkbox的用法

推荐人: 来源: 阅读: 1.41W 次

c中checkbox的用法的用法你知道吗?下面小编就跟你们详细介绍下c中checkbox的用法的用法,希望对你们有用。

PAn class="ratio-box" style="padding-bottom: 90.94%;">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); //设置父项的状态

}