Skrevet ved hjælp af C + + Builder Bakke program


Bakke (bakke) er Windows9x opgave bar på et bestemt område, det tekniske navn for den "task bar annoncering område", vil nogle software (f.eks Kingsoft Ⅲ) run-time placeres på en bakke ikon, der giver brugerne til at vide på et blik Programmet kører i baggrunden, for at aktivere er det også meget let, normalt med et enkelt klik på ikonet, meget bekvemt.

Bakke programmering er specielle, men det er ikke svært, herunder ikoner, værktøj tip og oplysninger inden for tre områder, det er en del af Shell programmering. ShellAPI giver Shell-NotifyIcon funktion, og bruger den kan tilføje, slette eller ændre ikonet i skuffen, placeret i ikonen, Windows Shell er ansvarlig for at placere ikonet på musen hændelser ansøgning. Shell-NotifyIcon funktion er defineret som følger:

WINSHELLAPI BOOL WINAPI Shell-NotifyIcon (DWORD dwMessage, PNOTIFYICONDATA pnid);

dwMessage sagde operation skal udfyldes: NIM-ADD (for at øge ikon), NIM-DELETE (slet ikon), NIM-MODIFY (ændre ikon eller prompttekst), pnid NOTIFYICONDATA struktur er en pegepind til en pegepind, er strukturen defineres som følger:

typedef struct-NOTIFYICONDATA (

DWORD cbSize; / / antal bytes besatte struktur, skal størrelsen af den struktur skal initialiseres.

HWND hWnd / / statusikonen acceptere beskeden vindue håndtag

Uint UID / / fastlagt af programikon ID

Uint uFlags / / bruges til at identificere dem, der har behov for at ændre værdien af domænet, NIF_ICON at hIcon effektiv, kan bruges til at ændre det ikon, NIF_MESSAGE at uCallbackMessage effektive, bruges til at definere den besked, NIF-TIP szTip parametre, effektive, kan ændre værktøjet spids.

Uint uCallbackMessage; / / anvendelse definerede besked

HICON hIcon / / statusikonen håndtag

char szTip [64] / / værktøjvinket tekst

) NOTIFYICONDATA;

Her har vi et konkret eksempel til illustration af gennemførelsen metode, er programmet kører, ikke viser den vigtigste form, skal du blot tilføje en ikon i skuffen, skal du dobbeltklikke på ikonet for at lukke programmet.

Programmet kører bakke vist nedenfor:

Opret et nyt projekt, skal du placere en Timer kontrol til form. Open unit1.h fil, øger headerfilen viser # include shellapi.h , som defineret i private del af TForm1 tilføje nogle data medlemmer og metoder i oversigten:

unsigned int iconmessage; / / define beskeden

void AddTrayIcon ();// stigning i ikonen

void RemoveTrayIcon ();// fjerne ikonet fra bakken

Som følge af øget brugerdefinerede besked, så jeg er nødt til at tilsidesætte vinduet procedure funktion WndProc, tilføje i definitionen af beskyttede TForm1 afsnittet: virtual void - fastcall WndProc (Messages:: Tmessage & Message);

Defineret i unit1.cpp korresponderende medlem funktion:

void TForm1:: AddTrayIcon ()

(

NOTIFYICONDATA icondata;

memset (& icondata, 0, sizeof (icondata));

file / / struktur icondata alle felter initialiseres til 0

icondata.cbSize = sizeof (icondata);

icondata.hWnd = håndtag;

strncpy (icondata.szTip, "ukendt status", sizeof (icondata.szTip));

icondata.hIcon = Application- Icon- Håndtag;

icondata.uCallbackMessage = iconmessage;

icondata.uFlags = NIF-MESSAGE | NIF-ICON | NIF-TIP;

Shell-NotifyIcon (NIM-ADD, & icondata);

)

void TForm1:: RemoveTrayIcon ()

(

NOTIFYICONDATA icondata;

memset (& icondata, 0, sizeof (icondata));

icondata.cbSize = sizeof (icondata);

icondata.hWnd = håndtag;

Shell-NotifyIcon (NIM-DELETE, & icondata);

)

Heavy TForm1 den WndProc funktion, der tilføjer at den brugerdefinerede håndtering af meddelelser kode, er dette faktisk svarer til at skabe en TForm subklasse.

void __fastcall TForm1:: WndProc (Beskeder:: TMessage & Message)

(

if (Message.Msg == iconmessage)

(

if (Message.LParam == WM-LBUTTONDBLCLK)

(

Ansøgning- Afslut ();

file / / Hvis du dobbeltklikker på ikonet, så lukke programmet

)

tilbagevenden;

)

TForm:: WndProc (Message) / / For andre oplysninger, så ring til basisklassens WndProc funktion til Windows for standard behandling.

)

Opret form OnCreate hændelseshandler:

void - fastcall TForm1:: FormCreate (TObject * Sender)

(

iconmessage = RegisterWindowMessage ("IconNotify");

AddTrayIcon ();

)

RegisterWindowMessage funktion defineres her ved at kalde en bruger besked kan også WM_USER + n for at få et system der ikke bruger beskeden nummer.

void - fastcall TForm1:: FormDestroy (TObject * Sender)

(

RemoveTrayIcon ();

file / / form er slettet, når du lukker ikon bakken

)

Skriv Timer1's Timer begivenhed kode, når brugeren musen hen over ikonet, displayet prompttekst:

void - fastcall TForm1:: Timer1Timer (TObject * Sender)

(

NOTIFYICONDATA icondata;

memset (& icondata, 0, sizeof (icondata));

icondata.cbSize = sizeof (icondata);

icondata.hWnd = håndtag;

String s = "Min definition af prompttekst ikon !";//

strncpy (icondata.szTip, s.c_str (), sizeof (icondata.szTip));

icondata.uFlags = NIF-TIP;

Shell-NotifyIcon (NIM-MODIFY, & icondata);

)

Programmet kører ikke viser den vigtigste form, kun sat i skuffen på det relevante ikon fra C + + Builder hovedmenuen, vælg View | Project Source i WinMain funktion Application → Initialisér () erklæring tilføjes efter koden:

ShowWindow (Application → Håndtag, SW-HIDE);

Ansøgning → ShowMainForm = false;

Tryk på F9 for at kompilere og køre programmet vil bakke vises på den tilsvarende ikon. Ovenstående kode i C + + Builder3, Pwin98 miljø kompilere og køre igennem.