cpp2 LEKCJA44


LEKCJA 44: O Okienkach dialogowych.
________________________________________________________________
O tym, jak konstruuje się okienka dialogowe.
________________________________________________________________

Do wyświetlania okienek dialogowych w Windows API służy funkcja
DialogBox(), a do zakończenia ich "życia na ekranie" -
EndDialog(). Podobnie jak każde okno, również okno dialogowe
musi mieć swoją funkcję, obsługi komunikatów Windows. Zamiast
WindowProc() nazywa się ją tradycyjnie DlgProc():

BOOL FAR PASCAL DlgProc(HWND hDLG, unsigned Message, WORD
wParam, LONG lParam);
{
switch (message)
{
...
default: return (0);
}
}

Za wyjątkiem braku domyślnego handlera Windows -
DefWindowProc(), który jest zbędny, w związku z wewnętrznie
przyjmowanymi wartościami domyślnymi, funkcja podobna jest
bardzo w swojej konstrukcji do WindowProc(). Funkcja zwraca
wartość FALSE (czyli 0), jeśli przesłany komunikat nie został
obsłużony. Typowymi komunikatami, które rozpatruje większość
okienek dialogowych, są WM_INITDIALOG oraz WM_COMMAND.

Przykład okienka dialogowego:

------------------Plik: DLGBOX1.H-------------------------------

#define szAppName "DLGBOX1"
#define IDM_DLG1 100

------------------Plik zasobów: DLGBOX1.RC----------------------

#include "DLGBOX1.H"
#include

IDI_ICON ICON CONTROL.ICO

DLGBOX1 MENU
BEGIN
MENUITEM "&O DlgBox" IDM_DLG1
/* to menu pojawi się w oknie macieżystym */
END

DLGBOX1 DIALOG 30,30,200,100

/* Pierwsze liczby to współrzędne lewego-górnego rogu okna, dwie

następne - to szerokość i długość. Współrzędne są względne.
Punkt (0,0) to narożnik okna macieżystego */

STYLE WS_POPUP | WS_DLGFRAME

BEGIN
LTEXT "Przyklad" -1, 0, 12, 160, 8
CTEXT "DLGBOX1 - Przyklad" -1, 0, 36, 160, 8
DEFPUSHBUTTON "OK" IDOK, 64, 60, 32,14, WS_GROUP
END
----------------------------------------------------------------

Pomiędzy parą słów kluczowych BEGIN-END można umieszczać różne
instrukcje sterujące. Definiują one, jaki rodzaj okna
sterującego ukaże się w okienku dialogowym. Instrukcje te można
stosować w następującym formacie:

typ_okna "tekst" ID, x, y, szerokość, wysokość [styl]

Parametr styl jest opcjonalny. Styl okna określają
identyfikatory predefiniowane w API Windows (WS_...). Parametr
ID jest odpowiednikiem identyfikatora dla okien potomnych typu
Child Window; dla okien sterujących, które nie zwracają
komunikatów do okna macierzystego, ma wartość -1. IDOK
wykorzystaliśmy jako identyfikator dla okna sterującego typu
BUTTON. Zostanie on wysłany do funkcji okienkowej jako wartość
parametru wParam, gdy użytkownik kliknie klawisz.

------------------Plik główny: DLGBOX1.CPP----------------------


#include
#include
#include
#include "DLGBOX1.H"
#pragma argused

HANDLE hInst;

long FAR PASCAL WndProc (HWND, unsigned, WORD, LONG) ;
BOOL FAR PASCAL ControlProc (HWND, unsigned, WORD, LONG) ;

int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow )
{
WNDCLASS wndClass;
MSG msg;
HWND hWnd;
if ( !hPrevInstance )
{
wndClass.style= CS_HREDRAW | CS_VREDRAW ;
wndClass.lpfnWndProc= WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra= 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, szAppName);
wndClass.hCursor= LoadCursor(NULL, IDC_ARROW );
wndClass.hbrBackground= GetStockObject(WHITE_BRUSH );
wndClass.lpszMenuName= szAppName;
wndClass.lpszClassName= szAppName;

if (!RegisterClass(&wndClass))
return 0;
}

hInst = hInstance;
hWnd = CreateWindow(szAppName, "DLGBOX1", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 0, hInstance, 0);

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg );
DispatchMessage(&msg );
}
return 0;
}

BOOL FAR PASCAL ControlProc (HWND hDlg, unsigned Message,
WORD wParam, LONG lParam)
{
switch(msg)
{
case WM_INITDIALOG:
return TRUE;
break;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
case IDCANCEL:
EndDialog(hDlg,0);
return TRUE;
}
break;
}
return (0);
}

long FAR PASCAL WndProc (HWND hWnd, unsigned msg,
WORD wParam, LONG lParam)
{
FARPROC lpControlProc;
switch(Message)
{
case WM_COMMAND:
switch(wParam)
{
case IDM_ABOUT:
lpControlProc = MakeProcInstance((FARPROC) ControlProc, hInst);

DialogBox(hInst, "DLGBOX1", hWnd, lpControlProc);
return 0;
}
break;
case WM_DESTROY:
hDC = BeginPaint(hWnd , &ps);
TextOut(hDC, 30, 50,"Demo okienka dialogowego", 25);
TextOut(hDC, 30, 70,"Zastosuj menu...", 17);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;

default:
return (DefWindowProc(hWnd,Message,wParam,lParam));
}
return 0;
}

Stosując okienko edycyjne możemy użyć następujących
predefiniowanych parametrów:

CONTROL - określa okno elementu sterującego zdefiniowane

przez użytkownika.

CONTROL "tekst", klasa, styl, x, y, szerokość, wysokość

LTEXT - element sterujący: okienko tekstowe
Wyrównywanie tesktu: do lewej.
RTEXT - j. w. Wyrównywanie tesktu: do prawej
CTEXT - j. w. Wyrównywanie tesktu: centrowanie w okienku
CHECKBOX - pole tekstowe po prawej stronie przełącznika typu
Check Box.
PUSHBUTTON - Klawisz z napisem.
LISTBOX - okienko z listą
GROUPBOX - grupa elementów sterujących typu BUTTON; zgrupowanie

kilku elementów sterujących i otoczenie ramką. Tekst

zostanie umieszczony w lewym górnym rogu.
DEFPUSHBUTTON - Klawisz domyślny w stylu BS_DEFPUSHBUTTON.
RADIOBUTTON - analogicznie jak dla stylu BS_RADIOBUTTON.
EDITTEXT - tworzy okno oparte na klasie EDIT.
COMBOBOX - tworz okno oparte na klasie COMBOBOX.
ICON - definiuje ikonę opartą na klasie STATIC; w
okienku dialogowym.
SCROLLBAR - tworzy okno oparte na klasie SCROLLBAR.

[!!!]UWAGA
________________________________________________________________
W niektórych przypadkach okienko dialogowe może być głównym
oknem aplikacji.
________________________________________________________________



Wyszukiwarka

Podobne podstrony:
cpp2 LEKCJA43
cpp2 LEKCJA33
cpp2 LEKCJA15
cpp2 LEKCJA10
cpp2 LEKCJA38
cpp2 LEKCJA18
cpp2 LEKCJA19
cpp2 LEKCJA2
cpp2 LEKCJA14
cpp2 LEKCJA48
cpp2 LEKCJA37
cpp2 LEKCJA1
cpp2 LEKCJA22
cpp2 LEKCJA46
cpp2 LEKCJA35

więcej podobnych podstron