VC中实现窗口隐藏与还原的方法

需积分: 9 2 下载量 15 浏览量 更新于2024-07-24 1 收藏 68KB DOC 举报
"VC++中实现窗口隐藏及从系统托盘恢复显示的方法" 在Microsoft Visual C++ (VC++) 开发环境中,窗口隐藏和从系统托盘恢复显示是常见的功能,通常用于实现应用程序在后台运行而不会占用桌面空间。以下是根据提供的代码片段详细解释如何在VC++中实现这一功能: 1. **窗口隐藏**: 在提供的`CTIME_POWERDlg::ToTray()`函数中,使用`ShowWindow(SW_HIDE)`方法隐藏了主窗口。`ShowWindow`是一个Windows API函数,用于控制窗口的可见性。`SW_HIDE`参数表示将窗口隐藏,不再在任务栏上显示。 2. **系统托盘图标**: - `NOTIFYICONDATA` 结构用于存储关于系统托盘图标的详细信息。 - 使用`Shell_NotifyIcon(NIM_ADD, &nid)`函数将图标添加到系统托盘。`NIM_ADD`表示添加新的图标,`nid`包含了图标的相关信息,如窗口句柄、图标ID等。 - 通过设置`nid.uCallbackMessage`为`WM_SHOWTASK`,可以指定当用户点击托盘图标时发送的自定义消息。 3. **托盘区域提示**: `nid.szTip`字段用于设置托盘图标的提示文本,`L"♀冰封星耀♂"`是示例中的提示文字。 4. **从系统托盘恢复显示**: 要从系统托盘恢复窗口,你需要处理`WM_SHOWTASK`消息。通常,你将在`CTIME_POWERDlg`类的`OnMessage`或`OnCommand`方法中处理这个自定义消息,例如: ```cpp LRESULT CTIME_POWERDlg::OnMessage(WPARAM wParam, LPARAM lParam) { if(wParam == WM_SHOWTASK) // 检查是否接收到自定义消息 { ShowWindow(SW_RESTORE); // 使用SW_RESTORE参数恢复窗口到之前的状态 Shell_NotifyIcon(NIM_DELETE, &nid); // 移除托盘图标,因为窗口已显示 } return 0; } ``` 5. **删除托盘图标**: `CTIME_POWERDlg::DeleteTray()`函数用于从系统托盘移除图标,这通常在程序退出或者用户不再需要托盘图标时执行。`Shell_NotifyIcon(NIM_DELETE, &nid)`将指定的图标从托盘区域移除。 请注意,为了完整实现上述功能,你需要确保在应用程序的主消息循环中正确处理消息,并且在适当的地方调用`CTIME_POWERDlg::ToTray()`和`CTIME_POWERDlg::DeleteTray()`方法。此外,可能还需要处理其他消息,例如`WM_DESTROY`或`WM_ACTIVATEAPP`,以确保在窗口关闭或应用程序激活/非激活时正确管理托盘图标和窗口状态。