怎么设置程序启动后最小化到托盘? 50

设了个自启动的程序,运行方式最小化,也设置了最小化到托盘。但启动后会先最小化到桌面下方,要打开在点击最小化才会到托盘。怎么设置程序启动后自动最小化到托盘?... 设了个自启动的程序,运行方式最小化,也设置了最小化到托盘。但启动后会先最小化到桌面下方,要打开在点击最小化才会到托盘。怎么设置程序启动后自动最小化到托盘? 展开
 我来答
缘若梦醒
2016-02-20 · 知道合伙人数码行家
缘若梦醒
知道合伙人数码行家
采纳数:25731 获赞数:59462
计算机领域从业二十年。

向TA提问 私信TA
展开全部
要实现将程序最小化到托盘,就要截获WM_SIZE消息,并作出相应的消息响应。(WM_SIZE在窗口大小改变时被抛出)
可以重载OnSize()方法,实现托盘图标。
数据结构NOTIFYICONDATA用来储存托盘图标的信息,结构如下:
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
WCHAR szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;

首先要在对话框类中加入NOTIFYICONDATA变量:
NOTIFYICONDATA nid;
然后要在OnInitDialog()中对nid进行一些初始化:
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); //数据的大小
nid.hWnd = this->GetSafeHwnd(); //获取当前窗口句柄
nid.uID = 100; //指定该nid的ID
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ; //定义图标的属性:图标有效|自定义消息有效|鼠标指向显示文字有效
nid.uCallbackMessage = WM_TRAYICON_RESTORE; //定义CALLBACK消息名称,用来响应对托盘图标的操作
nid.hIcon = m_hIcon; //指定显示的图标
wcscpy(nid.szTip, _T("TrayIcon")); //鼠标指向图标时的提示框

当然在头文件中要定义好WM_TRAYICON_RESTORE,
#defined WM_TRAYICON_RESTORE WM_USER+101 //这个值一般要大于100

重载OnSize()方法,假如对话框类是CTrayIconDlg;
void CTrayIconDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

if (nType==SIZE_MINIMIZED) //如果事件为最小化
{
Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
ShowWindow(SW_HIDE); //隐藏主窗口
}
}

运行程序,最小化窗口,是不是成功将窗口藏到系统托盘了。
现在还不能让程序窗口还原,无论单击,双击小图标都没反应,那是因为没有对其消息进行处理。
首先在CTrayIconDlg类中加入方法:
afx_msg LRESULT OnRestore(WPARAM wParam, LPARAM lParam);

实现如下:
LRESULT CTrayIconDlg::OnRestore(WPARAM wParam, LPARAM lParam)
{
if( lParam == WM_LBUTTONDOWN ) //如果在图标中单击左键则还原
{
ShowWindow(SW_SHOWNORMAL); //显示主窗口
this->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//使窗口总是在最前面
//Shell_NotifyIcon(NIM_DELETE,&nid); //若加入这行,则在窗口还原后删除托盘图标,否则保留托盘图标
}
return 0;
}

把该方法加入消息映射表:
将ON_MESSAGE(WM_TRAYICON_RESTORE, OnRestore)插到映射表中
BEGIN_MESSAGE_MAP(CForexDemoDlg, CDialog)
...
...
ON_MESSAGE(WM_TRAYICON_RESTORE, OnRestore)
END_MESSAGE_MAP()
o0田野0o
2016-02-20 · TA获得超过5103个赞
知道大有可为答主
回答量:4314
采纳率:90%
帮助的人:456万
展开全部
要程序本身支持,不支持的要用托盘管理软件。

程序本身不支持怎么设置也没用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式