LEKCJA43.TXT

(17 KB) Pobierz
LEKCJA 43:  Elementy steruj�ce i zarz�dzanie programem.  
________________________________________________________________ 
Jak sterowa� prac� aplikacji. Jak umieszcza� elementy  
graficzne-steruj�ce w oknie aplikacji. Najcz�ciej stosowane  
funkcje API Windows.  
________________________________________________________________ 
 
Elementy steruj�ce prac� aplikacji w Windows (ang. controls) s�  
r�wnie� swoistymi okienkami (tyle, �e potomnymi - Child Window  
wobec g��wnego okna aplikacji - Parent Window).  
Do utworzenia takiego specjalnego okna r�wnie� mo�na u�y�  
funkcji CreateWindow(). Je�li okno ma sta� si� nie g��wnym oknem 
aplikacji, lecz oknem steruj�cym przebiegiem programu, funkcja  
wymaga podania nast�puj�cych argument�w:  
 
- rodzaj klasy steruj�cej (ang. control class)  
- rodzaj elementu steruj�cego (ang. control style)  
 
Typowe rodzaje element�w (obiekt�w) staruj�cych w �rodowisku  
Windows: 
 
BUTTON                - klawisz rozkazu, prostok�tne okno typu  
                        Child, reprezentuj�ce przycisk, kt�ry  
                        u�ytkownik mo�e w��czy�; przycisk mo�e  
                        by� opatrzony etykiet� (text label).  
 
COMBOBOX              - okienko dialogowe kombinowane. Jest  
                         z�o�eniem klasy EDIT i LISTBOX;  
 
