Cel mai simplu program Win32

Algoritmul

#include <windows.h>
#pragma hdrstop
#include <condefs.h>


//---------------------------------------------------------------------------
#pragma argsused
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
return 0;
}

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, "La revedere!", "Note", MB_OK);
    return 0;
}

Explicatii

Functia 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

are acelasi rol ca functia main() in programele C scrise pentru DOS sau Unix.

WINAPI sprecizeaza conventia de apelare si este definita ca _stdcall. Daca nu stiti ce inseamna asta amintitiva ca rutinele au mai multe moduri prin care pot fi apelate. Aici trebuie precizat acest lucru. Despre acest mod specific de apel veti afla detalii atunci cand veti invata ASSEMBLER.

HINSTANCE hInstance
este un handle catre modulul de program in executie din memorie (aici pj0 .exe) . Un handle este un  intreg pe 4 octeti ce poate identifica o larga variatate de obiecte. Handle-rii se refera la o structura interna (inaccesibila aplicatiilor windows) ce contine informatii despre un obiect.
HINSTANCE hPrevInstance
Intotdeauna NULL pentru programele Win32.
LPSTR lpCmdLine
Argumentele liniei de comanda ca un singur sir. Acest sir nu include numele programului.
int nCmdShow
O valoare de tip int care va fi transmisa rutinei ShowWindow(). Vom reveni mai tarziu.

Cate ceva despre tipurile de date in Win32

Veti afla in curand ca exista multe dintre tipurile cu care v-ati intanit capata alta semnificatie in win32. Spre exemplu: UINT inseamna unsigned int, LPSTR in loc de char* etc... Ceea ce alegeti depinde de dvs. Insa cand schimbati un tip asigurativa ca ati inteles bine semnificatia sa.

Prefixul LP provine de la Long Pointer.

Urmatorul caracter ce poate apare dupa LP este un C (sau CT) ce poate indica un pointer const. LPCSTR (sau LPCTSTR) indica un pointer catre un sir constant, unul care nu poate (sau nu va) fi modificat. Pe de alta parte LPSTR nu este const si prin urmare poate fi modificat.

Rutina MessageBox

MessageBox este o functie ce permite deschiderea unei ferestre de dialog (ferestrele de dialog mai sunt numite casete de dialog).

Valori retunate de functia MessageBox

Aceasta functie poate intoarce valori de tip int.

Daca apare vreo eroare, functia intoarce valoarea 0 (ulterior se poate folosi functia GetLastError pentru a obtine codul erorii; vom reveni). Daca functia se executa cu succes ea reintoarce unul dintre urmatoarele valori precizand ce buton a fost apasat de catre utilizator:

IDABORT
S-a apasat butonul Abort.
IDCANCEL
S-a apasat butonul  Cancel (sau a fost apasata tasta Esc).
IDCONTINUE
S-a apasat butonul Continue (Windows 2000).
IDIGNORE
S-a apasat butonul  Ignore.
IDNO
S-a apasat butonul No
IDOK
S-a apasat butonul OK.
IDRETRY
S-a apasat butonul Retry.
IDTRYAGAIN
S-a apasat butonul Try Again (Windows 2000)
IDYES
S-a apasat butonul Yes.

Parametrii functiei MessageBox

Prototipul functiei MessageBox gasit in fisierul atlwin.h este

int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption = NULL, UINT uType = MB_OK)

hWnd
Un handle catre fereastra care a deschis caseta de dialog.
lpText
Pointer constant catre textul ce se va afisa in interiorul casetei de dialog.
lpCaption
Textul ce se afiseaza pe bara de sus a ferestrei de dialog.
uType
O combinatie de diferite fanioane ce specifica comportarea si aparenta casetei de dialog. Fanioanele disponibile sunt grupate dupa functiuni. Daca nu se specifica nici un fanion dintr-un grup este folosit fanionul default.

Fanioane de selectie a tipului butoanelor

Alegerea unuia dintre fanioanele urmatoare determina ce tip de butoane vor apare in caseta de dialog (Nota: Fanionul MB_HELP poate fi combinat cu oricare dintre celelalte fanioane)

