想在在程序运行时动态的创建一个菜单项,比如点一个按钮以后,添加一个菜单项
请问怎么做这个菜单项的消息映射呢?怎么给这个菜单项一个ID号啊?没有ID号用classwizard不是没法做了么?手工在stringtable里面添加了ID,然后手工写消息映射的定义什么的倒是可以用,不过觉得不该这么麻烦吧?
同样,对于按钮,动态创建一个按钮的话,那么这个按钮的消息印射如何动态来做,难道就真的只能是预留一个ID值和手工实现消息印射?
请问怎么做这个菜单项的消息映射呢?怎么给这个菜单项一个ID号啊?没有ID号用classwizard不是没法做了么?手工在stringtable里面添加了ID,然后手工写消息映射的定义什么的倒是可以用,不过觉得不该这么麻烦吧?
同样,对于按钮,动态创建一个按钮的话,那么这个按钮的消息印射如何动态来做,难道就真的只能是预留一个ID值和手工实现消息印射?
解决方案 »
- 列表视图控件 List Control添加背景图???
- 哪有中文版的的 vc6 msdn呀?
- 怎样用VC6.0创建一个DLL?
- 为什么等待连接和接收数据非要用线程?
- 高手们帮我看看,增加或者修改下我的程序!如果要整个代码,我可以发。
- 一个关于内存管理的简单问题。
- 在线程里关闭套接字出错是什么原因?
- (1)Win2000p上是用双网卡
- 如果装了WinZip,在资源管理器里点鼠标右键,弹出菜单中有Add to Zip的菜单项,请问怎样实现这一功能?
- 如何让窗口启动时隐藏
- 试着用ATL写了一个复合对话框控件,不知道怎么处理子控件消息....
- 请问一下这个错误是什么意思:error BK1506 :cannot open file '.\Debug\ClientDlg.sbr': No such file or directory
如果是动态ID,可以利用ON_COMMAND_RANGE宏或重载CWnd::OnCommand。
BEGIN_MESSAGE_MAP(CDevTreeView, CTreeView)
//{{AFX_MSG_MAP(CDevTreeView)
..................................
//}}AFX_MSG_MAP
ON_COMMAND(ID_PADD_DEVNODE, OnAddDevNode)
END_MESSAGE_MAP()
//头文件中
//{{AFX_MSG(CDevTreeView)
//}}AFX_MSG
afx_msg void OnAddDevNode();
#define ID_XXX 45000
然后每次你动态增加菜单时把菜单ID设成ID_XXX++
如果动态加多个菜单可以用宏ON_COMMAND_RANGE来实现消息映射
在头文件中
//{{AFX_MSG(CDevTreeView)
//}}AFX_MSG
afx_msg void OnXXX( UINT nID );
在cpp中影射消息ON_COMMAND_RANGE( ID_XXX, ID_XXX+2000, OnXXX )
。
void OnXXX( UINT nID )
{
//nID为菜单ID}