HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A SendMessageCallback függvény bemutatása


Példaprogram letöltése

4489 bájt

A cikkben bemutatásra kerül a Windows rendszer üzenetküldő függvényeinek egyike, a SendMessageCallback. Egy egyszerű példán keresztül megvizsgáljuk, hogyan tudunk adatokat átadni az ablakfüggvénynek, és az hogyan küldi vissza a feldolgozás eredményét az alkalmazásnak.

A Windows üzenetkezelése
Minden Windows-alkalmazás rendelkezik ablakokkal, melyek változatos funkcióval rendelkeznek. Minden ablak rendelkezik egy ablakkezelő függvénnyel, mely feldolgozza az ablaknak érkezett rendszer-, illetve felhasználói üzeneteket. Az üzeneteket az ablakfüggvény az ablak üzenetsorából veszi ki. Az üzenetek speciális formátumú konstansok, melyeket egyrészt a Windows rögzít, másrészt mi fejlesztők is írhatunk saját üzeneteket. Az üzenetek küldése általában úgy történik, hogy a függvényben megadjuk az ablak kezelőjét, melynek az üzenet szól, valamint az üzenetet, és paramétereit. Az üzenetküldő függvények azonban változatos működésűek, vagyis nem mind azonos módon hajtja végre az üzenetküldést. Az üzenetkezelő funkciókat a user32.dll-be implementálva bocsátja rendelkezésünkre a rendszer.
A SendMessageCallback függvény
Működését tekintve a függvény átadja az ablaknak, vagy ablakoknak az üzenetet, majd rögtön visszatér. Azt követően, hogy az ablak feldolgozta az üzenetet, meghívja a függvényben átadott callback függvényt, átadva neki a végrehajtás eredményét, valamint egy alkalmazás-specifikus értéket. A függvény aszinkron működésűnek tekinthető. A függvény deklarációja a következő:
SENDMESSAGECALLBACK;
function SendMessageCallback(hWnd: HWND; Msg: UINT; wParam: WPARAM;
lParam: LPARAM; lpResultCallBack: TFNSendAsyncProc; dwData: DWORD):
BOOL;
Paraméterek
Paraméterek Típus Megjegyzés
HWnd HWND Az ablak kezelője, melynek az üzenet szól
Msg UINT Az elküldött üzenet
WParam WPARAM Első üzenet paraméter
LParam LPARAM Az üzenet második paramétere
LpResultCallback TFNSendAsyncProc Mutató az ablak által meghívott callback függvényre
DwData DWORD Alkalmazás specifikus adat, mely a callback függvény paramétere lesz
Visszatérési érték
A függvény visszatérési értéke 0, amennyiben az üzenet átadása sikeres volt, és valamilyen nullától eltérő érték sikertelen üzenetküldés esetén.
Megjegyzés
Amennyiben a függvény első paramétere HWND_BROADCAST értékű, az üzenet minden ablaknak szól a rendszerben; azoknak is amelyek nem láthatóak, vagy takartak. Viszont az üzenet nem szól az ablakok gyermekeinek.
A működéshez hozzátartozik, hogy az aszinkron üzenetküldő függvények, mint amilyen a SenMessageCallback függvény is, nem tartalmazhatnak mutatót az üzenet paraméterei közt, amennyiben a WM_USER üzenettartományból küldenek üzenetet, ugyanis a függvény visszatérve felszabadítja a memóriaterületet, mielőtt azt az ablak feldolgozta volna.
A SendMessageCallback függvény csak akkor lesz meghívva, amikor a szál, mely hívta azt, meghívja a GetMessage, PeekMessage vagy WaitMessage függvények valamelyikét.
A függvény működését egy egyszerű példával lehetne demonstrálni, melyben egy gomb eseménykezelője indítja az üzenetküldést. Az üzenet egy általános Windows-os üzenet, mégpedig a WM_LBUTTONDBLCLK, melynek kezelőjét szintén megvalósítjuk, de ez a felhasználó klikkelése nélkül fut le. A függvény a példában a következőképpen hívódott meg:
SendMessageCallback(handle,WM_LBUTTONDBLCLK,0,0,
@MyCallback,dwData);
A rendszer által meghívott MyCallback függvény megváltoztatja a Form Edit-kontroljának Text property-jét, így az eredmény szemmel is látható. A függvény az alábbi formában deklarálható:
MyCallback
procedure MyCallback(handle : HWND;msg: UINT;dwData: DWORD;lResult:RESULT);
Paraméterek
handle : HWND
Az ablak kezelője, melynek az üzenet szól.
msg: UINT
Az elküldött üzenet.
dwData: DWORD
Alkalmazás-specifikus érték, mely az üzenetfüggvény által küldött adatokat tartalmazhatja.
lResult: LRESULT
Az üzenet feldolgozás eredménye.
A callback függvény törzsében kiolvassuk az ablakfüggvény által átadott értéket, jelen esetben az üzenet decimális kódját, és beírjuk a Form Edit-kontroljába:
Form1.Edit1.Text := 'A küldött üzenet kódja: ' + IntToStr(dwData);

Cikksorozat

#IDKategóriaCikk címeSorozat
3047WindowsAz XML bemutatása1. rész
3059WindowsAz XML bemutatása2. rész
3068WindowsAz XML bemutatása3. rész
3077WindowsAz XML bemutatása - deklarációk4. rész
3086WindowsAz XML bemutatása - MSXML, XSLT5. rész
3094WindowsAz XML bemutatása - DTD6. rész
3105WindowsXML adatok megjelenítése Excel-ben7. rész
3114WindowsDokumentum hivatkozások az XML-ben8. rész
3123WindowsXML adattípusok9. rész
3132WindowsXML adatok HTML oldalakon10. rész
3141WindowsXML Notepad11. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 649. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |