象Netants一样,点最小化按钮缩小到Tray区是怎么做的?

zjjjjz 2000-03-09 11:37:00
最小化消息是怎么获取的。
...全文
277 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
prodigy 2000-10-13
  • 打赏
  • 举报
回复
I wrapped a class CTray to realize that functionality
tibetty 2000-10-12
  • 打赏
  • 举报
回复
在WM_MINIMIZE消息中要ShowWindow(False)一下;或者主窗口的扩展样式增加WS_EX_TOOLHELP,这样在任何时候都不会在TaskBar上显示图标
NiceFeather 2000-10-12
  • 打赏
  • 举报
回复
使用VC和VB对系统托盘编程的方法
Windows下许多程序都在系统托盘——屏幕右下角(Windows时间、输入法显示位置)显示程序图标,比如金山词霸、PC-cillin、SQL Server等,如何进行少量编程实现这一功能?WinApi提供了一个函数,帮助实现系统托盘图标的显示、删除、闪动等。在此,作者根据自己的实际经验提供在Visual Basic和Visual C++下的编程方法。
一、 WinApi的Shell_NotifyIcon函数介绍
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA pnid);
参数说明:
DWORD dwMessage 有三个选择:
0——NIM_ADD 在系统托盘加上图标
1——NIM_DELETE 删除系统托盘上的图标
2——NIM_MODIFY 更换系统托盘上的图标
pnid是PNOTIFYICONDATA数据类型,包括
PNOTIFYICONDATA数据结构如下:
typedef struct _NOTIFYICONDATA {
DWORD cbSize; //本数据结构的字节数
HWND hWnd; //图标所属的Windows程序窗口句柄
UINT uID;
UINT uFlags; //让图标变量NIF_ICON 、鼠标移动到图标处的事件变量 NIF_TIP、信息变量NIF_MESSAGE有效
UINT uCallbackMessage; //在图标位置的发生鼠标事件时向程序发送的消息
HICON hIcon; //图标指针
char szTip[64]; //当鼠标移动到图标位置时,自动显示的文字
} NOTIFYICONDATA, *PNOTIFYICONDATA;

二、在Visual Basic下的使用方法
1、 声明
Option Explicit
Private Type NOTIFYICONDATA ' 定义NOTIFYICONDATA数据类型
cbSize As Long
hWnd As Long
uId As Long
uFlags As Long
ucallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
' 定义对图标操作的常量
Private Const NIM_ADD = &H0 ' 增加图标
Private Const NIM_MODIFY = &H1 ' 改变图标
Private Const NIM_DELETE = &H2 ' 删除图标
' 以下定义鼠标事件常量
Private Const WM_MOUSEMOVE = &H200 ' 鼠标移动常量
Private Const WM_LBUTTONDBLCLK = &H203 ' 双击左鼠标按钮
Private Const WM_LBUTTONDOWN = &H201 ' 左鼠标按钮按下
Private Const WM_LBUTTONUP = &H202 ' 松开左鼠标按钮
Private Const WM_RBUTTONDBLCLK = &H206 ' 双击右鼠标按钮
Private Const WM_RBUTTONDOWN = &H204 ' 右鼠标按钮按下
Private Const WM_RBUTTONUP = &H205 ' 松开右鼠标按钮
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
' WinApi函数Shell_NotifyIcon声明
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
' 定义NOTIFYICONDATA类型变量
Dim t As NOTIFYICONDATA
2、 方法
' 当程序运行时对变量t的赋值
Private Sub Form_Load()
t.cbSize = Len(t)
t.hwnd = Form1.hwnd
t.uId = 1&
t.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
t.ucallbackMessage = WM_MOUSEMOVE
't.ucallbackMessage = WM_LBUTTONUP
t.hIcon = Form1.Icon
t.szTip = "这是我的系统托盘程序"
End Sub
' 鼠标对图标操作事件的处理——体现在鼠标移动事件上
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
Dim msg As Long
Dim sFilter As String
msg = x / Screen.TwipsPerPixelX '鼠标按下时的按钮信息
Select Case msg
Case WM_LBUTTONDOWN ' 左鼠标按下事件
Me.Show ' 单击图标时显示程序窗口
Case WM_LBUTTONUP ' 左鼠标松开事件
Case WM_LBUTTONDBLCLK ' 左鼠标双击事件
Case WM_RBUTTONDOWN ' 右鼠标按下事件
Me.PopupMenu system ' 右鼠标按下时弹出菜单system是自定义的菜单
Case WM_RBUTTONUP ' 右鼠标松开事件
Case WM_RBUTTONDBLCLK ' 右鼠标双击事件
End Select
End Sub

3、 改变图标
Shell_NotifyIcon NIM_DELETE, t
If t.hIcon = Form2.Icon Then t.hIcon = Form1.Icon Else t.hIcon = Form2.Icon
Shell_NotifyIcon NIM_ADD, t

三、 在Visual C++下的使用方法
在Visual C++下实现时可以不用声明,直接使用函数
在窗口显示事件时赋值变量,并显示系统托盘图标
void ::OnShowWindow(BOOL bShow, UINT nStatus)
{
::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
if(nStatus){
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd =m_hWnd;
tnid.uID = 1;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
//tnid.uCallbackMessage = MYWM_NOTIFYICON;
tnid.hIcon = m_hIcon;
strcpy(tnid.szTip, "这是我的第一个系统托盘程序!\0");
res = Shell_NotifyIcon(NIM_ADD, &tnid);
if (m_hIcon)
DestroyIcon(m_hIcon);
}
}
其他操作类似Visual Basic下的使用方法。
zjjjjz 2000-03-10
  • 打赏
  • 举报
回复
查询出现ODBC错误,是不是就今天例外.
GoldenLion 2000-03-09
  • 打赏
  • 举报
回复
1. 截最小化消息:WM_SYSCOMMAND,wParam=SC_MINIMIZE
2. 缩小到tray区:Shell_NotifyIcon(),with the dwMessage parameter set to NIM_ADD。
radish 2000-03-09
  • 打赏
  • 举报
回复
查查旧贴,这个问题已问过多次了

16,470

社区成员

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

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

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