当选择CTreeCtrl控件某一项时,或者类似的动作,需要进行消息处理,比如在选择控件的目录一项时,自动展开,不像VS提供的自动添加工具那样方便,需要自己添加消息处理,主要是用下面的宏
ON_NOTIFY( wNotifyCode, id, memberFxn )
|
wNotifyCode
是消息通知,id是发送消息控件的ID,
memberFxn
调用的函数,其原型必须如下
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );
|
所以首先添加如下函数原型
afx_msg void OnTvnSelchangedTreeCtl( NMHDR * pNotifyStruct, LRESULT * result );
|
该函数捕获CTreeCtrl控件的被选项改变的动作,捕获宏如下
BEGIN_MESSAGE_MAP(CBridgeWindow, CFrameWnd)
ON_WM_CREATE()
ON_NOTIFY(TVN_SELCHANGED, ID_TREELIST, &CBridgeWindow::OnTvnSelchangedTreeCtl)
END_MESSAGE_MAP()
|
现在就可以在
afx_msg void OnTvnSelchangedTreeCtl( NMHDR * pNotifyStruct, LRESULT * result )函数里面实现我们想要的功能
afx_msg void CBridgeWindow::OnTvnSelchangedTreeCtl(NMHDR * pNotifyStruct, LRESULT * result)
{
HTREEITEM hItem = treectrl.GetSelectedItem();
if ((hItem != NULL) && treectrl.ItemHasChildren(hItem))
{
treectrl.Expand(hItem, TVE_EXPAND); //如果有子节点,就自动展开
treectrl.EnsureVisible(hItem);
}else{
TVITEM item;
TCHAR szText[1024];
item.hItem = hItem;
item.mask = TVIF_TEXT | TVIF_HANDLE;
item.pszText = szText;
item.cchTextMax = 1024;
BOOL bWorked = treectrl.GetItem(&item);
CBridgeView* pView = (CBridgeView*)GetActiveView();
//pView->m_viewDialog->SendMessage();
}
return;
}
|
OK,大框架搭好了,开始我的细节喽!
阅读(2710) | 评论(0) | 转发(0) |