lekcjaD 2KQ456N4CEXGGPYDR2FBPEX7MOD6T5X4SX677YA


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 <windows.h>

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 <windows.h>

#include <stdio.h>

#include <string.h>

#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.

1



Wyszukiwarka

Podobne podstrony:
Lekcja kliniczna 2 VI rok WL
Lekcja Przysposobienia Obronnego dla klasy pierwszej liceum ogólnokształcącego
Lekcja wychowania fizycznego jako organizacyjno metodyczna forma lekcji ruchu
Lekcja kliniczna nr 2 VI rok WL
04 Lekcja
PF7 Lekcja2
lekcja52
Printing bbjorgos lekcja41 uzupelnienie A
lekcja 18 id 265103 Nieznany
Hydrostatyka i hydrodynamika lekcja ze wspomaganiem komputerowym
Lekcja 6 Jak zapamietywac z notatki Tajemnica skutecznych notatek
lekcja 20
lekcja20
Lekcja 04 Szene 04
LINGO ROSYJSKI raz a dobrze Intensywny kurs w 30 lekcjach PDF nagrania audio audio kurs
Printing bbjorgos lekcja01 05 A
'Half Life', czyli pół życia przed monitorem zagrożenia medialne foliogramy gim modul 3 lekcja 5
Lekcja od mamy
lekcja 3 id 265134 Nieznany

więcej podobnych podstron