LISTBOX                - oknienko z list� (zwykle element  
                            sk�adowy okienka dialogowego typu  
                            Combo Box. 
 
STATIC                  - pole statyczne (bez prawa edycji).  
                           Niewielkie okno zawieraj�ce tekst lub 
 
                           grafik�; s�u�y z regu�y do oznaczania 
 
                           innych okien steruj�cych. 
 
SCROLLBAR                - pasek przewijania (pionowy - Vertical 
 
                           Scroll Bar; poziomy - Horizontal  
                           Scroll Bar). 
 
Style klawiszy steruj�cych (Button Styles): 
 
BS_PUSHBUTTON              - Klawisz. Okno steruj�ce wysy�a, po  
                              ka�dym wyborze klawisza  
                              (klikni�cie), wiadomo�� do okna  
                              macie�ystego (Parent Window). 
 
BS_RADIOBUTTON              - Okr�g�y prze��cznik dzia�aj�cy  
                                zwykle na zasadzie @tylko jeden  
                                z grupy". 
 
BS_CHECKBOX -                - prostok�tny prze��cznik [X]  
                                  w��czaj�cy (aktywna) lub  
                                  wy��czaj�cy (nieaktywna)  
                                  opcj�. Dzia�a niezale�nie od  
                                  pozosta�ych. 
 
Inne style okre�laj� np. spos�b edycji tekstu (ES_LEFT,  
ES_MULTILINE, itp.) Szczeg�y - patrz system Help - Windows API. 
Oto przyk�ad utworzenia okna elementu steruj�cego typu "Klawisz" 
 
(BUTTON to nazwa typu): 
 
hControlWnd = CreateWindow ("BUTTON", " Napis_na_Klawiszu ",  
              BS_PUSHBUTTON |WS_CHILD | WS_VISIBLE,  
              10, 20, 30, 40,   
              hWnd, ID_Elem, hInstance, 0);  
 
Identyfikator ID_Elem jest potrzebny, gdy w jednym oknie  
znajduje si� kilka element�w steruj�cych - pozwala na ich  
rozpoznawanie w programie. Spos�b przekazywania informacji o  
klikni�ciu klawisza przypomn� na przyk�adzie okienka  
komunikat�w:  
 
if(IDOK==MessageBox(0, "", "", MB_OK)) ...  
 
IDOK to predefiniowany w Windows identyfikator klawisza [OK].  
Oto kr�tkie wyja�nienie pozosta�ych element�w:  
 
10, 10, 30, 20,  - wsp�rz�dne. x, y, szeroko��, wysoko��  
hWnd,  - oznacznik okna macie�ystego   
 
Przesuwanie i zmiana wielko�ci elementu steruj�cego. 
 
Funkcja MoveWindow() przesuwa okno we wskazane miejsce: 
 
MoveWindow(hKlawisz, 10, 10, 20, 30, TRUE);  
 
Poniewa� okno elementu steruj�cego ma zadane wzgl�dne  
wsp�rz�dne w oknie macie�ystym, gdy okno macierzyste zostanie  
przesuni�te - element steruj�cy b�dzie przesuni�ty  
automatycznie. R�wnie� po zmianie rozmiar�w okna macie�ystego  
okno elementu steruj�cego zmienia po�o�enie, zawsze jednakowe  
wzgl�dem lewego g�rnego rogu.  
 
Usuwanie okna steruj�cego  
 
Okienko elementu steruj�cego mo�emy usun�� (jak i ka�de inne  
okna) przy pomocy funkcji: 
 
DestroyWindow(hKlawisz);  
 
 
Przekazywanie informacji do- i z- okna elementu steruj�cego  
 
Zdarzenie w oknie elementu steruj�cego - np. klikni�cie klawisza 
 
- powoduje wygenerowanie komunikatu WM_COMMAND. Towarzysz�ce  
komunikatowi parametry przenosz� istotne informacje: 
 
wParam          - identyfikator elementu steruj�cego,  
lParam          - dla wci�ni�tego klawisza b�dzie to BN_CLICKED. 
 
Niekt�re komunikaty Windows mog� by� kierowane do okna elementu  
steruj�cego i wymusza� pewne operacje. Dla przyk�adu komunikat  
WM_GETTEXTLENGTH przes�any do okienka edycyjnego typu Text Edit  
Box (element steruj�cy klasy EDIT) jest ��daniem podania  
d�ugo�ci tekstu wpisanego w�a�nie do okienka. Aby Windows  
wygenerowa�y komunikat i przes�a�y go do naszego elementu  
steruj�cego - musimy "poprosi�" przy pomocy funkcji  
SendMessage() (Wy�lijKomunikat): 
 
DlugTekstu = SendMessage(hEditWnd, WM_GETTEXTLENGHT, 0, 0); 
gdzie:  
hEditWnd jest identyfikatorem elementu - okienka edycyjnego 
 
[???]Robi na "szaro'?  
________________________________________________________________ 
Podobnie jak opcje w menu - klawisze tak�e mog� zosta�  
udost�pnione (ang. enable), b�d� zablokowane (ang. disable).  
Je�li hKlawisz b�dzie identyfikatorem elementu steruj�cego,  
mo�na go udost�pni� (1), b�d� zablokowa� (0) przy pomocy  
funkcji: 
 
EnableWindow(hKlawisz, 0);   
EnableWindow(hKlawisz, 1);   
________________________________________________________________ 
 
Typowy projekt dla �rodowiska Windows sk�ada si� z kilku (czasem 
 
kilkunastu) plik�w: .H, .MNU, .DLG, .RC, .DEF, .PRJ, .ICO, .BMP, 
 
itp. Kompilator zasob�w generuje na podstawie tego "sk�adu"  
ko�cowy plik aplikacji.  
 
------------------Plik MEDYT-01.H------------------------------- 
#define szAppName "MEDYT-01"  
#define ID_EDIT 200  
 
------------------Plik g��wny: MEDYT-01.CPP--------------------- 
 
#include <windows.h>  
#include "EDIT.H" 
#pragma argused  
 
HWND hEditWnd; 
  
long FAR PASCAL WndProc (HWND, unsigned, WORD, LONG) ;  
  
int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,  
   LPSTR lpszCmdLine, int nCmdShow)  
{  
    WNDCLASS wndClass;  
    MSG msg;  
    HWND hWnd;  
    RECT rect; 
    
    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_CROSS);  
