首先定义右键消息函数:
afx_msg void OnRBClick(NMHDR* pNMHDR, LRESULT* pResult)
然后在消息循环中定义消息对应关系:
ON_NOTIFY(NM_RCLICK, ID_TREECTRL, OnRbClick)
接着定义消息函数内容:
void OnRBClick(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint point
GetCursorPos(&point)
CPoint pointInTree = point
m_TreeCtrl.ScreenToClient(&pointInTree)
HTREEITEM item
UINT flag = TVHT_ONITEM
item = m_TreeCtrl.HitTest(pointInTree, &flag)
if(item != NULL)
{
m_TreeCtrl.SelectItem(item)
CMenu menu
menu.LoadMenu(IDR_MENU1)
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN |
TPM_RIGHTBUTTON, point.x, point.y, this, NULL)
}
}
1.初始化CImageList、设置图像列表 成员函数: CImageList::Create CTreeCtrl::SetImageList 示例: BOOL CMfc1Dlg::OnInitDialog(){ //... m_iml.Create(16,16,ILC_COLOR16 | ILC_MASK,20,20)m_Tree.SetImageList(&m_iml,TVSIL_NORMAL)} 2.向树视图中添加窗口列表 成员函数: CImageList::Replace CTreeCtrl::InsertItem 示例: int i=0HWND hDesktop=::GetDesktopWindow()HWND hWnd=::GetWindow(hDesktop,GW_CHILD)TCHAR sTitle[MAX_PATH]HICON hIconBOOL bShow=TRUELONG idxwhile ( i<1000 &&hWnd!=NULL ) { bShow=TRUEif (!::GetWindowTextLength(hWnd)) bShow=FALSEif (!::IsWindowEnabled(hWnd)) bShow=FALSEif (!::IsWindowVisible(hWnd)) bShow=FALSEif (!::GetWindow(hWnd,GW_CHILD)) bShow=FALSEif (bShow) { ::GetWindowText(hWnd,sTitle,MAX_PATH)hIcon=(HICON)::SendMessage(hWnd,WM_GETICON,ICON_SMALL,NULL)if ((LONG)hIcon==NULL) hIcon=(HICON)::SendMessage(hWnd,WM_GETICON,ICON_BIG,NULL)if ((LONG)hIcon==NULL) hIcon=m_hIconidx=m_iml.Replace(-1,hIcon)m_Tree.InsertItem(sTitle,idx,idx)} hWnd=::GetWindow(hWnd,GW_HWNDNEXT)++i} 源代码mfc_study_2.zip(38KB)最近在做MFC开发的过程中,由于对MFC的不熟悉,让我遇到了一些坑,也不能算是坑吧,本质上还是自己太菜了,我遇到的问题描述如下: 我的目的是继承一个树控件的类,在派生类中实现一些自己想要添加的方法.我的遇到的问题是:基于对话框的MFC程序->转到对话框->拖入TreeControl控件->右键树控件添加类(我以为这样的类是继承自CTreeCtrl的)->对应类的头文件查看
过程如下:
跟我的预期并不相符,基类中没有我想要的CTreeCtrl类,后面我发现在对话框的任意位置右键添加类都是这样的情况,所以我下结论:在对话框中右键添加类其基类都是和对话框相关的类(如CDialogEx之类).
后面经过请教,找到了正确添加MFC类的方法:右键项目名->类向导->添加类右边的下拉框选择MFC类->此时查看基类就可以看到所有的MFC类,添加的新类也就继承自想要继承的类.
归根结底还是对MFC和VS的用法不熟悉.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)