用TTrayIcon创建托盘,阻止操作系统关闭时托盘会丢失,请问如何恢复?

guzhou1980 2007-01-09 01:07:32
我用如下函数达到应用程序阻止操作系统关闭的目的,但是此时用TTrayIcon创建的托盘缺丢失了,请问有什么办法恢复?
LRESULT CALLBACK MyWindowProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
switch (iMsg)
{

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
case WM_QUERYENDSESSION:
if(::MessageBox(hwnd,"是否真正关机?\n点击确定关闭本软件然后关机,点击取消后取消关机!","关机提示",MB_OKCANCEL|MB_SYSTEMMODAL)==IDOK)
{
return 1;//此处返回0则不能关机,返回1就能关机。
}
else
{
return 0;
}
}
return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}
...全文
266 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
guzhou1980 2007-01-09
  • 打赏
  • 举报
回复
怎么刷?
constantine 2007-01-09
  • 打赏
  • 举报
回复
是否做过刷新的尝试??
constantine 2007-01-09
  • 打赏
  • 举报
回复
如果只是自己的丢失,可以考虑自己用cooltrayicon控件,好像听说只有这个控件做了处理其他的都没有,我自己确实也没见过
guzhou1980 2007-01-09
  • 打赏
  • 举报
回复
如果程序不阻止操作系统关闭,那么这个程序就自动退出了,此时托盘肯定没有了。
反之,程序阻止系统关闭后自己没有退出,但是这个程序的托盘肯定会丢失。
解决办法有一个是:动态创建这个组件,在收到WM_QUERYENDSESSION消息阻止系统关闭时重画一遍托盘。

但是我想知道,如果不动态创建组件,有没有其他办法?
耙子 2007-01-09
  • 打赏
  • 举报
回复
重画一遍托盘。

1、是只有你的程序丢失trayicon,还是其他的也丢失
2、只有你的丢失,那说明你的程序有问题,如果都丢,那你只能重画一遍。
guzhou1980 2007-01-09
  • 打赏
  • 举报
回复
补充:弹出对话框关机提示后,点击取消,将取消关机操作,此时该应用程序虽然不被关闭,但是用TTrayIcon创建的托盘却丢失了。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