关于自定义菜单 想实现一个类似菜单功能的控件,可以在任意位置创建不知道该如何下手谁有这方面的源码呀,发一份给我最好了[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CSecProToolDlg::OnNMRclickTreeSoftpro(NMHDR *pNMHDR, LRESULT *pResult){ CString str; //POINT Point; CPoint OldPoint; ::GetCursorPos(&Point); OldPoint=Point; CMenu menu; menu.LoadMenu(IDR_MENU_SOFTPRO); CMenu *submenu = menu.GetSubMenu(0); m_Tree_SoftPro.ScreenToClient(&Point); HTREEITEM hRoot,hParent,hChild; hRoot=m_Tree_SoftPro.GetRootItem(); CRect Rect; m_Tree_SoftPro.ScreenToClient(Rect); while(NULL!=hRoot) { m_Tree_SoftPro.GetItemRect(hRoot,Rect,FALSE); if(Point.x>=Rect.left && Point.x<=Rect.right && Point.y>=Rect.top && Point.y<=Rect.bottom) { submenu->EnableMenuItem(IDR_ADD_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED); submenu->EnableMenuItem(IDR_CHANGE_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED); submenu->EnableMenuItem(IDR_DELETE_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED); submenu->EnableMenuItem(IDR_ADD_SOFT,MF_BYCOMMAND|MF_ENABLED); submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this); return; } hParent=m_Tree_SoftPro.GetChildItem(hRoot); while(NULL!=hParent) { m_Tree_SoftPro.GetItemRect(hParent,Rect,FALSE); if(Point.x>=Rect.left && Point.x<=Rect.right && Point.y>=Rect.top && Point.y<=Rect.bottom) { submenu->EnableMenuItem(IDR_ADD_SOFT,MF_BYCOMMAND|MF_ENABLED); submenu->EnableMenuItem(IDR_CHANGE_SOFT,MF_BYCOMMAND|MF_ENABLED); submenu->EnableMenuItem(IDR_DELETE_SOFT,MF_BYCOMMAND|MF_ENABLED); submenu->EnableMenuItem(IDR_ADD_PROCESS,MF_BYCOMMAND|MF_ENABLED); submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this); return; } hChild=m_Tree_SoftPro.GetChildItem(hParent); while(NULL!=hChild) { m_Tree_SoftPro.GetItemRect(hChild,Rect,FALSE); if(Point.x>=Rect.left && Point.x<=Rect.right && Point.y>=Rect.top && Point.y<=Rect.bottom) { submenu->EnableMenuItem(IDR_ADD_PROCESS,MF_BYCOMMAND|MF_ENABLED); submenu->EnableMenuItem(IDR_CHANGE_PROCESS,MF_BYCOMMAND|MF_ENABLED); submenu->EnableMenuItem(IDR_DELETE_PROCESS,MF_BYCOMMAND|MF_ENABLED); submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this); return; } hChild=m_Tree_SoftPro.GetNextSiblingItem(hChild); } hParent=m_Tree_SoftPro.GetNextSiblingItem(hParent); } hRoot=m_Tree_SoftPro.GetNextSiblingItem(hRoot); } submenu->EnableMenuItem(IDR_ADD_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED); submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this); *pResult = 0; } 1.添加NM_RCLICK事件2.把你自己定义的菜单加载入CMenu的对象。3.调用TrackPopupMenu() 用VC编写COM给VB/VBScript调用,如何传回数组值? 无分求助,下次补分.关于列表控件 救命啊!!!!!AfxBeginThread问题!!! 关于NOTIFYICONDATA这个结构体 如何设置dialog的style为child? 有关sdk 开发问题 搜索文件和文件夹的问题。 我在写一个关于exe文件捆绑时遇到一个这样的问题: 关于BSTR内存的问题 怎样用VC60实现Ado数据库连接.和SQL语句的执行 截取一段字符串,然后在它的后面添加"...",为什么会出现乱码? 有关ActiveX控件开发的问题
void CSecProToolDlg::OnNMRclickTreeSoftpro(NMHDR *pNMHDR, LRESULT *pResult)
{
CString str;
//POINT Point;
CPoint OldPoint;
::GetCursorPos(&Point);
OldPoint=Point; CMenu menu;
menu.LoadMenu(IDR_MENU_SOFTPRO);
CMenu *submenu = menu.GetSubMenu(0); m_Tree_SoftPro.ScreenToClient(&Point);
HTREEITEM hRoot,hParent,hChild;
hRoot=m_Tree_SoftPro.GetRootItem();
CRect Rect;
m_Tree_SoftPro.ScreenToClient(Rect);
while(NULL!=hRoot)
{
m_Tree_SoftPro.GetItemRect(hRoot,Rect,FALSE);
if(Point.x>=Rect.left && Point.x<=Rect.right && Point.y>=Rect.top && Point.y<=Rect.bottom)
{
submenu->EnableMenuItem(IDR_ADD_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED);
submenu->EnableMenuItem(IDR_CHANGE_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED);
submenu->EnableMenuItem(IDR_DELETE_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED);
submenu->EnableMenuItem(IDR_ADD_SOFT,MF_BYCOMMAND|MF_ENABLED);
submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this);
return; }
hParent=m_Tree_SoftPro.GetChildItem(hRoot);
while(NULL!=hParent)
{
m_Tree_SoftPro.GetItemRect(hParent,Rect,FALSE);
if(Point.x>=Rect.left && Point.x<=Rect.right && Point.y>=Rect.top && Point.y<=Rect.bottom)
{
submenu->EnableMenuItem(IDR_ADD_SOFT,MF_BYCOMMAND|MF_ENABLED);
submenu->EnableMenuItem(IDR_CHANGE_SOFT,MF_BYCOMMAND|MF_ENABLED);
submenu->EnableMenuItem(IDR_DELETE_SOFT,MF_BYCOMMAND|MF_ENABLED);
submenu->EnableMenuItem(IDR_ADD_PROCESS,MF_BYCOMMAND|MF_ENABLED);
submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this);
return;
}
hChild=m_Tree_SoftPro.GetChildItem(hParent);
while(NULL!=hChild)
{
m_Tree_SoftPro.GetItemRect(hChild,Rect,FALSE);
if(Point.x>=Rect.left && Point.x<=Rect.right && Point.y>=Rect.top && Point.y<=Rect.bottom)
{
submenu->EnableMenuItem(IDR_ADD_PROCESS,MF_BYCOMMAND|MF_ENABLED);
submenu->EnableMenuItem(IDR_CHANGE_PROCESS,MF_BYCOMMAND|MF_ENABLED);
submenu->EnableMenuItem(IDR_DELETE_PROCESS,MF_BYCOMMAND|MF_ENABLED);
submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this);
return;
}
hChild=m_Tree_SoftPro.GetNextSiblingItem(hChild);
} hParent=m_Tree_SoftPro.GetNextSiblingItem(hParent);
}
hRoot=m_Tree_SoftPro.GetNextSiblingItem(hRoot);
}
submenu->EnableMenuItem(IDR_ADD_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED);
submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this);
*pResult = 0;
}
2.把你自己定义的菜单加载入CMenu的对象。
3.调用TrackPopupMenu()