Windows操作系统中的某些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互,比如金山毒霸等应用程序,我们有时也需要编制一些仅在后台运行的类似程序,为了不干扰前台程序的运行界面和不显示不必要的窗口,应使程序运行时的主窗口不可见。同时将一个图标显示在任务栏右端静态通告区中并响应用户的鼠标动作。下面介绍Visual C++开发这类程序的设计方法。 @(."[O:
5r;)Ppo
一、隐藏程序的主窗口 1k"i"kRM
,eL&Ner
首先,要使程序的主窗口不可见,并且不在任务栏上出现任务按钮,要做到这两点,需分别设置主边框窗口的风格和扩展风格: J|cw9u
Cn.dv-
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) .I>CL4_
{ y;O
6q206
cs.style =WS_POPUP;//使主窗口不可见 49Y:}<Yd
cs.dwExStyle |=WS_EX_TOOLWINDOW;//不显示任务按钮 Lf{pTxKr
return CFrameWnd::PreCreateWindow(cs); h,]lN'JG{
} jT;'T$
"'>fTk_
二、将表示程序运行的图标加入任务栏 r8A'8g4cM
!u`f?=s;
在主框架窗口的CMainFrame::OnCreate()函数中调用上述函数,就可以在任务条上显示图标这一步是利用系统API函数Shell_NotifyIcon()将一个图标显示在任务栏的通告区中。该函数的原型为:在调用该函数之前,需要确定其参数的取值。其中Shell_NotifyIcon()函数的第一个参数是一个预定义的消息,可以取如下值之一:NIM_ADD、NIM_DELETE或NIM_MODIFY,分别表示添加图标、删除图标或修改图标。另一个参数为指向NOTIFYICONDATA类型的指针。其原型为: O_5;?$[m
r 2{7h>
typedef struct _NOTIFYICONDATA { ] HRHF'4
DWORD cbSize; DvA#zX[
HWND hWnd; m5hu;>gt
UINT uID; ;zWiPnX}
UINT uFlags; 2"o<>d
UINT uCallbackMessage; HhzP Kd
HICON hIcon; j",*&sy
charszTip[64]; } <