MB_ABORTRETRYIGNORE

Caseta de dialog va contine butoanele Abort, Retry si Ignore.

MB_CANCELTRYCONTINUE

Caseta de dialog va contine butoanele Cancel, Try Again si Continue (Windows 2000)

MB_HELP

Adauga butonul Help la caseta de dialog ( Windows 95, 98, NT 4.0 or later, 2000).  Atunci cand utilizatorul apasa butonul Help un mesaj WM_HELP este trimis detinatorului casetei de dialog (ce specificat prin parametrul hWnd). Acest fanion poate fi folosit numai in combinatie cu alte fanioane (adica nu poate apare singur).

MB_OK

Caseta de dialog va contine butonul OK button. Aceasta este valoarea default.

MB_OKCANCEL

Caseta de dialog va contine butoanele OK si Cancel.

MB_RETRYCANCEL

Caseta de dialog va contine butoanele Retry si Cancel.

MB_YESNO

Caseta de dialog va contine butoanele Yes si No.

MB_YESNOCANCEL

Caseta de dialog va contine butoanele Yes, No si Cancel.

Fanioane care precizeaza icoana ce va apare in caseta de dialog

MB_ICONASTERISK, MB_ICONINFORMATION

Afiseaza icoana de informatii (o litera i intr-un cerc albastru).

MB_ICONERROR, MB_ICONHAND, MB_ICONSTOP

Afiseaza una dintre icoanele de stop.

MB_ICONEXCLAMATION, MB_ICONWARNING

Afiseaza icoana de exclamare.

MB_ICONQUESTION

Afiseaza icoana de intrebare.

Fanioane care specifica ce buton va fi preselectat

MB_DEFBUTTON1

Selecteaza primul buton. Aceasta este valoarea default.

MB_DEFBUTTON2

Selecteaza al doilea buton.

MB_DEFBUTTON3

Selecteaza al treilea buton

MB_DEFBUTTON4

Selecteaza al patrulea buton.

Fanioane ce specifica tipul modal al casetei de dialog

MB_APPLMODAL

Caseta este de tip application-modal. Utilizatorul nu poate comuta catre alte ferestre detinute de aplicatie pana cand fereastra de dialog nu este inchisa. Aceasta valoare este default.

MB_SYSTEMMODAL

Caseta este de tip system-modal. Utilizatorul nu poate comuta catre nici o alta fereastra (din sistemul de ferestre deschis la acest moment) pana cand fereastra de dialog nu este inchisa.

MB_TASKMODAL

Caseta este de tip thread-modal. Utilizatorul nu poate trece comuta catre nici o alta fereastra detinuta de catre firul de executie apelant pana cand nu este inchisa fereastra de dialog.

Fanioane pentru alte optiuni

MB_DEFAULT_DESKTOP_ONLY

La fel ca pentru MB_SERVICE_NOTIFICATION cu deosebirea ca sistemul va afisa o fereastra de dialog numai pe desktop-ul default.

MB_RIGHT

Textul din fereastra de dialog este aliniat dreapta.

MB_RTLREADING

Afiseaza mesaju text si antetul ferestrei de dialog folosind scrierea de la dreapta la stanga (right-to-left) daca este impusa de catre limba utilizata de sistem.

MB_SETFOREGROUND

Aduce caseta de dialog in fata celorlalte ferestre.

MB_TOPMOST

Mentine caseta de dialog deasupra tuturor ferestrelor deschis la un moment dat.

MB_SERVICE_NOTIFICATION

Firul de executie apelant este un serviciu care anunta utilizatorului aparitia unui eveniment. Parametrul  hWnd trebuie sa fie 0. (Windows NT 4.0 sau 2000)

MB_SERVICE_NOTIFICATION_NT3X

La fel ca MB_SERVICE_NOTIFICATION insa pe sisteme Windows NT 3.1 - 3.51. Valoarea acestui fanion a fost schimbata odata cu aparitia versiunii NT 4.0.

Codul urmator ilustreaza utilizarea catorva dintre fanione.

 

Cornel Mironel Niculae, 2003-2004

06-Feb-2005