index9122




[Kurs Allegro GUI, C++] IV. Modyfikacja zachowania GUI

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


var pageTracker = _gat._getTracker("UA-3650348-1");
pageTracker._initData();
pageTracker._trackPageview();



Serwis został przeniesiony pod nową domenę: http://cpp0x.pl/ Strona główna Kursy Artykuły Forum Pliki Promuj Nas! PowrótHistoria odwiedzonych stronPoprzednia lekcjaKurs Allegro GUI, C++Następna lekcjaIV. Modyfikacja zachowania GUISposób działania GUI Allegro może zostać zmieniony nawet bez tworzenia całych nowych kontrolek interfejsu. W tym celu Allegro zapewnia kilka globalnych zmiennych i specyficzny sposób obsługi myszy. Zanim zaczniemy poznawać metody rozszerzania systemu zerknijmy w jaki sposób możemy to wykorzystać do własnych celów.4.1. Używanie Zmiennych Graficznego Interfejsu Uzytkownika (GUI)Allegro udostępnia pięć globalnych zmiennych których możemy użyć w celu zmodyfikowania zachowania menadżera okien( dialogów ). Nie wprowadzają one olbrzymich zmian ale mimo to mogą być użyteczne.int gui_mouse_focusUstawiając tą zmienną na TRUE, Allegro przekazuje sterowanie do jakiego kolwiek obiektu nad którym aktualnie jest myszka. Dla ludzi którzy zwykli pracować z Microsoft Windows, może być to kłopotliwe ze względu na fakt że nie jest to dla nich działanie zbyt intuicyjne. Natomiast ustawienie tej zmiennej na FALSE sprawia że zaznaczyć aktywny obiekt można tylko przy pomocy kliknięcia myszą bądź przy użyciu klawiatury. Domyślnie : TRUE.int gui_fg_colorTa zmienna ma wpływ na domyślny kolor dialogów predefiniowanych (alert boxes, graphics mode chooser, file selection dialog). Działa również na kolor wszelkich menu użytych w programie. W trybie graficznym 256 kolorów zmienna ta powinna mieścić się w zasięgu 0..255, żeby łatwo mogła sięgnąć po kolor do palety kolorów. W przypadku trybów Highcolor bądź Trucolor powinna być tego samego formatu co wartość którą zwraca funkcja makecol(). Domyślnie : 255.int gui_bg_colorThis is the same as gui_fg_color above, except that it controls the background color. Default: 0.int gui_mg_colorAll of the prepackaged dialog controls use this variable as the color for disabled objects (i.e. ones with the D_DISABLED flag set), so if you don't like gray, you can change it. Default: 8.int gui_font_baselineThis variable adjusts the location of the keyboard shortcut underscores in text strings. This most useful if you are not using the default font, and your font's descenders are bigger or smaller than those of the default font. A positive number moves the underscore "up," closer to the text, and a negative number moves it "down," or away from the text. Default: 0.In addition to these five variables, the GUI provides a way to manipulate mouse input prior to its being processed by the system. Let's look at that.4.2. Accessing the MouseWhenever one of the predefined GUI controls needs to know what the mouse is doing, it doesn't read the mouse_x, mouse_y, or mouse_b variables like you may think. Instead, it calls some functions that can be hooked into so that the mouse input can be "preprocessed." These functions can be overridden (they're just function pointers), so you can modify the mouse tracking behavior to your heart's content. The functions are:int (*gui_mouse_x)()int (*gui_mouse_y)()int (*gui_mouse_b)()The functions that these point to by default just return whatever is in the mouse_x, mouse_y, and mouse_b variables, respectively. However, if you want to change this, simply write your own function and direct the pointer so it points to your function (e.g. gui_mouse_x = my_mouse_x;).This can be a very useful thing. Three possibilities are: Scaling the mouse position.Say you have a bitmap editor, and it has zoom in/zoom out functionality. Instead of doing the math on mouse_x and mouse_y to determine which pixel the mouse is operating on when the image is zoomed in, override gui_mouse_x() and gui_mouse_y() to automatically do the math for you, regardless of how far the image is zoomed in or out. This only works if your editor is based on GUI functions, of course. Redirecting mouse input.Creating self-running demos could be made easier if you create an array of mouse coordinates and use the positions in that array (probably in conjunction with a timer interrupt) to return the mouse position. As far as the GUI is concerned, the mouse position is wherever you say it is, and not where the user has put it. The problem with this is that the actual mouse pointer is drawn wherever the user has put it, not where the user-supplied hooks say. This could be fixed by calling position_mouse(your_x, your_y) at each point. Changing the way buttons are read.If the user's mouse only has two buttons, you could simulate a three-button mouse by supplying your own gui_mouse_b() function that sets bit 2 of the return value and clears bits 0 and 1 if both mouse buttons are held down. The GUI will be "fooled" into thinking that the middle button is pressed. Of course, this makes it hard to actually tell when both buttons are pressed, if you want to handle that as well... One further note: any special GUI objects you as a programmer create should almost always use the gui_mouse_* functions for reading mouse state. That way, preprocessing the mouse input like this will work for your own objects as well as the predefined ones.This doesn't exactly fit here, but in case you're wondering how to get the GUI to use a font besides the default one, simply set the global "font" pointer to point to something else: the GUI uses whatever font that pointer points to. This can quickly add a little zing to your application, with minimal effort, but be warned: the graphics mode and file selector dialogs will look funny with anything but an 8x8 font! Don't worry too much, though; every other GUI object will work fine with any font.So without further ado, let's get to the real meat of the tutorial...4.3. TłumaczenieGłówne tłumaczenie tekstu zostało wykonane przez mateeo. Weryfikację tłumaczenia i drobne korekty w tłumaczeniu wykonał Piotr Szawdyński. Przetłumaczonego tekstu nie można rozpowszechniać bez zgody osób, które go przetłumaczyły.4.4. Pozostałe informacjeMateriał został pobrany ze strony http://agdn.netfirms.com/main/gui/behavior.html po uprzednim uzyskaniu zgody od jego autora. Autor materiałów dał pozwolenie na zamieszczenie wersji tekstu w dowolnym języku. Tekst docelowo będzie przetłumaczony.Poprzednia lekcjaKurs Allegro GUI, C++Następna lekcjaWszelkie prawa zastrzeżone. Autor: źródło zewnętrzneWszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści bez wyraźnej zgody jego autora jest zabronione.PowrótHistoria odwiedzonych stronPanel LogowaniaLogin:Hasło:Zapamiętaj mnie!Zarejestruj sięOdzyskiwanie hasłaUżytkownikówObecnie aktywnych:17Zalogowanych:0Zarejestrowanych:4367Ostatnie 24h:414Non-cookie 24h:3241Wszystkich:264764Ostatnia Aktualizacja2010-11-23 00:46:20 (39 dni temu)Ostatnio aktywniHandy9020 godzPiotr Szawdyński21 godzFletcher37 godzwiew39 godzPietrzuch40 godzmat250149 godzbooncki51 godzRaver74 godzWynajem Sopot - wakacjePokój 2 osobowy 130zł/doba;Lokalizacja: Sopothttp://sopotwynajem.pl


O portaluArchiwumHistoriaIndeksRegulaminWyszukiwarkaLinkiRestauracja "ATOL" - Sopot© Wszelkie prawa zastrzeżone   2005-2011Czas wygenerowania strony: 0.058sAutor: Piotr Szawdyński





Wyszukiwarka

Podobne podstrony:
index9527
index971a
index9203
index984c
index9866
index9910
index90df
index96cc

więcej podobnych podstron