wndClass.hbrBackground= GetStockObject(WHITE_BRUSH );  
wndClass.lpszMenuName= NULL; 
wndClass.lpszClassName= szAppName;  
  
    if (!RegisterClass(&wndClass))  
return 0;  
    }  
  
    hWnd = CreateWindow(szAppName,  
                 "MEDYT-01", WS_OVERLAPPEDWINDOW,  
                  CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,  
                  0, 0, hInstance, 0);  
 
GetClientRect(hWnd, (LPRECT) &rect);  
hEditWnd = CreateWindow ("Edit",NULL, WS_CHILD | WS_VISIBLE |  
                            ES_MULTILINE | WS_VSCROLL |  
                            WS_HSCROLL | ES_AUTOHSCROLL |  
                            ES_AUTOVSCROLL, 0, 0,(rect. right -  
                            rect. left),  
                            (rect. bottom - rect.  
                            top),hWnd,IDC_EDIT, hIstance,NULL);  
if( ! hEditWnd )  
  {  
  DestroyWindow(hWnd);  
  return 0;  
  }  
ShowWindow(hWnd, nCmdShow); 
UpdateWindow(hWnd);  
 while (GetMessage(&msg, NULL, 0, 0))  
    {  
  TranslateMessage(&msg );  
  DispatchMessage(&msg );  
    }  
    return 0;  
}  
  
long FAR PASCAL WndProc (HWND hWnd, unsigned Message,  
 WORD wParam, LONG lParam)  
{  
 switch(Message)  
    {  
     case ID_EDIT: 
       if(HIWORD(lParam)==EN_ERRSPACE) 
 
/* starsze s�owo lParam zawiera w�a�ciwe dla okna edycyjnego  
wiadomo�ci, je�eli jest to EN_ERRSPACE - okno steruj�ce nie  
mo�e alokowa� dodatkowego obszaru pami�ci                 */  
 
      {  
        MessageBox (GetFocus(), "Brak pamieci", "MEDYT-01",  
                       MB_ICONSTOP | MB_OK);  
      }  
      break;  
     case WM_SETFOCUS:  
      SetFocus(hEditWnd);  
      break;  
 
/* Pierwsze dwa parametry funkcji MoveWindow s� ustawione na  
    zero, dzi�ki temu po zastosowaniu tej funkcji nie zmieni si� 
 
    wzajemne po�o�enie obu okien, a jedynie uaktualnianiu  
    ulegnie okno steruj�ce. */  
 
    case WM_SIZE:  
      MoveWindows(hEditWnd, 0, 0, LOWORD(lParam));  
      HIWORD(lParam), TRUE);  
      break;  
case WM_DESTROY:  
    PostQuitMessage(0);  
    break;  
  
default:  
    return (DefWindowProc(hWnd,Message,wParam,lParam));  
    }  
    return 0;  
}  
  
Jak sterowa� prac� aplikacji. Jak umieszcza� elementy  
graficzne-steruj�ce w oknie aplikacji. Najcz�ciej stosowane  
funkcje API Windows.  
________________________________________________________________ 
 
Elementy steruj�ce prac� aplikacji w Windows (ang. controls) s�  
r�wnie� swoistymi okienkami (tyle, �e potomnymi - Child Window  
wobec g��wnego okna aplikacji - Parent Window).  
Do utworzenia takiego specjalnego okna r�wnie� mo�na u�y�  
funkcji CreateWindow(). Je�li okno ma sta� si� nie g��wnym oknem 
 
aplikacji, lecz oknem steruj�cym przebiegiem programu, funkcja  
wymaga podania nast�puj�cych argument�w:  
 
- rodzaj klasy steruj�cej (ang. control class)  
- rodzaj elementu steruj�cego (ang. control style)  
 
Typowe rodzaje element�w (obiekt�w) staruj�cych w ...
Zgłoś jeśli naruszono regulamin