1、在任务栏空的地方点鼠标右键,选择“属性”;
2、在【任务栏】选卡中,点击【自定义】;
3、在该界面中勾选【使用在任务栏上显示所有图标和通知】,点击确定即可;
4、设置完成后在任务栏托盘中就会显示所有在运行的程序以及系统图标。
上述就是Win7系统桌面右下角托盘图标不显示原因和解决方法,简单设置之后,右下角托盘图标就会显示了。
要实现将程序最小化到托盘,就要截获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()
版本太低。系统自带的legionzone托盘程序版本普遍较低,会导致无法正常启动。1、需要在网页上打开联想拯救者官网,在右上角输入legionzone。
2、下载最新的版本,安装后覆盖掉原来的旧程序即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)