精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>WINDOWS界面设计>>使用任务栏图标(BCB)

主题:使用任务栏图标(BCB)
发信人: skyice()
整理人: wenbobo(2002-12-27 15:57:42), 站内信件
    API 中有一个 Shell_NotifyIcon(DWORD dwMessage,NOTIFYICONDATA 
pind) 函数,其中消息 dwMessage 有三个值:
    NIM_ADD:    添加一个图标
    NIM_MODIFY: 修改一个图标
    NIM_DELETE: 删除一个图标
    这三个值分别告诉 Shell_NotifyIcon 该做什么动作,NOTIFYICONDATA 
是一个含有七个域的结构:
    DWORD cbSize;          // NOTIFYICONDATA 结构的大小
    HWND hWnd;             // 图标所属窗口的句柄
    UINT uID;              // 任务栏图标号
    UINT uFlags;           // 标志、可以是 NIF_ICON、NIF_MESSAGE、
NIF_TIP 或其组合
    UINT uCallbackMessage; // 窗口接收在任务栏图标范围内发生的鼠标
事件
    HICON hIcon;           // 图标句柄
    char szTip[64];        // 图标的提示信息
    这些定义都包含在 shellapi.h 中。
    // trayicon.h
//-------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <shellapi.h>
#include <stdlib.h>
//-------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
    void __fastcall FormClose(TObject *Sender, 
        TCloseAction &Action);
private: // User declarations
    NOTIFYICONDATA m_notify;
    bool m_bOpen;
    MESSAGE void MyMessage(TMessage & mymsg);
public: // User declarations
    __fastcall TForm1(TComponent* Owner);
    void AddIcon(void);
    void ModifyIcon(void);
    void DeleteIcon(void);
    TIcon * ShowIcon;
    TIcon * HideIcon;
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_COMMAND,TMessage,MyMessage)
    END_MESSAGE_MAP(TForm);
};
//-------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//-------------------------------------------------------
#endif

    // tyaricon.cpp
//-------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "tyaricon.h"

//-------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    ShowIcon=new TIcon();
    HideIcon=new TIcon();
    ShowIcon->LoadFromFile("face03.ico");
    HideIcon->LoadFromFile("face02.ico");
    m_bOpen=true;
    AddIcon();
}
//-------------------------------------------------------

void TForm1::AddIcon(void)
{
    m_notify.cbSize=sizeof(NOTIFYICONDATA);
    m_notify.hWnd=Form1->WindowHandle;
    m_notify.uID=0;
    m_notify.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
    m_notify.uCallbackMessage=WM_COMMAND;
    m_notify.hIcon=(HICON)ShowIcon->Handle;
    lstrcpy(m_notify.szTip,"显示");
    Shell_NotifyIcon(NIM_ADD,&m_notify);
}
//-------------------------------------------------------

void TForm1::ModifyIcon(void)
{
    m_notify.hIcon=m_bOpen?(HICON)HideIcon->Handle:
        (HICON)ShowIcon->Handle;
    lstrcpy(m_notify.szTip,(m_bOpen?"打开":"关闭"));
    Shell_NotifyIcon(NIM_MODIFY,&m_notify);
    m_bOpen=! m_bOpen;
}
//-------------------------------------------------------

void TForm1::DeleteIcon(void)
{
    m_notify.uFlags=NULL;
    Shell_NotifyIcon(NIM_DELETE,&m_notify);
}
//-------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, 
    TCloseAction &Action)
{
    DeleteIcon();
}
//-------------------------------------------------------

MESSAGE void TForm1::MyMessage(TMessage & MyMsg)
{
    if(MyMsg.WParam==0)
        if(MyMsg.LParam==WM_LBUTTONDBLCLK)
            ModifyIcon();
}
//-------------------------------------------------------

--
欢迎您到C语言版来!

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.99.80.146]

[关闭][返回]