Podstawy WINAPI

Download Report

Transcript Podstawy WINAPI

Temat:
PODSTAWY WINAPI MESSAGEBOX
Funkcja WinMain
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
return 0;
}
Funkcja MessageBox
MessageBox( hWnd, lpText, lpCaption, uType )
Argument
hWnd
lpText
lpCaption
uType
Znaczenie
uchwyt okna, które jest właścicielem
komunikatu. Jeśli okna akurat nie
mamy, dajemy tu NULL, co oznacza
bezpański komunikat
po prostu tekst komunikatu, który
wyświetlamy
tytuł okienka komunikatu. Jeśli
damy NULL, zostanie wybrany tytuł
domyślny Error
kombinacja stylów okienka
komunikatu
Funkcja MessageBox
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance, HINSTANCE
hPrevInstance, LPSTR lpCmdLine, int
nCmdShow)
{
MessageBox(
NULL,
"Witaj świecie",
"Moja pierwsza aplikacja",
MB_ICONWARNING);
return 0;
}
uType – typy okienek






MB_ABORTRETRYIGNORE
MB_OK
MB_OKCANCEL
MB_RETRYCANCEL
MB_YESNO
MB_YESNOCANCEL




MB_ICONWARNING
MB_ICONINFORMATION
MB_ICONQUESTION
MB_ICONSTOP lub MB_ICONERROR lub MB_ICONHAND
Funkcja MessageBox
 Funkcja MessageBox zwraca wartości:







O – jeśli nie zadziała (np. brak pamięci)
IDABORT – przerwij
IDCANCEL – anuluj
IDRETRY – ponów
IDIGNORE – ignoruj
IDNO – nie
IDYES – tak
IDOK – ok
Temat:
PODSTAWY WINAPI
- OKNO
Klasa okna
WNDCLASSEX wc;
(wc - to nasza nazwa)
memset(&wc,0,sizeof(wc));
wc.cbSize
= sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.hInstance
= hInstance;
wc.hCursor
= LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm =LoadIcon(NULL, IDI_APPLICATION);
Klasa okna
Pole
cbSize
style
lpfnWndProc
cbClsExtra,
cbWndExtra
hInstance
hIcon
Znaczenie
Rozmiar struktury w bajtach. Należy tu
wpisać sizeof (WINDOWCLASSEX).
Style klasy.
!!! Wskaźnik do procedury obsługującej
okno (o tym później, na razie wpisujemy
WndProc)
Dodatkowe bajty pamięci dla klasy.
Identyfikator aplikacji, która ma być
właścicielem okna (zazwyczaj pierwszy
parametr naszej funkcji WinMain)
Ikonka okna - duża ikonka, widać ją kiedy
naciśniesz Alt-Tab.
Klasa okna
Pole
dalej
hCursor
hbrBackground
lpszMenuName
lpszClassName
hIconSm
Znaczenie
…
Kursor myszki.
Tło naszego okienka, czyli jego kolor i
wzór.
Wybieramy domyślne zdefiniowane.
Nazwa identyfikująca menu naszego
okna w pliku zasobów.
Nazwa klasy, którą tworzymy.
Mała ikonka naszej aplikacji.
Rejestracja okna
if(!RegisterClassEx(&wc))
{
MessageBox(
NULL,
"Window Registration Failed! ",
"Error!",
MB_ICONEXCLAMATION|MB_OK);
return 0;
}
Budowa okna
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
"WindowClass",
"Caption",
WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
x
CW_USEDEFAULT,
y
640,
width
480,
height
NULL,NULL,hInstance,NULL);
Budowa okna
Argument
dwExStyle
lpClassName
Znaczenie
Parametry okna. WS_EX_WINDOWEDGE, czyli ramki
3D.
Nazwa klasy okna, którą właśnie zarejestrowaliśmy
lpWindowName Napis na pasku tytułowym okienka.
dwStyle
Style okienka.
x, y
Pozycja okna. CW_USEDEFAULT - domyślną pozycja.
nWidth, nHeight Wymiary okienka.
hWndParent
Uchwyt okna nadrzędnego.
hMenu
Uchwyt menu dla naszego okna. NULL – brak menu.
hInstance
Uchwyt aplikacji, której przypisujemy okienko. Parametr
hInstance, od systemu jako argument dla WinMain.
Wskaźnik do dodatkowych parametrów. NULL – brak.
lpParam
Pokazanie i odnowienie okna
ShowWindow( hwnd, nCmdShow );
UpdateWindow( hwnd );
Pętla komunikatów
while(GetMessage(&Msg,NULL,0,0)>0)
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
//pętla przesyła komunikaty do
WinProc
Obsługa zdarzeń WinProc
LRESULT CALLBACK WndProc( HWND hwnd,…. )
{
switch( msg )
{
case WM_CLOSE:
DestroyWindow( hwnd );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hwnd, msg, wParam, lParam );
}
return 0;
}
Temat:
PODSTAWY WINAPI
- PRZYCISKI I POLA TEKSTOWE
Klasy kontrolek
 BUTTON – przycisk
 EDIT – pole tekstowe
 LISTBOX - lista
 COMBOBOX – lista rozwijana
 STATIC – tekst lub ikona statyczna
BUTTON - przykład
HWND hPrzycisk; //deklaracja
hPrzycisk = CreateWindowEx(
0,
"BUTTON",
„Pierwszy przycisk",
WS_CHILD | WS_VISIBLE,
10, 10, 150, 30,
hwnd, NULL, hInstance, NULL );
CHECKBOX - przykład
HWND hPrzycisk;
hPrzycisk = CreateWindowEx(
0,
"BUTTON",
"Checkbox",
WS_CHILD | WS_VISIBLE |
BS_CHECKBOX,
50, 10, 150, 30,
hwnd, NULL, hInstance, NULL );
BS_RADIOBUTTON - przykład
HWND hPrzycisk;
hPrzycisk = CreateWindowEx(
0,
"BUTTON",
"Checkbox",
WS_CHILD | WS_VISIBLE |
BS_RADIOBUTTON,
90, 10, 150, 30,
hwnd, NULL, hInstance, NULL );
EDIT - przykład
HWND hText = CreateWindowEx(
0,
"EDIT",
NULL,
WS_CHILD | WS_VISIBLE |
WS_BORDER,
10, 10, 200, 100,
hwnd, NULL, hInstance, NULL );
EDIT - przykład
HWND hText = CreateWindowEx(
WS_EX_CLIENTEDGE,
"EDIT",
NULL,
WS_CHILD | WS_VISIBLE |
WS_BORDER | WS_VSCROLL |
ES_MULTILINE | ES_AUTOVSCROLL,
10, 10, 200, 100,
hwnd, NULL, hInstance, NULL );
CDN