问题如下:
我编了一个类似资源管理的程序,左边是树,右边是列表,由于我建立工程时是
以TreeView为基类,菜单项好多功能只有点击树时才变亮,其中有一项“功能转换”
要求点击列表时也能使用(该项的COMMAND函数在Tree类中),于是我采取了如下方法:
将该项的UPDATE_COMMAND UI函数定义在列表类中,并加入语句:
pCmdUI->Enable(true);
这样一来,点击列表时菜单项变亮了,但选中时却并不执行相应的功能(我想是由于
COMMAND函数在树类中),怎么解决这个问题???求大家帮忙。
我编了一个类似资源管理的程序,左边是树,右边是列表,由于我建立工程时是
以TreeView为基类,菜单项好多功能只有点击树时才变亮,其中有一项“功能转换”
要求点击列表时也能使用(该项的COMMAND函数在Tree类中),于是我采取了如下方法:
将该项的UPDATE_COMMAND UI函数定义在列表类中,并加入语句:
pCmdUI->Enable(true);
这样一来,点击列表时菜单项变亮了,但选中时却并不执行相应的功能(我想是由于
COMMAND函数在树类中),怎么解决这个问题???求大家帮忙。
可是我该功能函数处理了大量的树的操作,放到mainframe中处理树和列表都不方便了
程序要做大量的改动,有没有其他更好的办法呢?
试了几个地方,运行时还是不行或出错
能否说清楚点?
谢谢啦!!
绕了点,不过能用。
在头文件中:
bool bfirst;//定义完要先初始化成false
bool bsecond;
..................
HTREEITEM hRoot;
HTREEITEM hAdmin;
HTREEITEM hEscape;
HTREEITEM hPopulation;
HTREEITEM hCar;
HTREEITEM hRecord;
HTREEITEM hStatistic;
然后在你向树控件插入项目的时候设置每一个节点的ItemData,例如:
hEscape = m_ctlTree.InsertItem("追逃人员管理",0,1,hRoot,TVI_LAST);
m_ctlTree.SetItemData(hEscape,0);
hPopulation = m_ctlTree.InsertItem("常住人口管理",0,1,hRoot,TVI_LAST);
m_ctlTree.SetItemData(hPopulation,1);
hCar = m_ctlTree.InsertItem("盗抢机动车管理",0,1,hRoot,TVI_LAST);
m_ctlTree.SetItemData(hCar,2);
hRecord = m_ctlTree.InsertItem("录音文件管理",0,1,hRoot,TVI_LAST);
m_ctlTree.SetItemData(hRecord,3);
hStatistic = m_ctlTree.InsertItem("统计分析管理",0,1,hRoot,TVI_LAST);
m_ctlTree.SetItemData(hStatistic,4);然后重载TreeCtrl的TVN_SELCHANGED消息,在消息函数中设置bool变量的值如下:
HTREEITEM hSelect = GetTreeCtrl().GetSelectedItem();
DWORD dwData = GetTreeCtrl().GetItemData(hSelect);
switch(dwData){
case 0:
((CMainFrame*)AfxGetMainWnd())->bfirst = true;
return;
case 1:
((CMainFrame*)AfxGetMainWnd())->bsecond = true;
break;
case 2:
((CMainFrame*)AfxGetMainWnd())->bthird = true;
break;
...........
...........
default:
break;
}
*pResult = 0;然后重载每一个菜单的UPDATE_COMMAND_UI消息,在每个小处理函数中控制菜单是变灰还是变亮:如:
void CMainFrame::OnUpdatefirst(CCmdUI* pCmdUI)
{
pCmdUI->Enable(bfirst);
}
void CMainFrame::OnUpdatesecond(CCmdUI* pCmdUI)
{
pCmdUI->Enable(bsecond);
}
...........
希望上面说的对你有所帮助!