1.1. Programowanie dla Windows. Programowanie dla Windows. Komunikaty w systemie Windows. Application Programming Interface
|
|
- Danuta Magdalena Szewczyk
- 9 lat temu
- Przeglądów:
Transkrypt
1 1 Katedra Optoelektroniki i Systemów Elektronicznych 2 Oprogramowanie Systemów Elektronicznych Zagadnienia: Temat wykładu Etapy tworzenia okna Application Programming Interface 4 jest zbiorem funkcji, struktur, komunikatów, makr i reguł programistycznych stanowiących jednolitą i spójną platformę dla aplikacji Windows. Zasoby Win32 można podzielić na następujące kategorie: 1. Window Management interfejs użytkownika, zarządzanie wyświetlaniem okien. 2. Window Controls interfejs użytkownika, zarządzanie kontrolkami graficznymi. 3. Shell Features zarządzanie plikami, bazami danych, portami komunikacyjnymi i urządzeniami bazujące na hierarchicznej strukturze katalogów i obiektów (plików). 4. Graphics Device Interface zarządzanie wyjściem graficznym (monitor, drukarka); rysowanie linii, krzywych, figur zamkniętych, tekstu, map bitowych itp. 5. System Services zarządzanie dostępem do zasobów systemowych komputera, takich jak pamięć, system plików, urządzenia, zasoby komunikacyjne, procesy, wątki, mechanizmy wymiany danych i dzielenia kodu (DDE, DLL). 6. International Features funkcje wspomagające tworzenie aplikacji międzynarodowych niezależnych od wersji językowej systemu. 7. Network Services -zarządzanie komunikacją między komputerami poprzez sieć; zawiera Windows Networking, Windows Sockets, NetBIOS, NetDDE,... Architektura sterowana komunikatami Współpraca aplikacji z systemem Windows bazuje na systemie komunikatów. Każde okno tworzone w programie Windows ma swoją procedurę okna (ang. window procedure). Aby wysłać komunikat do okna, system Windows wywołuje procedurę okna. Procedura okna przetwarza komunikat, a następnie zwraca sterowanie do Windows. Struktura komunikatu Windows - MSG typedef struct tagmsg { // msg HWND hwnd; // Handle to window whose window procedure // receives the message UINT message; // Message number WPARAM wparam; LPARAM lparam; //Specifies additional information about the message. // The exact meaning depends on the value of the message member. DWORD time; // Time at which the message was posted. POINT pt; // Specifies the cursor position, in screen coordinates, // when the message was posted. MSG; 5 6 Kolejka komunikatów System Windows zakłada dla każdego działającego programu kolejkę komunikatów (ang. message queue). W kolejce tej umieszczane są komunikaty do wszystkich okien, które program może utworzyć. W programie znajduje się niewielki fragment kodu zwany pętlą komunikatów (ang. message loop), który zajmuje się pobieraniem komunikatów z kolejki i kierowaniem ich do odpowiedniej procedury okna. Istnieją komunikaty kolejkowane i niekolejkowane. Komunikaty kolejkowane są umieszczane przez Windows w kolejce i pobierane w pętli komunikatów. Do komunikatów kolejkowanych zalicza się komunikaty pochodzące od klawiatury, myszy, timera, WM_PAINT i WM_QUIT. Pozostałe nie są kolejkowane. Komunikaty niekolejkowane są przesyłane bezpośrednio przez system, który wywołuje procedurę okna. Message loop (Pętla komunikatów) while(getmessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); GetMessage()- gets a message from application's message queue. If there is no message, GetMessage() Blocks. TranslateMessage() does some additional processing on keyboard events like generating WM_CHAR messages to go along with WM_KEYDOWN messages. DispatchMessage() - sends the message out to the window that the message was sent to. This could be our main window or it could be another one, or a control. System takes care of sending messege to proper window. 1.1
2 7 8 Wysyłanie komunikatów The PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window and returns without waiting for the thread to process the message. np. PostMessage(hwnd, WM_CLOSE, 0, 0); //close window Pobieranie komunikatów The GetMessage function retrieves a message from the calling thread's message queue and places it in the specified structure. np. GetMessage(&Msg, NULL, 0, 0); If the function retrieves a message other than WM_QUIT, the return value is greater than zero. If there is an error, the return value is -1. The SendMessage function sends the specified message to a window or windows. The SendMessage function calls the window procedure for the specified window and does not return until the window procedure has processed the message. np. SendMessage(hwnd, WM_SIZE, 0, 0); //resize window The PeekMessage function checks a thread message queue for a message and places the message (if any) in the specified structure. np. PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); If a message is available, the return value is nonzero. Unlike the GetMessage function, the PeekMessage function does not wait for a message to be placed in the queue before returning Przykładowe komunikaty Windows WM_COMMAND This message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated. wnotifycode = HIWORD(wParam); // notification code wid = LOWORD(wParam); // item, control, or accelerator identifier hwndctl = (HWND) lparam; // handle of control WM_SIZE This message is sent to a window after its size has changed. fwsizetype = wparam; // resizing flag nwidth = LOWORD(lParam); // width of client area nheight = HIWORD(lParam); // height of client area Predefined macros: #define HIWORD(l) #define LOWORD(l) ((WORD) (((DWORD) (l) >> 16) & 0xFFFF)) ((WORD) (l)) Przykładowe komunikaty Windows WM_PAINT An application sends this message when Windows or another application makes a request to paint a portion of an application's window. hdc = (HDC) wparam; // the device context to draw in WM_CREATE This message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. The window procedure of the new window receives this message after the window is created, but before the window becomes visible. The message is sent before the CreateWindowEx or CreateWindow function returns. lpcs = (LPCREATESTRUCT) lparam; // structure with creation data WM_DESTROY This message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen. This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist Przykładowe komunikaty klawiatury WM_KEYDOWN, WM_KEYUP, WM_CHAR WM_SYSKEYDOWN, WM_SYSKEYUP The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. WM_CHAR contains the character code of the key that was pressed. The WM_SYSKEYDOWN message is posted to the window with the keyboard focus when the user holds down the ALT key and then presses another key. It also occurs when no window currently has the keyboard focus. Kod naciśniętego lub zwolnionego klawisza zawiera parametr wparam. W pliku winuser.h zdefiniowano kody klawiszy wirtualnych, np. VK_RETURN, VK_ESCAPE, VK_SPACE, VK_HOME, VK_END, VK_F1, VK_F2,... Etapy generowania komunikatów klawiatury 1. Przechwycenie zdarzenia wciśnięcia lub zwolnienia klawisza przez sterownik klawiatury 2. Przesłanie sygnału o zdarzeniu w postaci komunikatu do systemu, który umieszcza go w kolejce komunikatów systemu. 3. Przesłanie komunikatu klawiatury do kolejki komunikatów programu, który posiada tzw. ognisko wejścia (ang. Input focus). 4. Przesłanie komunikatu klawiatury do odpowiedniej procedury okna za pomocą funkcji DispatchMessage. Kolejkowanie komunikatów klawiatury najpierw w kolejce systemowej, a następnie programowej pozwala na synchronizację ciągu komunikatów klawiatury, w których występują komunikaty przekazujące ognisko innej aplikacji (np. Alt-Tab). Tylko jedna procedura okna wszystkich aplikacji pracujących w systemie może otrzymywać komunikaty klawiatury. Okno, które otrzymuje komunikaty klawiatury ma ognisko. 1.2
3 13 14 Komunikaty myszy WM_MOUSEMOVE, WM_MOUSEWHEEL WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MBUTTONDBLCLK WM_RBUTTONDOWN, WM_RBUTTONUP, WM_RBUTTONDBLCLK Zmienne wparam i lparam zawierają informacje o położeniu kursora, stanie przycisków myszy i stanie klawiszy shift i control. Wciśnięcie lewego przycisku myszy podczas trzymania klawisza SHIFT. Puszczenie przycisku Etapy generowania komunikatów myszy W pierwszej kolejności procedura okna otrzymuje komunikat WM_NCHITTEST (ang. non-client hit test). Komunikat ten jest przekazywany do domyślnej procedury okna DefWindowProc. Procedura ta m.in. określa położenie kursora w obrębie okna aplikacji: a) Obszar roboczy (client area), b) Obszar nieroboczy (non-client area) (pasek tytułu, pasek menu, paski przewijania). Na podstawie wartości zwracanej przez funkcję DefWindowProc generowany jest odpowiedni komunikat do procedury okna. Komunikaty pochodzące z obszaru nieroboczego różnią się w nazwie występowaniem przedrostka NC (nonclient), np. WM_NCMOUSEMOVE Przechwytywanie myszy Standardowo komunikaty myszy nie są przekazywane przez system do procedury okna, jeśli wskaźnik jest poza oknem. Można jednak wymusić przekazywanie komunikatów myszy do określonej procedury okna dla dowolnej pozycji wskaźnika na ekranie. Do tego celu służy funkcja HWND SetCapture( HWND hwnd // handle of window to receive mouse capture ); Wszystkie komunikaty myszy są wówczas komunikatami obszaru roboczego. Przywrócenie normalnego trybu odbywa się po wywołaniu funkcji ReleaseCapture() lub po przyciśnięciu lewego przycisku myszy w innym oknie. Procedura okna LRESULT CALLBACK WindowProc( HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam ); Parameters: Hwnd - [in] Handle to the window. umsg - [in] Specifies the message. wparam, lparam - [in] Specifies additional message information. The contents of this parameter depend on the value of the umsg parameter. Return Value: The return value is the result of the message processing and depends on the message sent Przykładowy szkielet procedury okna LRESULT CALLBACK WndProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) { switch (umsg) { case WM_CREATE: // Initialize the window. case WM_PAINT: // Paint the window's client area. case WM_SIZE: // Set the size and position of the window. case WM_DESTROY: // Clean up window-specific data objects. // Process other messages. return DefWindowProc(hwnd, umsg, wparam, lparam); Domyślna procedura okna przeznaczona jest do przetwarzania komunikatów, przesłanych do okna, ale nie przetworzonych. Przechwytywanie komunikatów klawiatury LRESULT CALLBACK WndProc( HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) { switch (umsg) { case WM_CHAR: switch (wparam) { case '0': case f': case F': case WM_KEYDOWN: switch (wparam) { case VK_ESCAPE: PostQuitMessage( 0 ); case VK_F1: // Process other messages. return DefWindowProc( hwnd, umsg, wparam, lparam); //switch (umsg) //WndProc 1.3
4 19 20 Przechwytywanie komunikatów myszy LRESULT CALLBACK WndProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) { WPARAM fwkeys; short int xpos, ypos; switch (umsg) { case WM_LBUTTONDOWN: fwkeys = wparam; // key flags xpos = LOWORD(lParam); // horizontal position of cursor ypos = HIWORD(lParam); // vertical position of cursor case WM_MOUSEMOVE: fwkeys = wparam; // key flags xpos = LOWORD(lParam); // horizontal position of cursor ypos = HIWORD(lParam); // vertical position of cursor return DefWindowProc( hwnd, umsg, wparam, lparam); Zagadnienia: Etapy tworzenia okna Etapy tworzenia okna 22 Etapy tworzenia okna Okno aplikacji i klasa okna Okno aplikacji jest tworzone na podstawie klasy okna (ang. window class), która określa procedurę okna. Istnienie klasy okna pozwala na utworzenie wielu okien należących do tej samej klasy, a tym samym używających tej samej procedury okna. Tworzenie okna w programie przebiega następująco: 1. Zadeklarowanie lub zdefiniowanie procedury okna 2. Zainicjowanie pól struktury WNDCLASSEX 3. Rejestracja klasy okna 4. Utworzenie okna na podstawie zarejestrowanej klasy 5. Wyświetlenie okna Przykładowy szablon aplikacji Windows (1/5) #include <windows.h> const char g_szclassname[] = "mywindowclass"; //Step 1: Declaration of the Window Procedure LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); int WIN WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { // HINSTANCE - hinstance // Handle to the programs executable module (the.exe file in memory) // HINSTANCE hprevinstance // Always NULL for Win32 programs. // LPSTR lpcmdline // The command line arguments as a single string. NOT including the // program name. // int ncmdshow // An integer value which may be passed to ShowWindow(). 23 Etapy tworzenia okna 24 Etapy tworzenia okna Przykładowy szablon aplikacji Windows (2/5) WNDCLASSEX wc; HWND hwnd; MSG Msg; //Step 2: Initializing members of Window Class structure wc.cbsize = sizeof(wndclassex); wc.style = 0; // Class Styles (CS_*) wc.lpfnwndproc = WndProc; wc.cbclsextra = 0; //Amount of extra data allocated for this //class in memory. wc.cbwndextra = 0; //Amount of extra data allocated in memory //per window of this type. wc.hinstance = hinstance; //Handle to application instance wc.hicon = LoadIcon(NULL, IDI_APPLICATION); wc.hcursor = LoadCursor(NULL, IDC_ARROW); wc.hbrbackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszmenuname = NULL; //Name of a menu resource to use //for the windows with this class. wc.lpszclassname = g_szclassname; wc.hiconsm = LoadIcon(NULL, IDI_APPLICATION); Przykładowy szablon aplikacji Windows (3/5) //Step 3: Registering the Window Class if(!registerclassex(&wc)) { MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION MB_OK); // Step 4: Creating the Window hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, //window style g_szclassname, //window class name "The title of my window", WS_OVERLAPPEDWINDOW, //window style CW_USEDEFAULT,CW_USEDEFAULT,240,120, //window coordinates NULL //parent window handle NULL //menu handle hinstance, //handle to application instance NULL //pointer to window creation data ); 1.4
5 25 Etapy tworzenia okna 26 Etapy tworzenia okna Przykładowy szablon aplikacji Windows (4/5) if (hwnd == NULL) { MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION MB_OK); Przykładowy szablon aplikacji Windows (5/5) // Step 6: the Window Procedure LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_PAINT: // WinMain ShowWindow(hwnd, ncmdshow); //send WM_SIZE and WM_SHOWWINDOW UpdateWindow(hwnd); //send WM_PAINT message // The Message Loop while(getmessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); return Msg.wParam; case WM_CLOSE: DestroyWindow(hwnd); case WM_DESTROY: PostQuitMessage(0); return DefWindowProc(hwnd, msg, wparam, lparam); Zagadnienia: Etapy tworzenia okna Zasoby programu Zasoby są danymi przechowywanymi razem z programem w pliku EXE. W trakcie uruchamiania programu do pamięci ładowany jest tylko kod programu, a zasoby nie są bezpośrednio dostępne przy użyciu zmiennych zdefiniowanych w kodzie programu. Przed użyciem zasobów należy je jawnie załadować do pamięci z pliku EXE. Rodzaje zasobów: 1. Ikony 2. Kursory 3. Menu Bitmapy 6. Napisy 7. Klawisze skrótu 8. Zasoby zdefiniowane przez użytkownika Kompilowanie zasobów Zasoby programu definiuje się w skrypcie zasobów (plik ASCII z rozszerzeniem RC). Skrypt ten zawiera opis zasobów w formacie ASCII lub odwołania do innym plików (ASCII lub binarnych) zawierających opisy zasobów. W plikach zasobów można stosować dyrektywy preprocesora. Kompilator zasobów (RC.EXE) kompiluje skrypt zasobów do postaci binarnej (.RES), który następnie jest dołączany do kodu wykonawczego (.EXE) za pomocą linkera (LINK.EXE). Library files & compiled resource files Plik nagłówkowy "resource.h zawierający identyfikatory zasobów #define IDS_STRING1 1 #define IDI_ICON 101 #define IDR_MENU 1000 #define IDM_FILE_EXIT 1001 #define IDM_HELP_CONTENTS 1002 Plik zasobów #include <windows.h> #define IDM_HELP_ABOUT 1003 #define IDB_BITMAP1 103 Some resource editors and compilers use { in place of BEGIN and in place of END. #include resource.h STRINGTABLE DISCARDABLE BEGIN IDS_STRING1 Application title" END IDI_ICON ICON DISCARDABLE app_one.ico" 1.5
6 31 32 Plik zasobów cd. BEGIN POPUP "&File" BEGIN MENUITEM "E&xit", IDM_FILE_EXIT END POPUP "&Help" BEGIN MENUITEM "&Contents", IDM_HELP_CONTENTS MENUITEM SEPARATOR MENUITEM "&About...", IDM_HELP_ABOUT END END IDB_BITMAP1 BITMAP DISCARDABLE "bitmap1.bmp Korzystanie z zasobów Bitmapa Kursor Ikona Menu Napis Rodzaj zasobu Tablica akceleratorów Ikona, Kursor, Bitmapa Funkcja ładująca do pamięci Funkcja usuwająca z pamięci LoadAccelerators LoadBitmap LoadCursor LoadIcon LoadMenu LoadString LoadImage DestroyAcceleratorTable DeleteObject DestroyCursor DestroyIcon DestroyMenu - DestroyIcon DestroyCursor DeleteObject Korzystanie z zasobów (sygnatury funkcji) Functions: LoadBitmap, LoadCursor, LoadIcon, LoadMenu // 1st parameter - handle of application instance // 2st parameter - resorce name or resource identifier int LoadString( HINSTANCE hinstance, UINT uid, LPTSTR lpbuffer,// address of buffer for resource int nbuffermax // size of buffer ); HANDLE LoadImage( HINSTANCE hinstance, LPCTSTR lpszname, UINT utype, // type of image int cxdesired, // desired width int cydesired, // desired height UINT fuload // load flags ); Metody ładowania zasobów Jeśli parametr hinstance == NULL to funkcje ładują zasoby systemowe, których identyfikatory są zdefiniowane w plikach nagłówkowych. Funkcje mogą ładować zasoby albo z pliku o określonej nazwie, jeśli drugi parametr jest typu LPTSTR i starsze 16 bitów tej zmiennej jest różne od 0, np.: HICON hicon = LoadIcon(hInstance, my_icon ); Najczęściej jednak podaje się jako drugi parametr identyfikator zasobu. Do tego celu wykorzystuje się makro MAKEINTRESOURCE zamień liczbę całkowitą na nazwę zasobu (ang. make an integer into a resource string), np.: HICON hicon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)); #define MAKEINTRESOURCE(i) (LPTSTR) ((DWORD) ((WORD) (i))) MAKEINTRESOURCE zwraca wartość, w której starsze 16 bitów jest równe Metody dołączania menu do okna aplikacji Menu w programie można utworzyć na dwa sposoby: 1. Zdefiniować strukturę menu w pliku zasobów i zainicjować pole nazwy menu w strukturze klasy okna (lpszmenuname) wc.lpszmenuname = MAKEINTRESOURCE(IDR_MYMENU); 2. Zdefiniować strukturę menu w trakcie inicjalizacji okna do którego ma być dołączone menu (przy obsłudze komunikatu WM_CREATE). Struktura menu jest usuwana automatycznie przy usuwaniu okna funkcją DestroyWindow(); Ad. 2. Dynamiczne generowanie struktury MENU case WM_CREATE: { HMENU hmenu, hsubmenu; hmenu = CreateMenu(); hsubmenu = CreatePopupMenu(); AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "E&xit"); AppendMenu(hMenu, MF_STRING MF_POPUP, (UINT)hSubMenu, "&File"); hsubmenu = CreatePopupMenu(); AppendMenu(hSubMenu, MF_STRING, IDM_HELP_CONTENTS, "&Contents"); AppendMenu(hSubMenu, MF_SEPARATOR, ID_STUFF_GO, NULL); AppendMenu(hSubMenu, MF_STRING, 0, "&About"); AppendMenu(hMenu, MF_STRING MF_POPUP, (UINT)hSubMenu, "&Help"); SetMenu(hwnd, hmenu); 1.6
7 37 38 Obsługa zdarzeń menu Zdarzenia menu powodują wysłanie komunikatu WM_COMMAND do okna z którym jest skojarzone MENU. Identyfikator pozycji menu, będącej źródłem komunikatu, przekazywany jest przez parametr wparam. case WM_COMMAND: switch(loword(wparam)) { case IDM_FILE_EXIT: PostMessage(hwnd, WM_CLOSE, 0, 0); case IDM_HELP_CONTENTS: ShowWindow(hwndHelp, SW_SHOWNORMAL); case IDM_HELP_ABOUT: MessageBox(hwnd, About...", Program info", MB_OK); Inne sposoby ładowania menu Menu z pliku zasobów można załadować w trakcie pracy programu korzystając z funkcji HMENU LoadMenu( HINSTANCE hinstance, // handle of application instance LPCTSTR lpmenuname // menu name string or menu identifier ); Funkcja zwraca uchwyt menu, który można przekazać do funkcji CreateWindow, albo przypisać menu do okna, gdy okno już istnieje za pomocą funkcji SetMenu(hWnd, hmenu); Załadowane do pamięci menu można wyświetlić jako menu kontekstowe w miejscu wskaźnika myszy korzystając z funkcji TrackPopupMenu, np.: POINT point; case WM_RBUTTONUP: // <- przechwycenie komunikatu w procedurze okna point.x = LOWORD(lParam); point.y = HIWORD(lParam); ClientToScreen(hwnd, &point); //<- przeliczenie współrzędnych myszy TrackPopupMenu(hMenu,TPM_RIGHTBUTTON,point.x,point.y,0,hwnd,NULL); Zagadnienia: Etapy tworzenia okna Tworzenie kontrolek Kontrolki są specjalizowanymi oknami potomnymi aplikacji i tworzymy je za pomocą funkcji CreateWindow lub CreateWindowEx. Jeśli dodajemy kontrolkę predefiniowaną to należy w miejsce parametru lpclassname wstawić nazwę klasy kontrolki: Standard controls: BUTTON przycisk COMBOBOX lista rozwijana z możliwością edycji EDIT pole edycji LISTBOX pole listy SCROLLBAR pasek przewijania STATIC pole tekstowe Common controls, np.: STATUSCLASSNAME pasek statusu TOOLBARCLASSNAME pasek narzędzi PROGRESS_CLASS pasek postępu Tworzenie kontrolek Każda kontrolka ma określony zestaw styli, które podajemy w miejsce parametru dwstyle funkcji CreateWindow lub CreateWindowEx. Przykłady: BUTTON class: BS_RADIOBUTTON, BS_PUSHBUTTON, BS_CHECKBOX COMBOBOX class: CBS_UPPERCASE, CBS_HASSTRINGS EDIT class: ES_MULTILINE, ES_NUMBER, ES_PASSWORD LISTBOX class: LBS_SORT, LBS_NOTIFY SCROLLBAR class: SBS_HORZ, SBS_VERT Identyfikatory i uchwyty kontrolek Każde okno potomne ma swój własny uchwyt okna i niepowtarzalny identyfikator. Znając jeden z tych parametrów można uzyskać drugi. Jeśli znany jest uchwyt, a chcemy uzyskać identyfikator korzystamy z funkcji: lub id = GetWindowLong(hWndChild, GWL_ID); id = GetDlgCtrlID(hWndChild); Jeśli znany jest identyfikator, a chcemy uzyskać uchwyt korzystamy z funkcji: hwndchild = GetDlgItem(hWndParent, id); 1.7
8 43 44 Przekazywanie informacji między oknem macierzystym a kontrolką odbywa się za pośrednictwem komunikatów. Kontrolki typu Standard Controls przesyłają do okna nadrzędnego komunikat WM_COMMAND, a kontrolki typu Common Controls komunikat WM_NOTIFY. Wraz z komunikatem WM_COMMAND kontrolka przesyła do okna nadrzędnego następujące informacje: LOWORD(wParam) Identyfikator kontrolki HIWORD(wParam) Kod powiadomienia lparam uchwyt kontrolki Kod powiadomienia jest dodatkową informacją zawierającą bliższy opis zdarzenia związanego z komunikatem. Przykładowe komunikaty powiadomienia kontrolki typu BUTTON: The BN_PUSHED / BN_UNPUSHED notification message is sent when the push state of a button is set to pushed / unpushed. The BN_SETFOCUS / BN_KILLFOCUS notification message is sent when a button receives / loses the keyboard focus. The BN_CLICKED / BN_DOUBLECLICKED notification message is sent when the user clicks / double-clicks a button. Przykładowe komunikaty powiadomienia kontrolki typu EDIT: EN_SETFOCUS / EN_KILLFOCUS The EN_CHANGE notification message is sent when the user has taken an action that may have altered text in an edit control. The EN_SELCHANGE notification message notifies a rich edit control's parent window that the current selection has changed Kontrolka typu CHECKBOX Przełączanie stanu kontrolki SendMessage(hwndButton, BM_SETSTATE, 1, 0); SendMessage(hwndButton, BM_SETSTATE, 0, 0); Pobranie stanu kontrolki BOOL state = SendMessage(hwndButton, BM_GETSTATE, 0, 0); Pole edycji (EDIT) SetDlgItemText(hwnd, IDC_TEXT, "This is a string"); GetDlgItemText(hwnd, IDC_TEXT, buf, len); BOOL bsuccess; int ntimes = GetDlgItemInt(hwnd, IDC_NUMBER, &bsuccess, FALSE); Kontrolka typu LISTBOX Adding Items int index = SendDlgItemMessage(hwnd, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)"Hi there!"); SendDlgItemMessage(hwnd, IDC_LIST, LB_SETITEMDATA, (WPARAM)index, (LPARAM)nTimes); Funkcja SendDlgItemMessage wysyła komunikat do okna, jeśli znany jest uchwyt okna nadrzędnego i identyfikator kontrolki. Funkcja ta jest połączeniem dwóch funkcji GetDlgItem i SendMessage Kontrolka typu LISTBOX Przechwytywanie zdarzeń case WM_COMMAND: switch(loword(wparam)) { case IDC_LIST: // It's our listbox, check the notification code switch(hiword(wparam)) { case LBN_SELCHANGE: // Selection changed, do stuff here. //... other controls Kontrolka typu LISTBOX Pobieranie danych HWND hlist = GetDlgItem(hwnd, IDC_LIST); // get the number of selected items, int count = SendMessage(hList, LB_GETSELCOUNT, 0, 0); // allocate a buffer based on the number of items, int *buf = GlobalAlloc(GPTR, sizeof(int) * count); // send LB_GETSELITEMS to fill in the array. SendMessage(hList, LB_GETSELITEMS, (WPARAM)count, (LPARAM)buf); //... Do stuff with indexes GlobalFree(buf); 1.8
9 49 50 Zagadnienia: Etapy tworzenia okna Występują okna dialogowe modalne i niemodalne. Okno modalne jest to okno programu, którego uaktywnienie uniemożliwia przełączenie się do innego okna w programie. Szczególnym rodzajem okna modalnego jest modalne okno systemowe, którego pojawienie się blokuje dostęp do wszystkich okien uruchomionych aktualnie programów. Etapy tworzenia okna dialogowego modalnego: 1. Utworzenie szablonu okna dialogowego i zapisanie go do pliku zasobów (RC), albo do oddzielnego pliku z rozszerzeniem DLG. W drugim przypadku w pliku RC należy dodać wpis rcinclude nazwapliku.dlg 2. Napisanie procedury okna dialogowego 3. Utworzenie okna dialogowego modalnego poprzez wywołanie funkcji DialogBox 4. Przechwycenie wartości zwracanej przez funkcję DialogBox Tworzenie okna dialogowego modalnego Przykładowy szablon okna dialogowego: IDD_ABOUT DIALOG DISCARDABLE 0, 0, 239, 66 STYLE DS_MODALFRAME WS_POPUP WS_CAPTION WS_SYSMENU CAPTION "My About Box" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,174,18,50,14 PUSHBUTTON "Cancel",IDCANCEL,174,35,50,14 GROUPBOX "About this program...",idc_static,7,7,225,52 CTEXT "An example program showing how to use\ Dialog Boxes\r\n\r\nby theforger, IDC_STATIC,16,18,144,33 END Identyfikatory kontrolek: IDOK, IDCANCEL Procedura okna dialogowego modalnego BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam) { switch(message) { case WM_INITDIALOG: return TRUE; //always true Return value case WM_COMMAND: switch(loword(wparam)) { case IDOK: EndDialog(hwnd, IDOK); case IDCANCEL: EndDialog(hwnd, IDCANCEL); return FALSE; //function doesn t processes message return TRUE; //function processes message Różnice między procedurą okna, a procedurą okna dialogowego modalnego Procedura okna 1. Zwraca wartość LRESULT 2. Wywołuje funkcję DefWindowProc 3. Otrzymuje komunikat inicjujący WM_CREATE 4. Komunikaty przechodzą przez kolejkę komunikatów aplikacji 5. Jest wywoływana przez samą aplikację Procedura okna dialogowego modalnego 1. Zwraca wartość BOOL 2. Zwraca TRUE, jeśli przetwarza komunikat lub FALSE jeśli nie przetwarza komunikatu 3. Otrzymuje komunikat inicjujący WM_INITDIALOG 4. Komunikaty trafiają z pominięciem kolejki komunikatów aplikacji 5. Jest wywoływana przez system Przykład tworzenia okna dialogowego w kodzie programu int ret; case WM_COMMAND: //catch message from menu switch(loword(wparam)) { case ID_HELP_ABOUT: // MENU/HELP/ABOUT int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc); if (ret == IDOK){ MessageBox(hwnd,"Dialog exited with IDOK.", "Notice", MB_OK MB_ICONINFORMATION); else if(ret == IDCANCEL){ MessageBox(hwnd,"Dialog exited with IDCANCEL.", "Notice", MB_OK MB_ICONINFORMATION); else if(ret == -1){ MessageBox(hwnd, "Dialog failed!", "Error", MB_OK MB_ICONINFORMATION); 1.9
10 55 56 Niemodalne okna dialogowe (1/3) Niemodalne okno dialogowe tworzy się przy pomocy funkcji CreateDialog HWND CreateDialog( HINSTANCE hinstance, // handle to application instance LPCTSTR lptemplate, // identifies dialog box template name HWND hwndparent, // handle to owner window DLGPROC lpdialogfunc // pointer to dialog box procedure ); W przeciwieństwie do funkcji DialogBox, która kończy działanie dopiero po zlikwidowaniu okna modalnego, funkcja CreateDialog natychmiast kończy działanie i zwraca uchwyt do okna dialogowego. Istotna różnica między oknem modalnym i niemodalnym polega na tym, iż komunikaty przeznaczone dla niemodalnego okna dialogowego przechodzą przez kolejkę komunikatów programu. Niemodalne okna dialogowe (2/3) Pętla komunikatów programu korzystającego z niemodalnych okien dialogowych musi zostać rozbudowana, w celu rozróżnienia komunikatów skierowanych do procedury okna aplikacji i do procedury niemodalnego okna dialogowego. while(getmessage(&msg, NULL, 0, 0) > 0) { if (hdlgmodeless == 0!isDialogMessage(hDlgModeless, &msg)) { TranslateMessage(&Msg); DispatchMessage(&Msg); hdlgmodeless uchwyt niemodalnego okna dialogowego zwrócony przez funkcję CreateDialog Jeśli komunikat jest przeznaczony dla niemodalnego okna dialogowego, to funkcja IsDialogMessage wysyła go do procedury okna obsługującej okno dialogowe i zwraca TRUE, w przeciwnym razie zwraca FALSE Niemodalne okna dialogowe (3/3) Uchwyt niemodalnego okna dialogowego hdlgmodeless może być wykorzystywany przez inne części programu do sprawdzenia, czy istnieje niemodalne okno dialogowe. Na przykład inne okna programu mogą wysyłać komunikaty do okna dialogowego, gdy hdlgmodeless jest różne od zera. Niemodalne okna dialogowe usuwa się wywołując funkcję DestroyWindow, np.: BOOL CALLBACK DlgProc(HWND hdlg, UINT Message, WPARAM wparam, LPARAM lparam) { switch(message) { //... case WM_CLOSE: DestroyWindow(hDlg); hdlgmodeless = 0; return FALSE; //function doesn t processes message return TRUE; //function processes message Zagadnienia: Etapy tworzenia okna Multiple Document Interface Tworzenie okna-klienta (MDI Client WINDOW) Okno-klienta tworzone za pomocą funkcji CreateWindow w oparciu o predefiniowaną klasę MDICLIENT. Okno to musi mieć styl WS_CHILD. Tworzenie okna-klienta realizuje się przy obsłudze komunikatu WM_CREATE okna framugi (MDI FRAME WINDOW). Okno-klient pokrywa obszar roboczy framugi i jest odpowiedzialne za obsługę MDI. Skojarzenie okien potomnych z menu okna nadrzędnego 1.10
11 61 62 Tworzenie okna-klienta (MDI Client WINDOW) CLIENTCREATESTRUCT ccs; // Uchwyt podmenu do którego jest dołączana lista nazw okien potomnych ccs.hwindowmenu = GetSubMenu(GetMenu(hwnd), 2); // Identyfikator menu, począwszy od którego będą skojarzone okna potomne ccs.idfirstchild = ID_MDI_FIRSTCHILD; Stała zdefiniowana w pliku nagłówkowym // Uchwyt okna-klienta HWND g_hmdiclient = NULL; Predefiniowana klasa MDICLENT g_hmdiclient = CreateWindowEx(WS_EX_CLIENTEDGE, "mdiclient", NULL, WS_CHILD WS_CLIPCHILDREN WS_VSCROLL WS_HSCROLL WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_MAIN_MDI, GetModuleHandle(NULL), (LPVOID)&ccs); Wskaźnik do struktury CLIENTCREATESTRUCT Inicjowanie klasy okna potomnego (MDI Child WINDOW) char g_szchildclassname[] = "MyMDIChild"; WNDCLASSEX wc; wc.cbsize = sizeof(wndclassex); wc.lpfnwndproc = MDIChildWndProc; wc.lpszmenuname = NULL; wc.lpszclassname = g_szchildclassname; wc.hbrbackground = (HBRUSH)(COLOR_3DFACE+1); // initialize other members... If (!RegisterClassEx(&wc)) { MessageBox(0, "Could Not Register Child Window", "Oh Oh...", MB_ICONEXCLAMATION MB_OK); return FALSE; Każdy rodzaj okna potomnego musi mieć zdefiniowaną odpowiednią klasę okna Tworzenie okna potomnego (MDI Child WINDOW) Okna potomne (okna dokumentów aplikacji) tworzy się je przez zainicjowanie struktury MDICREATESTRUCT i wysłanie do okna-klienta komunikatu WM_MDICREATE ze wskaźnikiem do tej struktury. MDICREATESTRUCT mcs; HWND hchild; mcs.sztitle = "[Untitled]"; Pointer to mcs.szclass = g_szchildclassname; MDICREATESTRUCT mcs.howner = GetModuleHandle(NULL); mcs.x = mcs.cx = CW_USEDEFAULT; mcs.y = mcs.cy = CW_USEDEFAULT; mcs.style = MDIS_ALLCHILDSTYLES; hchild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs); if(!hchild) { MessageBox(hMDIClient, "MDI Child creation failed.", "Oh Oh...", MB_ICONEXCLAMATION MB_OK); Domyślne procedury okna framugi i okna potomnego Procedury okna framugi i okna potomnego wykorzystują specjalne funkcje obsługi komunikatów przeznaczone dla aplikacji MDI. Procedura framugi wywołuje funkcję DefFrameProc(hwnd, g_hmdiclient, msg, wparam, lparam); Uchwyt okna klienta Procedura okna potomnego wywołuje funkcję DefMDIChildProc(hwnd, msg, wparam, lparam); Obsługa komunikatu WM_COMMAND w procedurze okna framugi case WM_COMMAND: switch(loword(wparam)) { //... handle frame window IDs... user has clicked on one of // Handle MDI Window commands the Window menu items if(loword(wparam) >= ID_MDI_FIRSTCHILD) { DefFrameProc(hwnd,g_hMDIClient,msg,wParam,lParam); else { HWND hchild; get active child window hchild =(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,0); if(hchild) { SendMessage(hChild, WM_COMMAND, wparam, lparam); forward the message to the active child window for processing Procedura okna potomnego An application sends the WM_MDIACTIVATE message to a multiple document interface (MDI) client window to instruct the client window to activate a different MDI child window. As the client window processes this message, it sends WM_MDIACTIVATE to the child window being deactivated and to the child window being activated. // Message sent to MDI client wparam = (WPARAM) (HWND) hwndchildact; // child to activate lparam = 0; // not used; must be zero // Message received by MDI child hwndchilddeact = (HWND) wparam; hwndchildact = (HWND) lparam; // child being deactivated // child being activated The WM_MDIACTIVATE message is send first to the child window being deactivated and next to the child window being activated 1.11
12 67 Pętla komunikatów aplikacji MDI while(getmessage(&msg, NULL, 0, 0) > 0) { if (!TranslateMDISysAccel(g_hMDIClient, &Msg)) { TranslateMessage(&Msg); DispatchMessage(&Msg); Przetwarzanie klawiszy skrótu aplikacji MDI The TranslateMDISysAccel function processes accelerator keystrokes for window menu commands of the multiple document interface (MDI) child windows associated with the specified MDI client window. Ctrl F4 -> zamknięcie okna potomnego Ctrl F6 -> przełączanie między oknami potomnymi 1.12
Komunikaty w Windows. Jarosław Kuchta
Komunikaty w Windows Jarosław Kuchta Okna i procedury okien W Windows każde okno ma swoją procedurę sterującą. LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { } gdzie:
IFiZR Laboratorium 5 Info
IFiZR Laboratorium 5 Info File->New->Project->Windows Application (DevC++) Kurs WinAPI: http://cpp0x.pl/kursy/kurs-winapi-c++/167 #include #include #include #include
Procedura okna: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
1. Pierwszy program pod Windows 1/8 Procedura okna: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); UINT unsigned int DWORD 32-bitowy unsigned int. LPSTR - wskaźnik do
Programowanie na poziomie sprzętu. Programowanie w Windows API
Programowanie w Windows API Windows API Windows Application Programming Interface (API) to zestaw funkcji systemu operacyjnego Windows, które umożliwiają aplikacjom korzystanie z wszystkich usług systemu.
Podstawy programowania w języku C dla środowiska Windows
Podstawy programowania w języku C dla środowiska Windows Część pierwsza Windows API wprowadzenie Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera
Programowanie w środowisku Windows. mgr inż. Krzysztof Mossakowski k.mossakowski@mini.pw.edu.pl http://www.mini.pw.edu.
Programowanie w środowisku Windows mgr inż. k.mossakowski@mini.pw.edu.pl Plan wykładu 1. Okna, komunikaty, czas, błędy 2. Typy, struktury, makra, mysz, klawiatura, wersje 3. GDI 4. Zasoby, okna dialogowe,
Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych
Laboratorium OiOSE. Programowanie w środowisku MS Visual C++ 1 Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych Organizacja i Oprogramowanie Systemów Elektronicznych Michał Kowalewski
Podstawy programowania w języku C dla środowiska Windows
Podstawy programowania w języku C dla środowiska Windows Część druga Windows API pierwsze kroki Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera
Podstawowy projekt OpenGL utworzony przy użyciu środowisk programistycznych firmy Microsoft.
Podstawowy projekt OpenGL utworzony przy użyciu środowisk programistycznych firmy Microsoft. Autor: Radosław Płoszajczak Spis treści I. Wymagania i utworzenie projektu w Visual Studio 2005...2 II. Absolutne
Projektowanie i programowanie aplikacji biznesowych. Wykład 2
Projektowanie i programowanie aplikacji biznesowych Wykład 2 Kontrolki w Windows API Aby korzystać z kontrolek należy dołączyć plik nagłówkowy o nazwie commctrl.h oraz bibliotekę o nazwie libcomctl32.a.
Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.
Dwiczenie 5. TEMAT: CEL: Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008. Celem dwiczenia jest poznanie możliwości VS 2008 w zakresie tworzenia i uruchamiania aplikacji z kodem mieszanym
Wprowadzenie do programowania w Windows
Wprowadzenie do programowania w Windows Sławomir Samolej Rzeszów, 1999 1. Wstęp Od kilku lat dominującym systemem operacyjnym na rynku komputerów osobistych jest Microsoft Windows. Wersje systemu Windows
Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie I. Wprowadzenie do programowania w Windows
Laboratorium Grafiki Komputerowej i Animacji Ćwiczenie I Wprowadzenie do programowania w Windows Sławomir Samolej Rzeszów, 2012 1. Wstęp Od kilku lat dominującym systemem operacyjnym na rynku komputerów
PROE wykład 8 Interfejs użytkownika (GUI) dr inż. Jacek Naruniec
PROE wykład 8 Interfejs użytkownika (GUI) dr inż. Jacek Naruniec Co to jest GUI? Graphical User Interface (GUI), czyli po prostu interfejs użytkownika (UI). Najpopularniejsze GUI dla C++: Qt WinAPI MFC
Programowanie w języku C++ z użyciem Windows API
Programowanie w języku C++ z użyciem Windows API Autor: Mateusz Ferenc Data opracowania: 30 maja 2012 r. Windows API jest jedną z bibliotek programistycznych przeznaczonych do pisania programów na platformę
Zegary. Zegary (timers) umożliwiają cykliczne w danych odstępach czasu wykonać określone operacje.
Zegary Zegary (timers) umożliwiają cykliczne w danych odstępach czasu wykonać określone operacje. Zaczniemy od funkcji przetwarzania komunikatów: //procedura okna LRESULT CALLBACK WndProc(HWND hwnd, UINT
Dodanie nowej formy do projektu polega na:
7 Tworzenie formy Forma jest podstawowym elementem dla tworzenia interfejsu użytkownika aplikacji systemu Windows. Umożliwia uruchomienie aplikacji, oraz komunikację z użytkownikiem aplikacji. W trakcie
Microsoft Visual C++
Microsoft Visual C++ Typy aplikacji okna dialogowe Typy aplikacji Multiple Document Obsługa zdarzeń - komunikaty W celu obsługi zdarzeń pochodzących z wielu źródeł funkcja MainLoop odbiera komunikaty systemowe
MS Visual Studio 2005 Team Suite - Performance Tool
MS Visual Studio 2005 Team Suite - Performance Tool przygotował: Krzysztof Jurczuk Politechnika Białostocka Wydział Informatyki Katedra Oprogramowania ul. Wiejska 45A 15-351 Białystok Streszczenie: Dokument
Podstawy programowania w środowisku Windows. Oto identyfikatory najczęściej obsługiwanych meldunków (przedrostek WM to skrót od Windows message):
GRAFIKA KOMPUTEROWA Podstawy programowania w środowisku Windows 1. Struktura programu w środowisku MS Windows Program dla Windows powinien mieć przynajmniej jedno okno (chociaż może być ono niewidoczne).
Tworzenie aplikacji Windows Podstawy obsługi komunikatów Windows (Delphi)
Jacek Matulewski http://www.phys.uni.torun.pl/~jacek/ Tworzenie aplikacji Windows Podstawy obsługi komunikatów Windows (Delphi) Ćwiczenia Toruń, 2 grudnia 2002 Najnowsza wersja tego dokumentu znajduje
Camspot 4.4 Camspot 4.5
User manual (addition) Dodatek do instrukcji obsługi Camspot 4.4 Camspot 4.5 1. WiFi configuration 2. Configuration of sending pictures to e-mail/ftp after motion detection 1. Konfiguracja WiFi 2. Konfiguracja
Załącznik do ćwiczenia w środowisku MASM32 wersji 10. Tryb graficzny w systemie Windows
Załącznik do ćwiczenia w środowisku MASM32 wersji 10 7.7. Programowanie aplikacji graficznej Tryb graficzny w systemie Windows 7.7.1. Współdziałanie aplikacji graficznej z systemem Windows Aplikacja graficzna
Formy dialogowe w środowisku Gnome
Środowisko graficzne Gnome posiada wiele atrakcyjnych funkcji, które często nie są przez administratorów wykorzystywane. Jedną z nich jest dołączony zestaw form dialogowych o nazwie Zenity ( http://library.gnome.org/users/zenity/stable/
Formaty plików graficznych - wprowadzenie
Formaty plików graficznych - wprowadzenie Obraz graficzny jest dwuwymiarową tablicą pikseli, zwana czasem rastrem. Kolor piksela może być reprezentowany w następujący sposób: Dla obrazów monochromatycznych
1. Wstęp. 2. Szablon. 1 WinApi Wstęp i szablon. Czym jest API?
1 WinApi Wstęp i szablon 1. Wstęp Czym jest API? API Windows to zestaw funkcji, które pozwalają zbudować praktycznie dowolną aplikację działającą w systemach Windows 95, 98, NT, 2000 oraz CE. Za ich pomocą
Ćwiczenia 2 IBM DB2 Data Studio
Ćwiczenia 2 IBM DB2 Data Studio Temat: Aplikacje w Data Studio 1. Projekty Tworzenie procedur, UDF, trygerów zaczynamy od utworzenia projektu File -> New -> Project wybieramy Data Development Project.
Pobieranie argumentów wiersza polecenia
Pobieranie argumentów wiersza polecenia 2. Argumenty wiersza polecenia Lista argumentów Lista argumentów zawiera cały wiersz poleceń, łącznie z nazwą programu i wszystkimi dostarczonymi argumentami. Przykłady:
Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:
Interfejs w MFC 1. Tworzenie nowego projektu Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej: Następnie wybieramy opcje jak na rysunku: Następnie wybieramy
MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty
MeetingHelper Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania Instrukcja obsługi dla programisty W tej części został zawarty opis uruchamiania projektu programistycznego,
Instrukcja obsługi User s manual
Instrukcja obsługi User s manual Konfigurator Lanberg Lanberg Configurator E-mail: support@lanberg.pl support@lanberg.eu www.lanberg.pl www.lanberg.eu Lanberg 2015-2018 WERSJA VERSION: 2018/11 Instrukcja
Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz
Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 http://www.junit.org/ Zofia Kruczkiewicz 1. Aby utworzyć test dla jednej klasy, należy kliknąć prawym przyciskiem myszy w oknie Projects na wybraną
Biblioteka Windows Forms
Biblioteka Windows Forms Aplikacje Windows Forms Aplikacje sterowane zdarzeniami Rysowanie oparte na GDI+ "Obudowane" kontrolki Win32 "Elementy" do budowy aplikacji Przestrzeń nazw System.Windows.Forms
Programowanie w środowiskach RAD Język C++ w środowiskach RAD
Programowanie w środowiskach RAD Język C++ w środowiskach RAD Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Programowanie sterowane zdarzeniami Geneza, koncepcja, rodzaje, przykłady Jeszcze
Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka
Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka 1. Kompilacja aplikacji konsolowych w środowisku programistycznym Microsoft Visual Basic. Odszukaj w menu startowym systemu
Procedura okna: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
1. Pierwszy program pod Windows 1/8 Procedura okna: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); UINT unsigned int DWORD 32-bitowy unsigned int. LPSTR - wskanik do łacuch
Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe
Wykład 15 Wprowadzenie do języka na bazie a Literatura Podobieństwa i różnice Literatura B.W.Kernighan, D.M.Ritchie Język ANSI Kompilatory Elementarne różnice Turbo Delphi FP Kylix GNU (gcc) GNU ++ (g++)
Praca w środowisku Visual Studio 2008, Visual C
Praca w środowisku Visual Studio 2008, Visual C++ 2008 mgr inż. Tomasz Jaworski tjaworski@kis.p.lodz.pl http://tjaworski.kis.p.lodz.pl/ Tworzenie aplikacji konsolowych 2 3 Tworzenie nowego projektu aplikacji
LabVIEW PLATFORMA EDUKACYJNA Lekcja 5 LabVIEW i Arduino konfiguracja środowiska i pierwszy program
LabVIEW PLATFORMA EDUKACYJNA Lekcja 5 LabVIEW i Arduino konfiguracja środowiska i pierwszy program Przygotował: Jakub Wawrzeńczak 1. Wprowadzenie Lekcja przedstawia wykorzystanie środowiska LabVIEW 2016
Visual Studio instalacja
Visual Studio 2017 - instalacja Do tej pory napisaliśmy wiele programów, z czego niemal wszystkie były aplikacjami konsolowymi. Najwyższy więc czas zająć się tworzeniem aplikacji z graficznym interfejsem
Podstawy projektowania aplikacji biznesowych w systemie SAP R/3
Podstawy projektowania aplikacji biznesowych w systemie SAP R/3 SAP R/3 Zintegrowany zbiór aplikacji zaprojektowanych w celu wspomagania przetwarzania danych w dużych firmach Producent SAP AG SAP Systems
Pomoc do programu konfiguracyjnego RFID-CS27-Reader User Guide of setup software RFID-CS27-Reader
2017-01-24 Pomoc do programu konfiguracyjnego RFID-CS27-Reader User Guide of setup software RFID-CS27-Reader Program CS27 Reader należy uruchomić przez wybór opcji CS27 i naciśnięcie przycisku START. Programme
Zarządzanie sieciami telekomunikacyjnymi
SNMP Protocol The Simple Network Management Protocol (SNMP) is an application layer protocol that facilitates the exchange of management information between network devices. It is part of the Transmission
Ćwiczenie 1. Kolejki IBM Message Queue (MQ)
Ćwiczenie 1. Kolejki IBM Message Queue (MQ) 1. Przygotowanie Przed rozpoczęciem pracy, należy uruchomić "Kreator przygotowania WebSphere MQ" oraz przejść przez wszystkie kroki kreatora, na końcu zaznaczając
Maszyna stanu State Machine
Pozwala na sekwencyjne wykonywanie zadań. Wykorzystuje się struktury Case umieszczone w pętli While. Wywołanie konkretnej struktury Case jest zdeterminowane wyjściem z poprzednio wykonanej struktury Case.
Tworzenie aplikacji Windows Podstawy obsługi komunikatów Windows (C++ Builder)
Jacek Matulewski http://www.phys.uni.torun.pl/~jacek/ Tworzenie aplikacji Windows Podstawy obsługi komunikatów Windows (C++ Builder) Ćwiczenia Toruń, 2 grudnia 2002 Najnowsza wersja tego dokumentu znajduje
Volcano MC-GM4 OPTICAL MOUSE USER S MANUAL MODECOM
Volcano MC-GM4 OPTICAL MOUSE USER S MANUAL MODECOM Volcano MC-GM4 OPTICAL MOUSE PL Wymagania systemowe Komputer zgodny z systemem operacyjnym Windows Port USB Zawartość opakowania Myszka instrukcja obsługi
Microsoft Foundation Classes
Microsoft Foundation Classes Piotr Janczyk Co to jest MFC? Jest to podstawowa biblioteka Visual C++, której klasy stanowią szkielet aplikacji dla programów pracujących w systemie Windows. Napisane w języku
Instrukcja laboratoryjna cz.3
Języki programowania na platformie.net cz.2 2015/16 Instrukcja laboratoryjna cz.3 Język C++/CLI Prowadzący: Tomasz Goluch Wersja: 2.0 I. Utworzenie projektu C++/CLI z interfejsem graficznym WPF 1 Cel:
OpenPoland.net API Documentation
OpenPoland.net API Documentation Release 1.0 Michał Gryczka July 11, 2014 Contents 1 REST API tokens: 3 1.1 How to get a token............................................ 3 2 REST API : search for assets
Wykonaj tę czynność, jeśli masz co najmniej trzy awiza dostawy do przetworzenia.
Pomoc stanowiskowa Przesyłanie plików awiza dostawy PL Użyj tego działania portalu dostawcy do pobrania listy awizów dostawy, aktualizacji wpisów na podstawie informacji o wysyłce, a następnie przesłania
Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania
Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania Przemysłowe układy sterowania PID Układy regulacji PID w strukturze sprzętowej Pytania i zadania do zajęć
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: QNX Neutrino Interrupts Mariusz Rudnicki 2016 Wstęp W QNX Neutrino wszystkie przerwania sprzętowe przechwytywane są przez jądro systemu. Obsługę
USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian
1 / 9 Content list / Spis Treści 1. Hardware and software requirements, preparing device to upgrade Wymagania sprzętowe i programowe, przygotowanie urządzenia do aktualizacji 2. Installing drivers and
Volcano MC-GMX4 OPTICAL MOUSE USER S MANUAL MODECOM
Volcano MC-GMX4 OPTICAL MOUSE USER S MANUAL MODECOM Volcano MC-GMX4 OPTICAL MOUSE Wymagania systemowe Komputer zgodny z systemem operacyjnym Windows Port USB Zawartość opakowania Myszka instrukcja obsługi
2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej.
Formularze VBA Przykład1 INTERAKTYWNY FORMULARZ Program tworzący interaktywny formularz. Objaśnienie: w dowolnym momencie można wprowadzić wartość w polu tekstowym ID, Excel VBA wczytuje odpowiedni rekord.
Programowanie w środowisku graficznym GUI
Programowanie w środowisku graficznym GUI 1. Wprowadzenie Język C# jest stworzony do szybkiego tworzenia aplikacji przy pomocy zintegrowanego środowiska programistycznego IDE (ang. Itegrated Development
Rodzina protokołów TCP/IP. Aplikacja: ipconfig.
Rodzina protokołów TCP/IP. Aplikacja: ipconfig. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska 48 50-204 Opole zlipinski@math.uni.opole.pl Specyfikacja struktury FIXED_INFO Nazwa struktury:
Do nich też i tylko do nich będzie się w tym rozdziale odnosić sam termin okno.
2 ANATOMIA OKNA Nauczycielem wszystkiego jest praktyka. Juliusz Cezar W systemie Windows składniki interfejsu użytkownika nazywamy oknami. Nadmieniłem w poprzednim rozdziale, iż określeniem tym obdarzamy
PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),
PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 1. Wprowadzenie do aplikacji internetowych
Laboratorium Systemów SCADA
Laboratorium Systemów SCADA Ćwiczenie 4. Tworzenie skryptów w programie InTouch Opracował: dr hab. inż. Sebastian Dudzik 1. Cel ćwiczenia Zapoznanie się z rodzajami skryptów w programie InTouch. Zapoznanie
https://portal.clusterix.pl:8443 trainxx tramxx
Logowanie 1. Otworzyć w oknie przeglądarki adres: https://portal.clusterix.pl:8443 2. Zalogować się używając konta, użytkownik: trainxx, hasło: tramxx Delegacja certyfikatu proxy 1. Zalogować poprzez ssh
Cechy systemu Windows
Cechy systemu Windows Wielozadaniowość Współdzielenie zasobów sprzętowych: ekran klawiatura mysz pamięć dysk Wymiana danych pomiędzy aplikacjami Niezależna sprzętowo grafika Zdefiniowany w systemie interfejs
Wykład 5 Okna MDI i SDI, dziedziczenie
Wykład 5 Okna MDI i SDI, dziedziczenie Autor: Zofia Kruczkiewicz Zagadnienia 1. Aplikacja wielookienkowa. Zakładanie projektu typu CLR Windows Forms 1.1. Aplikacja typu MDI 1.2. Aplikacja typu SDI 2. Dziedziczenie
imei CYFROWE PRZETWARZANIE SYGNAŁÓW Laboratorium Temat: Tworzenie aplikacji w środowisku LabWindows/CVI Instytut Metrologii, Elektroniki i Informatyki
CYFROWE PRZETWARZANIE SYGNAŁÓW Laboratorium imei Instytut Metrologii, Elektroniki i Informatyki Temat: Tworzenie aplikacji w środowisku LabWindows/CVI Wprowadzenie Tworzenie nowej aplikacji w środowisku
Kurs programowania 2 - listy
Kurs programowania 2 - listy Listy rozwijane (ComboBox) Listy rozwijane (rozwijalne) można tworzyć przy użyciu klasy ComboBox. W tabeli poniżej właściwości udostępniane przez tę kontrolkę. Najważniejsza
Właściwości i metody obiektu Comment Właściwości
Właściwości i metody obiektu Comment Właściwości Właściwość Czy można zmieniać Opis Application nie Zwraca nazwę aplikacji, która utworzyła komentarz Author nie Zwraca nazwę osoby, która utworzyła komentarz
SQL 4 Structured Query Lenguage
Wykład 5 SQL 4 Structured Query Lenguage Instrukcje sterowania danymi Bazy Danych - A. Dawid 2011 1 CREATE USER Tworzy nowego użytkownika Składnia CREATE USER specyfikacja użytkownika [, specyfikacja użytkownika]...
On-Board Unit (OBU) Rejestracja. Spis treści. 1. 1.Logowanie... 1
On-Board Unit (OBU) Rejestracja Spis treści 1. 1.Logowanie... 1 1.1. Rejestracja w interfejsie użytkownika internetowego HU-GO...1 1.2.Logowanie się do systemu HU-GO...2 1.3.Wybieranie aktywnego konta...2
1. Tworzenie nowego projektu.
Załącznik do Instrukcji 1. Tworzenie nowego projektu. Wybieramy opcję z menu głównego New->QNX C Project. Wprowadzamy nazwę przechodzimy do następnego kroku NEXT. Wybieramy platformę docelową oraz warianty
- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy
Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy - Narzędzie Windows Forms - Przykładowe aplikacje 1 Narzędzia Windows Form Windows Form jest narzędziem do tworzenia aplikacji dla
www.irs.gov/form990. If "Yes," complete Schedule A Schedule B, Schedule of Contributors If "Yes," complete Schedule C, Part I If "Yes," complete Schedule C, Part II If "Yes," complete Schedule C, Part
Aplikacja Sieciowa wątki po stronie klienta
Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się
Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU
Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU Spis treści: 1. Instalacja oprogramowania XG5000 3 2. Tworzenie nowego projektu i ustawienia sterownika 7 3. Podłączenie sterownika
Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne
Zdalne wywołania procedur Jarosław Kuchta Programowanie Współbieżne Podstawy RPC Remote Procedure Call Wywołanie procedur jednego procesu z innego procesu. Proces wywoływany serwer Proces wywołujący -
USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian
1 / 12 Content list / Spis Treści 1. Hardware and software requirements, preparing device to upgrade Wymagania sprzętowe i programowe, przygotowanie urządzenia do aktualizacji 2. Installing drivers needed
4 bity zarezerwowane dla przyszłych zastosowań 11 bitów określających źródło błędu 16 bitów określających rodzaj błędu.
Zgłaszanie błędów HRESULT Każda metoda interfejsu COM zwraca informację o błędzie w postaci typu HRESULT (long int). Struktura reprezentacji bitowej HRESULT podzielona jest na 4 sekcje: 1 bit błędu 4 bity
Programowanie obiektowe
Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć
Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor
BACKUP BAZ DANYCH MS SQL
BACKUP BAZ DANYCH MS SQL SPIS TREŚCI Informacje ogólne... 2 Tworzenie projektu... 2 Krok 1: Informacje Podstawowe... 2 Krok 2: Dane... 3 Krok 3: Planowanie... 4 Krok 4: Zaawansowane... 5 Przywracanie baz
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze
Funkcje użytkownika Tworzenie funkcji Usuwanie funkcji Procedury składowane Tworzenie procedur składowanych Usuwanie procedur składowanych Wyzwalacze Wyzwalacze a ograniczenia i procedury składowane Tworzenie
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza
Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza Projektowanie układów VLSI-ASIC za pomocą techniki komórek standardowych przy użyciu pakietu Cadence Programowanie,
Shared memory and messages. Functions. process 0. process 1. program 0. program 0. data 0. data 1. program 1. data 0. data 1.
Shared memory and messages Shared memory vs message passing Shared memory - C functions Shared memory - example program Message queues - C functions Message queues - example program process 0 process 1
Pliki wchodzące w skład projektu Rozmiar formatki, okna. Wyświetlanie okien komunikatów Rzutowanie Konwersja Tworzenie standardowych przycisków
Pliki wchodzące w skład projektu Rozmiar formatki, okna. Wyświetlanie okien komunikatów Rzutowanie Konwersja Tworzenie standardowych przycisków Pliki wchodzące w skład projektu. Elementy projektu: plik
Inżynieria Wytwarzania Systemów Wbudowanych
GUT Intel 2015/16 1/30 Inżynieria Wytwarzania Systemów Wbudowanych Wykład 3 Iwona Kochańska Katedra Systemów Elektroniki Morskiej WETI PG October 18, 2018 Dobre praktyki GUT Intel 2015/16 2/30 Przenośność
Informatyka I : Tworzenie projektu
Tworzenie nowego projektu w programie Microsoft Visual Studio 2013 Instrukcja opisuje w jaki sposób stworzyć projekt wykorzystujący bibliotekę winbgi2 w programie Microsoft Visual Studio 2013. 1. Otwórz
Programowanie współbieżne. Tworzenie i obsługa semaforów oraz wątków przy użyciu funkcji Windows API.
Programowanie współbieżne Tworzenie i obsługa semaforów oraz wątków przy użyciu funkcji Windows API. Cel zadania. Celem zadania jest poznanie podstawowych funkcji Windows API umożliwiających tworzenie
Delphi podstawy programowania. Środowisko Delphi
Delphi podstawy programowania Środowisko Delphi Olsztyn 2004 Delphi Programowanie obiektowe - (object-oriented programming) jest to metodologia tworzeniu programów komputerowych definiująca je jako zbiór
Zasady programowania Dokumentacja
Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika
www.irs.gov/form990. If "Yes," complete Schedule A Schedule B, Schedule of Contributors If "Yes," complete Schedule C, Part I If "Yes," complete Schedule C, Part II If "Yes," complete Schedule C, Part
Dell UltraSharp UP3017 Dell Display Manager Instrukcja użytkownika
Dell UltraSharp UP3017 Dell Display Manager Instrukcja użytkownika Model: UP3017 Model - zgodność z przepisami: UP3017t UWAGA: UWAGA oznacza ważną informację, pomocną w lepszym używaniu komputera. Copyright
APEX zaawansowany raport
APEX zaawansowany raport Raport bazujący na zapytaniu SQL W ramach aplikacji Pierwsza aplikacja stworzymy nowy raport Raport bazujący na zapytaniu SQL W ramach serwisu raport będzie podpięty pod stronę
1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.
1. Pierwszy program // mój pierwszy program w C++ #include using namespace std; cout
INSTRUKCJE JAK AKTYWOWAĆ SWOJE KONTO PAYLUTION
INSTRUKCJE JAK AKTYWOWAĆ SWOJE KONTO PAYLUTION Kiedy otrzymana przez Ciebie z Jeunesse, karta płatnicza została zarejestrowana i aktywowana w Joffice, możesz przejść do aktywacji swojego konta płatniczego
PROGRAMOWANIE W SYSTEMIE WINDOWS
PROGRAMOWANIE W SYSTEMIE WINDOWS NajwaŜniejsze cechy: Środowisko Windows umoŝliwia pracę wielozadaniową (z wieloma programami aplikacjami jednocześnie). Występuje współdzielenie zasobów komputera oraz
Spis tre Wst p... 2 Do czego słu zasoby... 2 Tworzenie zasobów... 4 Pisanie skryptu zasobów... 4 Korzystanie z zasobów w programach...
Spis treści Wstęp... 2 Do czego słuŝą zasoby... 2 Tworzenie zasobów... 4 Pisanie skryptu zasobów... 4 Zasoby wczytywane z plików... 4 Menu... 5 Tablice łańcuchów... 9 Zasoby własne... 9 Preprocesor i skrypty
Informatyka I. Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Interfejs GUI wysokiego poziomu Pojęcie