Chinaunix首页 | 论坛 | 博客
  • 博客访问: 243889
  • 博文数量: 52
  • 博客积分: 1355
  • 博客等级: 中尉
  • 技术积分: 485
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 12:23
文章分类

全部博文(52)

文章存档

2013年(5)

2012年(16)

2011年(26)

2010年(2)

2009年(1)

2008年(2)

我的朋友

分类: C/C++

2011-11-18 13:17:59

首先ctreectrl的checkbox属性需要用代码去设置
m_tree.ModifyStyle(0, TVS_CHECKBOXES);
 
checkbox改变事件也就是点击事件。
 
1 重载treectrl的OnNotify()
2 自定义一个消息,在这个消息的处理函数中,去做checkbox改变的响应。
 
OnNotify内容:
  1. #define UM_CHECKSTATECHANGE (WM_USER + 19)
  2. #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
  3. #define GET_Y_LPARAM(lp) ((lp & 0xFFFF0000)>>16)
  1. BOOL SomeDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
  2. {
  3.     // TODO: Add your specialized code here and/or call the base class
  4.     LPNMHDR lpnmh = (LPNMHDR) lParam;
  5.     TVHITTESTINFO ht = {0};
  6.     
  7.     if((lpnmh->code == NM_CLICK) && (lpnmh->idFrom == IDC_TR_TBS))
  8.     {
  9.         DWORD dwpos = GetMessagePos();
  10.         
  11.         // include <windowsx.h> and <windows.h> header files
  12.         ht.pt.x = GET_X_LPARAM(dwpos);
  13.         ht.pt.y = GET_Y_LPARAM(dwpos);
  14.         ::MapWindowPoints(HWND_DESKTOP, lpnmh->hwndFrom, &ht.pt, 1);
  15.         
  16.         TreeView_HitTest(lpnmh->hwndFrom, &ht);
  17.         
  18.         if(TVHT_ONITEMSTATEICON & ht.flags)
  19.         {    
  20.             ::PostMessage(m_hWnd, UM_CHECKSTATECHANGE, 0, (LPARAM)ht.hItem);
  21.         }
  22.     }

  23.     return CDialog::OnNotify(wParam, lParam, pResult);
  24. }

 

处理的时候取得状态

 

      LRESULT SomeDlg::OnMyMessage(WPARAM wParam, LPARAM lParam){
    1. HTREEITEM hItemChanged = (HTREEITEM)lParam;
    2.     if(NULL == hItemChanged){ return -1;}
    3.     BOOL checked = m_tbs.GetCheck(hItemChanged);
    4.    ......
    5. }
    阅读(4663) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~