分享
 
 
 

像qq一样变换图标

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

像qq一样变换图标在写代码之前,我先介绍一个函数。

以下摘至msdn2002

Shell_NotifyIcon 函数

--------------------------------------------------------------------------------

发送一个消息到任务兰的状态区

语法

BOOL Shell_NotifyIcon( DWORD dwMessage,

PNOTIFYICONDATA lpdata

);

参数

dwMessage

传入的DWORD参数制定将要发生的动作。可以是以下几个值

NIM_ADD

添加图标到状态区. NOTIFYICONDATA结构的hWnd和uId指出那个将对那个图标进行操作。

NIM_DELETE

删除图标。

NIM_MODIFY

修改图标

NIM_SETFOCUS

5.0版本可以使用,这个版本在WINDOWS2000上可以找到,NT,98/95都是旧版本。

Returns focus to the taskbar notification area(设置焦点到任务栏消息区).

如果任务栏显示了一个菜单,但是用户想使用 ESC 取消他, 使用 NIM_SETFOCUS 参数可以返回到消息区。

NIM_SETVERSION

5.0版本 指出任务栏的行为与版本一致,版本的参数在NOTIFYICONDATA结构中可以找到。

lpdata

传入参数,NOTIFYICONDATA结构的地址.

NOTIFYICONDATA 结构

--------------------------------------------------------------------------------

包含系统处理任务栏状态区的消息。

语法

typedef struct _NOTIFYICONDATA {

DWORD cbSize;//结构大小

HWND hWnd;//接受任务栏消息的窗口

UINT uID;//应用程序定义的图标ID,当有多个图标时这个ID不代表某一个必须重新定义一个(参见代码)

UINT uFlags;//掩码指出那几个成员有效(具体见下)

UINT uCallbackMessage;

HICON hIcon;

TCHAR szTip[64];

DWORD dwState;

DWORD dwStateMask;

TCHAR szInfo[256];

union {

UINT uTimeout;

UINT uVersion;

};

TCHAR szInfoTitle[64];

DWORD dwInfoFlags;

GUID guidItem;

} NOTIFYICONDATA, *PNOTIFYICONDATA;

uFlags

NIF_ICON uIcon有效

NIF_MESSAGE uCallbackMessage 有效

NIF_TIP szTip有效

NIF_STATE dwStateMask有效

NIF_INFO 使用气泡提示代替标准提示 szInfo, uTimeout, szInfoTitle, dwInfoFlags有效

NIF_GUID 保留

uCallbackMessage

应用程序定义的消息,系统用它来处理任务栏状态区的消息。

hIcon

人物栏状态区图标,版本不一样显示图标的颜色位数不一样。

szTip

字符串提示。版本不一样字符串长度不一样。5.0是128个char。4.0是64。

dwState

图标状态5.0版本

NIS_HIDDEN

隐藏

NIS_SHAREDICON

显示

dwStateMask

5.0 指定将要修改的状态。比如使用NIS_HIDDEN来隐藏图标。

szInfo

5.0版本用于气泡提示最长255个char。

uTimeout

毫秒延时值。

uVersion

指定版本值

szInfoTitle

气泡提示的标题63各字符。

dwInfoFlags

5.0版本. Flags 添加图标给气泡提示。

可以是以下值

NIIF_ERROR

An error icon.

NIIF_INFO

An information icon.

NIIF_NONE

No icon.

NIIF_WARNING

A warning icon.

NIIF_ICON_MASK

Version 6.0. Reserved.

NIIF_NOSOUND

Version 6.0. Do not play the associated sound. Applies only to balloon ToolTips.

guidItem

6.0版本,保留。

以下介绍代码 vc6 win32

首先要保证project setting/link library中设置shell32.lib

//stdafx.中加入

#include <shellapi.h>

#define NORMAL 1

#define RUN 2

#define ID_TIMER 1

#define UWM_NOTIFYICON WM_USER+1

//trayicon.cpp

// TrayIcon.cpp : Defines the entry point for the application.

//

#include "stdafx.h"

#include "resource.h"

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);

HINSTANCE hinst;

HICON hicon[2];

UINT uStatus=NORMAL;//程序运行状态 NORMAL图标不变化 RUN图标变化

int iIcon=0;//指示但前使用的图标

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

//declare varibale

static TCHAR szAppName[]=TEXT("托盘图标");

TCHAR szCaption[]=TEXT("托盘图标使用例子");

HWND hwnd;

MSG msg;

WNDCLASS wndclass;

hinst=hInstance;

hicon[0]=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));

