下沙论坛

 找回密码
 注册论坛(EC通行证)

用新浪微博连接

一步搞定

QQ登录

QQ登录

下沙大学生网QQ群8(千人群)
群号:6490324 ,验证:下沙大学生网。
用手机发布本地信息严禁群发,各种宣传贴请发表在下沙信息版块有问必答,欢迎提问 提升会员等级,助你宣传
新会员必读 大学生的论坛下沙新生必读下沙币获得方法及使用
查看: 5444|回复: 10
打印 上一主题 下一主题

[VC孤芳自赏]NT下Explorer崩溃后NotifyTray图标的生成

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2004-12-13 21:13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有些同学在编程中常问我关于程序在Explorer崩溃重建后,该如何把系统托盘上的小图标重建回去。
$ s( f# Q2 V* }- n) F; S6 L$ `. X' }, ^  H( N; k8 j7 S
其实这个很简单,Explorer重建之后,会产生一个TaskbarCreated事件,我们在程序里向系统注册这个事件,( e( h. f, G2 f% f# I. |% f
const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("TaskbarCreated"));
% S' W8 L* o/ C& q; L8 W3 c然后在程序的WindowProc里处理注册的消息;' U# l6 L2 C% A' W$ e
LRESULT XXXXXX::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) # O% \2 R/ q$ H+ j) q% y" u
{
/ O) T7 d! w+ g1 c8 p% h% r // TOD Add your specialized code here and/or call the base class6 E, k# H5 ?% _( s; Q& T, Y6 d
if (message == WM_TASKBARCREATED)0 {# u% \7 }& l6 y  F' D; V
{
# Y6 g! o8 k0 z, z9 ^) ?: s( q, R6 |  m_nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;' Q  ~) y, L/ N, P
  Shell_NotifyIcon(NIM_ADD, &m_nid);
  @+ g  J3 k0 R4 K }
; f5 I; Y0 w+ ]: W- s return CFrameWnd::WindowProc(message, wParam, lParam);
( R/ b2 ]2 r- X) ~, d6 A}: w1 F4 }5 `& j! K1 p( A; @) j' Q3 a
在接收到Explorer重建的消息后,我们用NIM_ADD参数重建自已的消息图标。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩 转发到微博

该用户从未签到

2
发表于 2004-12-13 23:50:00 | 只看该作者

MSDN上说是在IE4以后的系统中会有这个产生

- U* Z. e. G/ t

With Internet Explorer 4.0 and later, the Shell notifies applications that the taskbar has been created. When the taskbar is created, it registers a message with the TaskbarCreated string and then broadcasts this message to all top-level windows. When your taskbar application receives this message, it should assume that any taskbar icons it added have been removed and add them again. This feature generally applies only to services that are already running when the Shell begins execution. The following example shows a very simplified method for handling this case.

' H2 r" R' s) [. q i LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, / \, Z1 M: L. h# [ `' O LPARAM lParam)# u% p6 ^' ?) J { . ]1 z2 @: _2 R6 e; `) I" K static UINT s_uTaskbarRestart; ! j8 F! e+ X, F' N+ I5 a6 [: V/ R; A- M1 f: R& L7 d, A/ m { switch(uMessage) 6 N, V; [* X4 ?* t { : O ?1 O- `! K) y3 s: [ case WM_CREATE:$ \5 g4 w1 G6 Z1 P s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated")); % I0 f; h4 z# c7 \" q6 o- W break;' j" @4 y/ g4 n4 H , q1 r; y; c |( A4 ]2 Z/ q default:. j2 i2 ]4 F9 l! B: T3 i if(uMessage == s_uTaskbarRestart) % E4 ]& A n; n T& C AddTaskbarIcons();$ F- n& C) C0 d break; 3 o( v& i8 k7 {) w P } ' h% S- F1 \6 V: ?+ G# H1 X 5 ^% D2 x3 M K. x" m( B return DefWindowProc(hWnd, uMessage, wParam, lParam); ; h+ Y- w0 F! [+ N8 k}* S' b, g: F7 J/ Q# [9 a
[此贴子已经被作者于2004-12-13 23:50:57编辑过]
6 V s- E& O6 R) ~. ]0 T

该用户从未签到

3
发表于 2004-12-14 17:03:00 | 只看该作者
什么跟什么呀???看不懂

该用户从未签到

4
发表于 2005-2-6 00:36:00 | 只看该作者

编译一下,发下出来.我这没VC

该用户从未签到

5
发表于 2005-2-6 17:36:00 | 只看该作者
编译后的文件还有意义吗?

该用户从未签到

6
发表于 2005-2-18 09:55:00 | 只看该作者
我要这程序

该用户从未签到

7
发表于 2005-2-18 10:48:00 | 只看该作者

我要这程序有用啊~~~

该用户从未签到

8
 楼主| 发表于 2005-2-21 22:45:00 | 只看该作者
要这东西有什么用?

该用户从未签到

9
发表于 2005-2-23 03:20:00 | 只看该作者

天书/?

该用户从未签到

10
发表于 2005-2-23 06:19:00 | 只看该作者
挂传奇世界的时候,下面的图表。。。有时候出错了就不见了

该用户从未签到

11
 楼主| 发表于 2005-2-23 09:13:00 | 只看该作者
那没有用的……只能修复本身的。我可以考虑做一个你要的。

本版积分规则

关闭

下沙大学生网推荐上一条 /1 下一条

快速回复 返回顶部 返回列表