窗口显示消息是什么? 最小化到托盘的对话框,想让它显示出来,用SendMessage(Hwin,WM_ACTIVATEAPP,NULL,NULL);就是显示不出来,是消息错了么?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此时你的窗口其实是被隐藏了,所以要再显示出来:this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿下面是写好的恢复界面函数 在头文件中定义消息响应函数afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;//wParam接收的是图标的ID,而lParam接收的是鼠标的行为 LRESULT CMyDlg::OnShowTask(WPARAM wParam,LPARAM lParam) { if(wParam!=IDR_MAINFRAME) return 1; switch(lParam) { case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭” LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lpoint);//得到鼠标位置 CMenu menu; menu.CreatePopupMenu();//声明一个弹出式菜单 //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。 menu.AppendMenu(MF_STRING,WM_DESTROY,L"关闭"); //确定弹出式菜单的位置 menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); HMENU hmenu=menu.Detach();//资源回收 menu.DestroyMenu(); delete lpoint; break; case WM_LBUTTONDBLCLK://双击左键的处理 this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿 DeleteTray(); break; default: break; } return 0; } 再附送一个删除托盘图标函数void CMyDlg::DeleteTray(){ NOTIFYICONDATA nid; nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); wcscpy(nid.szTip,L"程序名称"); //信息提示条 Shell_NotifyIcon(NIM_DELETE,&nid); //在托盘区删除图标} WM_ACTIVATEAPP好像是把不活动窗口激活,不包括图标用SendMessage(Hwin,WM_SHOWWINDOW,TRUE,NULL);试试 补齐吧:程序实现1、自定义消息WM_SHOWTASK: #define WM_SHOWTASK (WM_USER +1)2、在MFC的::OnSysCommand(UINT nID, LPARAM lParam)函数体中增加一个命令响应 if(nID==SC_MINIMIZE) ToTray(); //最小化到托盘的函数3、在消息映射中添加 ON_MESSAGE(WM_SHOWTASK,OnShowTask),其中WM_SHOWTASK是消息名,OnShowTask是自己定义的消息响应函数,后面有说明。四、具体函数内容1、最小化到托盘函数void CMyDlg::ToTray(){ NOTIFYICONDATA nid; nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); wcscpy(nid.szTip,L"程序名称"); //信息提示条 Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标 ShowWindow(SW_HIDE); //隐藏主窗口} 可以用FindWindow 之类的找到对应窗体的句柄,或者枚举进程 找到这个这个窗口句柄Hwin然后用SendMessage(Hwin,WM_SHOWWINDOW,TRUE,NULL);试试 响应WM_SIZE消息,判断nType==SIZE_MINIMIZED时,用ShowWindow(SW_HIDE)将窗口隐藏;当要还原时,先用ShowWindow(SW_SHOW)显示窗口,再用ShowWindow(SW_RESTORE)还原窗口。 这个窗口没有最小化那个按钮,也不相应!,是不是就直接ShowWindow(Hwin,SW_SHOW);ShowWindow(Hwin,SW_RESTORE); ::ShowWindow(Hwin,SW_SHOW);::ShowWindow(Hwin,SW_RESTORE); 那就是直接用ShowWindow(Hwin,SW_HIDE)隐藏,ShowWindow(Hwin,SW_SHOW)显示,不需要最小化了。 怎么知道一个已创建的SOCKET邦定了哪个端口? 腾讯新闻网怎么有问题了 怎么样读取一个文件的大小 用ODBC API 如何判断表是否存在?请各位高手指教!!! 监视驱动器状态? 新手请教关于VARIANT的数据类型的使用,请给于帮助! >>>>>ProcessShellCommand<<<<< 如何做一个后台服务程序! 大家好,在注册表里,我想用VC新建一个字符串值,名为fastreboot怎么 作呀,高分,急,手里没有MSDN 关于socket 一个C语言内存管理问题 dll注入执行汇编代码的问题
在头文件中定义消息响应函数afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
LRESULT CMyDlg::OnShowTask(WPARAM wParam,LPARAM lParam)
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);//得到鼠标位置
CMenu menu;
menu.CreatePopupMenu();//声明一个弹出式菜单
//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。
menu.AppendMenu(MF_STRING,WM_DESTROY,L"关闭");
//确定弹出式菜单的位置
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
HMENU hmenu=menu.Detach();//资源回收
menu.DestroyMenu();
delete lpoint;
break;
case WM_LBUTTONDBLCLK://双击左键的处理
this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿
DeleteTray();
break;
default:
break;
}
return 0;
}
void CMyDlg::DeleteTray()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
wcscpy(nid.szTip,L"程序名称"); //信息提示条
Shell_NotifyIcon(NIM_DELETE,&nid); //在托盘区删除图标
}
用SendMessage(Hwin,WM_SHOWWINDOW,TRUE,NULL);试试
程序实现
1、自定义消息WM_SHOWTASK: #define WM_SHOWTASK (WM_USER +1)
2、在MFC的::OnSysCommand(UINT nID, LPARAM lParam)函数体中增加一个命令响应
if(nID==SC_MINIMIZE) ToTray(); //最小化到托盘的函数
3、在消息映射中添加 ON_MESSAGE(WM_SHOWTASK,OnShowTask),其中WM_SHOWTASK是消息名,
OnShowTask是自己定义的消息响应函数,后面有说明。
四、具体函数内容
1、最小化到托盘函数
void CMyDlg::ToTray(){
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
wcscpy(nid.szTip,L"程序名称"); //信息提示条
Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
ShowWindow(SW_HIDE); //隐藏主窗口
}
::ShowWindow(Hwin,SW_RESTORE);