hicon[1]=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON2));

wndclass.style=CS_HREDRAW|CS_VREDRAW;

wndclass.lpfnWndProc=WndProc;//窗口过程地址

wndclass.cbClsExtra=0;//指定额外分配给wndclass的字节

wndclass.cbWndExtra=0;//指定额外的字节分配给wnd实例

wndclass.hInstance=hInstance;

wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);

wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);

wndclass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));

wndclass.lpszClassName=szAppName;

wndclass.lpszMenuName=NULL;

if(!RegisterClass(&wndclass))

{

//ErrorMessageBox();

return 0;

}

//默认的窗口风格且主窗口不可见不再任务栏

hwnd=CreateWindowEx(WS_EX_TOOLWINDOW,szAppName,szCaption,WS_OVERLAPPEDWINDOW|WS_POPUP,CW_USEDEFAULT,

CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,SW_SHOW);

UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

NOTIFYICONDATA tnd;

tnd.cbSize=sizeof(NOTIFYICONDATA);

tnd.hWnd=hwnd;

strcpy(tnd.szTip,TEXT("托盘示例"));

tnd.uCallbackMessage=UWM_NOTIFYICON;

tnd.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;

tnd.uID=IDI_ICON;//前面有定义,注意不是图标IDI_ICON1或者IDI_ICON2

switch(message)

{

//TIMER事件中使图标变化

case WM_TIMER:

if(iIcon==0)

iIcon++;

else

iIcon--;

tnd.hIcon=hicon[iIcon];

Shell_NotifyIcon(NIM_MODIFY,&tnd);

return 0 ;

case WM_COMMAND:

switch (LOWORD (wParam))

{

//退出程序

case IDM_APP_EXIT:

SendMessage (hwnd, WM_CLOSE, 0, 0) ;

return 0;

//启动TIMER

case IDM_RUN:

if (SetTimer (hwnd, ID_TIMER, 500, NULL))

uStatus=RUN;

return 0;

//停止TIMER

case IDM_STOP:

KillTimer (hwnd, ID_TIMER) ;

iIcon=0;

tnd.hIcon=hicon[iIcon];

Shell_NotifyIcon(NIM_MODIFY,&tnd);

uStatus=NORMAL;

return 0 ;

}

return 0;

//自定义事件处理鼠标在TRAYICON上的点击

case UWM_NOTIFYICON:

//如果是鼠标右击

if((UINT) lParam==WM_RBUTTONDOWN)

{

//如果是IDI_ICON

if((UINT)wParam==IDI_ICON)

{

POINT pt;

HMENU hmenu,hsubmenu;

hmenu=LoadMenu(hinst,MAKEINTRESOURCE(IDR_MENU1));

hsubmenu=GetSubMenu(hmenu, 0);

//取得光标当前位置

GetCursorPos(&pt);

SetForegroundWindow(hwnd);

if(uStatus==NORMAL)

{

EnableMenuItem (hmenu, IDM_STOP, MF_GRAYED) ;

EnableMenuItem (hmenu, IDM_RUN, MF_ENABLED) ;

}

else

{

EnableMenuItem (hmenu, IDM_RUN, MF_GRAYED) ;

EnableMenuItem (hmenu, IDM_STOP, MF_ENABLED) ;

}

//弹出菜单

TrackPopupMenu(hsubmenu,

TPM_LEFTALIGN | TPM_RIGHTBUTTON,

pt.x, pt.y, 0, hwnd, NULL);

DestroyMenu(hmenu);

}

}

return 0;

//窗体产生时在托盘区显示图标

case WM_CREATE:

tnd.hIcon=hicon[0];

Shell_NotifyIcon(NIM_ADD,&tnd);

return 0;

case WM_PAINT:

hdc=BeginPaint(hwnd,&ps);

EndPaint(hwnd,&ps);

return 0;

//退出使删除图标

case WM_CLOSE:

Shell_NotifyIcon(NIM_DELETE,&tnd);

PostQuitMessage(0);

return 0;

}

return DefWindowProc(hwnd,message,wParam,lParam);

}

/*

void ErrorMessageBox()

{

LPVOID lpMsgBuf;

FormatMessage(

FORMAT_MESSAGE_ALLOCATE_BUFFER |

FORMAT_MESSAGE_FROM_SYSTEM |

FORMAT_MESSAGE_IGNORE_INSERTS,

NULL,

GetLastError(),

MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language

(LPTSTR) &lpMsgBuf,

0,

NULL

);

MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );

LocalFree( lpMsgBuf );

}*/

代码下载

我的主页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有