动态产生了一个菜单,子菜单项是不固定的, 响应函数如何写 动态产生了一个菜单, 子菜单项是不固定的而且可能有很多子菜单项我想通过获取用户点击的子菜单项上的字符来写响应函数, 应如何去做 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是ON_COMMAND_RANGE吧ON_COMMAND_RANGE( id1, id2, memberFxn )响应id1到id2 在设计动态菜单的时候,菜单的ID号是设计时候就给定的,也就是说每个动态菜单的ID号是固定不变的,这样就可以通过消息响应函数处理动态菜单的每一项,以前自己写过,大概的思路就是这样。 在设计动态菜单的时候,菜单的ID号是设计时候就给定的,也就是说每个动态菜单的ID号是固定不变的,这样就可以通过消息响应函数处理动态菜单的每一项可不可以说一下如何通过消息响应函数处理动态菜单的每一项 LRESULT CAddSystemTryIconDlg::OnSystemTry(WPARAM wParam,LPARAM lParam){ char *ch[] = {"显示","隐藏","退出"}; POINT pt; HMENU hMenu; CMenu *pMenu,menu; //CRect rect(100,100,100,100); if(wParam = WM_SYSTEMTRY) { switch(lParam) { case WM_LBUTTONDOWN: if(!ShowWindow(SW_HIDE)) { ShowWindow(SW_SHOW); SetForegroundWindow(); } break; case WM_RBUTTONDOWN: SetForegroundWindow();//设置前景窗口是为了当点击托盘图标后又点击了弹出菜单以外的地方,弹出菜单会自动隐藏 /////////////////////////////////////////////////静态加载菜单//////////////////////////////////////////////* ::GetCursorPos(&pt); menu.LoadMenu(IDR_MENU1); pMenu = menu.GetSubMenu(0); TrackPopupMenu(pMenu->m_hMenu,TPM_RIGHTALIGN,pt.x,pt.y,0,m_hWnd,NULL);*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////动态加载菜单///////////////////////////////////////////// ::GetCursorPos(&pt); hMenu = CreatePopupMenu();//动态创建菜单 InsertMenu(hMenu,1,MF_BYCOMMAND,IDM_NEXTSHOW,ch[0]); InsertMenu(hMenu,2,MF_BYCOMMAND,IDM_NEXTHIDE,ch[1]); InsertMenu(hMenu,3,MF_BYCOMMAND,IDM_EXIT,ch[2]); pMenu = CMenu::FromHandle(hMenu); pMenu->SetDefaultItem(IDM_NEXTSHOW); ::SetMenuItemBitmaps(hMenu,IDM_NEXTSHOW,MF_BYCOMMAND,HBITMAP(m_bitmap),HBITMAP(m_bitmap2)); //Detach(); TrackPopupMenu(hMenu,TPM_RIGHTALIGN,pt.x,pt.y,0,m_hWnd,NULL); ////////////////////////////////////////////////////////////////////////////////////////////////////////// break; case WM_LBUTTONDBLCLK: break; } } return 1;} LRESULT CAddSystemTryIconDlg::OnSystemTry(WPARAM wParam,LPARAM lParam){ char *ch[] = {"显示","隐藏","退出"}; POINT pt; HMENU hMenu; CMenu *pMenu,menu; //CRect rect(100,100,100,100); if(wParam = WM_SYSTEMTRY) { switch(lParam) { case WM_LBUTTONDOWN: if(!ShowWindow(SW_HIDE)) { ShowWindow(SW_SHOW); SetForegroundWindow(); } break; case WM_RBUTTONDOWN: SetForegroundWindow();//设置前景窗口是为了当点击托盘图标后又点击了弹出菜单以外的地方,弹出菜单会自动隐藏 /////////////////////////////////////////////////静态加载菜单//////////////////////////////////////////////* ::GetCursorPos(&pt); menu.LoadMenu(IDR_MENU1); pMenu = menu.GetSubMenu(0); TrackPopupMenu(pMenu->m_hMenu,TPM_RIGHTALIGN,pt.x,pt.y,0,m_hWnd,NULL);*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////动态加载菜单///////////////////////////////////////////// ::GetCursorPos(&pt); hMenu = CreatePopupMenu();//动态创建菜单 InsertMenu(hMenu,1,MF_BYCOMMAND,IDM_NEXTSHOW,ch[0]); InsertMenu(hMenu,2,MF_BYCOMMAND,IDM_NEXTHIDE,ch[1]); InsertMenu(hMenu,3,MF_BYCOMMAND,IDM_EXIT,ch[2]); pMenu = CMenu::FromHandle(hMenu); pMenu->SetDefaultItem(IDM_NEXTSHOW); ::SetMenuItemBitmaps(hMenu,IDM_NEXTSHOW,MF_BYCOMMAND,HBITMAP(m_bitmap),HBITMAP(m_bitmap2)); //Detach(); TrackPopupMenu(hMenu,TPM_RIGHTALIGN,pt.x,pt.y,0,m_hWnd,NULL); ////////////////////////////////////////////////////////////////////////////////////////////////////////// break; case WM_LBUTTONDBLCLK: break; } } return 1;} void CAddSystemTryIconDlg::OnNextShow(){ ::ShowWindow(m_hWnd,SW_SHOW);}void CAddSystemTryIconDlg::OnNextHide(){ //ShowWindow(m_hWnd,SW_HIDE); ::ShowWindow(m_hWnd,SW_HIDE);}void CAddSystemTryIconDlg::OnExit(){ OnClose(); ::DestroyWindow(m_hWnd);} 可以直接在onmessage消息里面动态邦定消息函数,即消息id与响应函数的关系,如果id不断开是最好的阿 添加WM_COMMAND消息,利用switch判断,菜单Id可以临时给,但你要先预定一个范围,在试图的初始化时,别忘记把m_bAutoMenuEnable 设置为FALSE,否则你的动态菜单是灰的哦 关于bind邦定失败 自定义按钮问题,请指示 edit子窗口中实例句柄参数引起的问题,何时使用相同的实例句柄实参? 如何画矩形和椭圆,但不填充区域? 一个类的静态成员该如何实现序列化? ?请问string和char *如何互相转换 activex控件和ie可以交互变量吗。。。 vc使用web browser 控件的问题 在picture控件显示一个比控件大的图后失真 我想定制ToolBar!!!!?????有空来看看·· CToolBarCtrl的宽度总是大于所有按钮的总宽度 救急!!关于VC6.0工程EXE生成的应用程序问题。
LRESULT CAddSystemTryIconDlg::OnSystemTry(WPARAM wParam,LPARAM lParam)
{
char *ch[] = {"显示","隐藏","退出"};
POINT pt;
HMENU hMenu;
CMenu *pMenu,menu;
//CRect rect(100,100,100,100);
if(wParam = WM_SYSTEMTRY)
{
switch(lParam)
{
case WM_LBUTTONDOWN:
if(!ShowWindow(SW_HIDE))
{
ShowWindow(SW_SHOW);
SetForegroundWindow();
}
break;
case WM_RBUTTONDOWN:
SetForegroundWindow();//设置前景窗口是为了当点击托盘图标后又点击了弹出菜单以外的地方,弹出菜单会自动隐藏
/////////////////////////////////////////////////静态加载菜单/////////////////////////////////////////////
/*
::GetCursorPos(&pt);
menu.LoadMenu(IDR_MENU1);
pMenu = menu.GetSubMenu(0);
TrackPopupMenu(pMenu->m_hMenu,TPM_RIGHTALIGN,pt.x,pt.y,0,m_hWnd,NULL);
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////动态加载菜单/////////////////////////////////////////////
::GetCursorPos(&pt);
hMenu = CreatePopupMenu();//动态创建菜单
InsertMenu(hMenu,1,MF_BYCOMMAND,IDM_NEXTSHOW,ch[0]);
InsertMenu(hMenu,2,MF_BYCOMMAND,IDM_NEXTHIDE,ch[1]);
InsertMenu(hMenu,3,MF_BYCOMMAND,IDM_EXIT,ch[2]);
pMenu = CMenu::FromHandle(hMenu);
pMenu->SetDefaultItem(IDM_NEXTSHOW);
::SetMenuItemBitmaps(hMenu,IDM_NEXTSHOW,MF_BYCOMMAND,HBITMAP(m_bitmap),HBITMAP(m_bitmap2));
//Detach();
TrackPopupMenu(hMenu,TPM_RIGHTALIGN,pt.x,pt.y,0,m_hWnd,NULL);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
break;
case WM_LBUTTONDBLCLK:
break;
}
}
return 1;
}
{
char *ch[] = {"显示","隐藏","退出"};
POINT pt;
HMENU hMenu;
CMenu *pMenu,menu;
//CRect rect(100,100,100,100);
if(wParam = WM_SYSTEMTRY)
{
switch(lParam)
{
case WM_LBUTTONDOWN:
if(!ShowWindow(SW_HIDE))
{
ShowWindow(SW_SHOW);
SetForegroundWindow();
}
break;
case WM_RBUTTONDOWN:
SetForegroundWindow();//设置前景窗口是为了当点击托盘图标后又点击了弹出菜单以外的地方,弹出菜单会自动隐藏
/////////////////////////////////////////////////静态加载菜单/////////////////////////////////////////////
/*
::GetCursorPos(&pt);
menu.LoadMenu(IDR_MENU1);
pMenu = menu.GetSubMenu(0);
TrackPopupMenu(pMenu->m_hMenu,TPM_RIGHTALIGN,pt.x,pt.y,0,m_hWnd,NULL);
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////动态加载菜单/////////////////////////////////////////////
::GetCursorPos(&pt);
hMenu = CreatePopupMenu();//动态创建菜单
InsertMenu(hMenu,1,MF_BYCOMMAND,IDM_NEXTSHOW,ch[0]);
InsertMenu(hMenu,2,MF_BYCOMMAND,IDM_NEXTHIDE,ch[1]);
InsertMenu(hMenu,3,MF_BYCOMMAND,IDM_EXIT,ch[2]);
pMenu = CMenu::FromHandle(hMenu);
pMenu->SetDefaultItem(IDM_NEXTSHOW);
::SetMenuItemBitmaps(hMenu,IDM_NEXTSHOW,MF_BYCOMMAND,HBITMAP(m_bitmap),HBITMAP(m_bitmap2));
//Detach();
TrackPopupMenu(hMenu,TPM_RIGHTALIGN,pt.x,pt.y,0,m_hWnd,NULL);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
break;
case WM_LBUTTONDBLCLK:
break;
}
}
return 1;
}
void CAddSystemTryIconDlg::OnNextShow()
{
::ShowWindow(m_hWnd,SW_SHOW);
}void CAddSystemTryIconDlg::OnNextHide()
{
//ShowWindow(m_hWnd,SW_HIDE);
::ShowWindow(m_hWnd,SW_HIDE);
}void CAddSystemTryIconDlg::OnExit()
{
OnClose();
::DestroyWindow(m_hWnd);
}