请问我的程序最小化到系统托盘时,任务栏上怎么不消失???

maomaosansan 2005-03-25 02:46:18
我按照 hyamw(林锋) 介绍的方法做托盘程序,可是任务栏上的程序不消失,我该如何实现托盘程序??(编程环境winxp sp2 + vc.net)
(http://community.csdn.net/Expert/topic/3824/3824607.xml?temp=.9463312)

NOTIFYICONDATA m_tnid; //类成员变量
m_tnid.cbSize=sizeof(NOTIFYICONDATA);
m_tnid.hWnd=m_hWnd;
m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
m_tnid.uCallbackMessage=MYWM_NOTIFYICON;
m_tnid.uID=IDR_MAINFRAME;
_tcscpy(m_tnid.szTip,_T("剪贴板监视器"));
m_tnid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
Shell_NotifyIcon(NIM_ADD,&m_tnid);
SetWindowText(_T("剪贴板监视器"));

我如果按照下面的做法可以实现任务栏上的程序消失,但是程序占用大量的内存
void CMainFrame::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

if(!m_bShutdown)
ShowWindow(SW_HIDE);
else
{
pInfo->iConnet=-2;
while (pRunThread!=NULL)
{
Sleep(100);
}
Shell_NotifyIcon(NIM_DELETE,&m_tnid);
CFrameWnd::OnClose();
}
}
...全文
390 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
maomaosansan 2005-03-28
  • 打赏
  • 举报
回复
已解决 :http://community.csdn.net/Expert/topic/3187/3187683.xml?temp=8.189029E-02
maomaosansan 2005-03-27
  • 打赏
  • 举报
回复
谢谢大家,我用了一个比较笨的法子实现:处理WM_SYSCOMMAN时,判断其wParam是否等于SC_MINIMIZE 如果是就开个定时器,在ontimer里进行ShowWindow(SW_HIDE);这样可以实现真正的最小化(不信可以用任务管理器看看资源的占用:) )
向大虾们问一个问题(也是我这种法子的一个bug)程序最小化后,点击任务栏的标志,程序响应的是什么消息????
shager 2005-03-26
  • 打赏
  • 举报
回复
你可以处理WM_CLOSE消息,点关闭的那个叉的时候产生WM_CLOSE消息,在这里ShowWindow(hwnd,SW_HIDE)就可以了,如果要点最小化图标来实现最小化和隐藏就要处理WM_SYSCOMMAN了,判断其wParam是否等于SC_MINIMIZE,然后再用ShowWindow()就可以
hustwf 2005-03-25
  • 打赏
  • 举报
回复
不知道别人怎么做的,我这样写的,呵呵
LRESULT CDugu3Dlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if ((message==WM_SYSCOMMAND)&&(wParam==0x0f020))
{
LRESULT res=CDialog::DefWindowProc(message, wParam, lParam);
this->ShowWindow(SW_HIDE);
return res;
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
maomaosansan 2005-03-25
  • 打赏
  • 举报
回复
如何最小化和托盘同时实现???
yafizyh 2005-03-25
  • 打赏
  • 举报
回复
相应不同消息就行了
yafizyh 2005-03-25
  • 打赏
  • 举报
回复
不是最小化,是隐藏窗口,在托盘添加图表。
maomaosansan 2005-03-25
  • 打赏
  • 举报
回复
谢谢 ww51xh(VC菜鸟)
但是这样并没有把程序最小化,程序这样还会占有大量内存,我想知道如何最小化和托盘同时实现,不信你看看:最小化的时候程序占用的资源 远远 小于这种情况下的资源占用。
ww51xh 2005-03-25
  • 打赏
  • 举报
回复
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
bool b;
if (nID == SC_MINIMIZE)
{
b=ShowWindow(SW_HIDE);//b=true
return ;//加上这一句
}
if (nID ==SC_CLOSE)
{
m_bShutdown=TRUE;
}
CFrameWnd::OnSysCommand(nID, lParam);
}
maomaosansan 2005-03-25
  • 打赏
  • 举报
回复
等待中。。。。
maomaosansan 2005-03-25
  • 打赏
  • 举报
回复
就是说我在
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)里的 ShowWindow(SW_HIDE);没有起到作用;
而在 void CMainFrame::OnClose() 里的 ShowWindow(SW_HIDE)才起到作用;最小化里为什么不行??
maomaosansan 2005-03-25
  • 打赏
  • 举报
回复
任务栏上的可以隐藏
ShowWindow(SW_HIDE);
--------------------
我的程序如下:
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
bool b;
if (nID == SC_MINIMIZE)
{
b=ShowWindow(SW_HIDE);//b=true
}
if (nID ==SC_CLOSE)
{
m_bShutdown=TRUE;
}
CFrameWnd::OnSysCommand(nID, lParam);
}

但是 任务栏上还有!!
oyljerry 2005-03-25
  • 打赏
  • 举报
回复
任务栏上的可以隐藏
ShowWindow(SW_HIDE);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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