Treectrl右键菜单工作不正常
现在的问题是:当插入root item >= 10时,右键菜单就工作不正常。
右键菜单在判断选中的是root item 或 child item就只判断为一种,
即只为root item或child item。
root item插入用以下函数:
InsertItem(_T("新加组"),0,0,TVI_ROOT,TVI_LAST);
child item插入用以下函数:
InsertItem(_T("李四"),2,2,m_hTreeitemHit,TVI_LAST);
m_hTreeitemHit:为选中的item。
- C/C++ code
//右键弹出菜单如下void CGuiTreeCtrl::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here POINT point; UINT uFlags = 0x00; bool bIsRootandNull = false; if(!GetCursorPos(&point)) return; ScreenToClient(&point); HTREEITEM hItem = HitTest(point, &uFlags); //得到选中的项 if ((hItem != NULL) && (TVHT_ONITEM & uFlags)) { SelectItem(hItem); //设置为选中状态 m_hTreeitemHit = hItem; //保存选中的item } else { bIsRootandNull = true; } HTREEITEM hRoot[MAXROOTNUM]; unsigned char i = 0x00; if(bIsRootandNull == false) { hRoot[i] = GetRootItem(); //枚举所有根节点 while(hRoot[i]) { hRoot[i+1] = GetNextItem(hRoot[i], TVGN_NEXT); i++; } for (int j = 0x00; j < i; j++) { if (hItem == hRoot[j]) //如果右击根节点 { bIsRootandNull = true; break; } } } if (bIsRootandNull == true) //在根节点或没有选中任何节点 { DWORD dwPos = GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); CMenu menu; if (hItem == NULL) { VERIFY( menu.LoadMenu( ID_RCLICKNULLMENU) ); } else { VERIFY( menu.LoadMenu( ID_RCLICKROOTMENU) ); } CMenu* popup = menu.GetSubMenu(0); ASSERT( popup != NULL ); popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this ); } else //选中子节点 { DWORD dwPos = GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); CMenu menu; VERIFY( menu.LoadMenu( ID_RCLICKCHILDMENU) ); CMenu* popup = menu.GetSubMenu(0); ASSERT( popup != NULL ); popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this ); } *pResult = 0;}都不知道是不是右键菜单处理出了问题还是其它的。
[解决办法]
简单点,你调试一下,看进入OnRclick()中了吗?或者是进入OnRclick()中了,哪里return返回了,一般添加右键菜单是相应WM_CONTEXTMENU消息。。。