最小化程序到托盘的问题

dragon17162 2008-02-22 10:22:51
我参照网上的代码,遍写了一个最小化程序到托盘的程序。存在几个很怪的问题,感觉莫名其妙,不知道怎么回事?可是别人软件最小化到托盘的时候都没有这样的问题:
1,双击最小化后的托盘图标,有时(在任务栏中点击使程序最小化而不是点击最小化按钮来使程序最小化)不能还原。
2,当鼠标右键点击托盘图标时,在弹出的菜单中点击退出。程序退出了,但托盘里的图标没有立即消失,直到鼠标从图标上移过。3,当程序退出时,经常会导致任务栏中的当前任务发生跳转。
大哥们请留下E-MAIL,我把代码发给你们,请你们帮我看看。
...全文
164 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dragon17162 2008-02-25
  • 打赏
  • 举报
回复
真的是太激动了,谢谢大家的热心帮助。
hityct1 2008-02-23
  • 打赏
  • 举报
回复
我的帖子,供你参考:
http://blog.csdn.net/hityct1/archive/2007/12/05/1918285.aspx
zz76073424 2008-02-22
  • 打赏
  • 举报
回复
没发现这样的问题,我电脑上运行正常。

第1条是什么错?个人感觉你的是双点显示了,没在顶层吧,被其他程序遮住了?
第2条不清楚,感觉我在onclose里删除了图标就没了,除非退出异常
my_girlf 2008-02-22
  • 打赏
  • 举报
回复
1.第一个在我的机器上不能重现,各种最小化情况都试了,可以还原。
2.void CTaskBarDlg::OnDestroy()
{
DeleteTray();

CDialog::OnDestroy();
}
这样就已经可以了的。
3.没有出现。
呵呵
dragon17162 2008-02-22
  • 打赏
  • 举报
回复
是啊,感觉有时双击时,第一次双击只是获得了焦点,第二次双击才还原。感觉怪怪的。别的软件最小化到托盘时,都没有这样的问题。
qian_longN1 2008-02-22
  • 打赏
  • 举报
回复
学习了,我也出现第二个问题,原来是没删除图标的缘故,呵呵!
tiger波波 2008-02-22
  • 打赏
  • 举报
回复
第二条很多程序都有这种现象,我以前的也是,没怎么在意

第一条怎么还有时不行呢?奇怪
qq14923349 2008-02-22
  • 打赏
  • 举报
回复
2.退出还要刷掉原图
my_girlf 2008-02-22
  • 打赏
  • 举报
回复
yxz_06@126.com.
看看。
cnzdgs 2008-02-22
  • 打赏
  • 举报
回复
都是常见问题,试试下列方法,记不清了。
1、响应WM_SYSCOMMAND消息,ID为SC_MINIMIZE时,先调基类的OnSysCommand,再ShowWindow隐藏。
2、退出前调用Shell_NotifyIcon,给NIM_DELETE参数。
3、先ShowWindow再OnClose。
flinming 2008-02-22
  • 打赏
  • 举报
回复
#define WM_NOTIFYICON WM_USER + 700

//////////////////////////////////////////////////////////////////////////
// 创建系统托盘
//////////////////////////////////////////////////////////////////////////
void InitSalver(NOTIFYICONDATA *m_tnid,HWND m_hWnd,UINT MSG_NUM)
{
//在系统托盘中创建图标
m_tnid->cbSize = sizeof(NOTIFYICONDATA);
m_tnid->hWnd = m_hWnd; //接收句柄
m_tnid->uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
m_tnid->uCallbackMessage = MSG_NUM; //回调消息号

CString lpstr;
lpstr.LoadString(IDS_STR1);

strcpy(m_tnid->szTip, lpstr); //Hint
m_tnid->uID = IDR_MAINFRAME; //图标ID
HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_tnid->hIcon = hIcon;
::Shell_NotifyIcon(NIM_ADD, m_tnid);
if(hIcon)
::DestroyIcon(hIcon);
}

//////////////////////////////////////////////////////////////////////////
// 释放系统托盘
//////////////////////////////////////////////////////////////////////////
void UnitSalver(HWND m_hWnd)
{
//释放系统托盘中程序图标
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd = m_hWnd;
tnid.uID = IDR_MAINFRAME; //保证删除的是我们的图标
Shell_NotifyIcon(NIM_DELETE,&tnid);
}

ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)

//////////////////////////////////////////////////////////////////////////
// 托盘消息处理 //
//////////////////////////////////////////////////////////////////////////
LRESULT CHtCheckHostDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
switch(lParam)
{
case WM_LBUTTONDOWN://鼠标左键
{
if(m_ShowFlag)
{
m_ShowFlag = FALSE;
}
else
{

m_ShowFlag = TRUE;
}
}
break;

case WM_RBUTTONDOWN: //鼠标右键按下
{

}
break;
}
return 0;
}

....当最小化时候
//////////////////////////////////////////////////////////////////////////
// 取消
//////////////////////////////////////////////////////////////////////////
void CDlg::OnCancel()
{


ShowWindow(SW_HIDE);//不能用SW_HIDE 和SW_SHOW,因为如果还有其他窗体显示,将没有办法隐藏
m_ShowFlag = TRUE;
return;

CDialog::OnCancel();
}

。。。。。。。。。。。。。。。。。
yuucyf 2008-02-22
  • 打赏
  • 举报
回复
2.程序退出了,但托盘里的图标没有立即消失,直到鼠标从图标上移过

应该是你没有把delete掉吧?
退出之前把delete就可以了!
Shell_NotifyIcon();
tiger波波 2008-02-22
  • 打赏
  • 举报
回复
是啊,感觉有时双击时,第一次双击只是获得了焦点,第二次双击才还原。感觉怪怪的。别的软件最小化到托盘时,都没有这样的问题。
----------------------------------------------

加上这个看看

LRESULT CTestDlg::OnMaskBar(WPARAM wp,LPARAM lp)
{
if ((wp == IDR_MAINFRAME)&&(lp == WM_LBUTTONDOWN))
{
ShowWindow(SW_SHOWNORMAL);
SetForegroundWindow(); //获得焦点
}

return 0;
}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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