For Windows, this question is quickly answered: HWND. Pretty much everything is of this basic “window”-type and most API commands that deal with windows can be used on most GUI objects. You can also find many code examples on the forums that deal with a lot of common API tasks. The situation is different for Linux and OSX. Here, different Gadgets may have different underlying objects and so it is not entirely clear what functions can be used. There are also a lot less examples around for these systems. Of course when developing programs that run on multiple OS, you will need solutions for all of them.
To help this situation a bit, i have compiled a list of what are the underlying objects behind the PB gadgets and other GUI objects. You can get access to these using functions such as GadgetID(), WindowID(), etc.
Disclaimer:
This information is internal stuff. While many of these things haven’t changed in many years, it is still possible that we decide to change something in the future. Also some Gadgets are heavily modified for PB with custom subclasses or callbacks which also may change in the future and break your code. So as usual: Feel free to use this information, but if it breaks, its not our problem.
So here it goes:
Windows | Linux | OSX | |
WindowID() | HWND | GtkWindow | WindowRef |
MenuID() | HMENU | GtkMenuBar / GtkMenu | MenuRef |
StatusBarID() | HWND | GtkHBox | ControlRef (UserPane) |
ToolBarID() | HWND | GtkToolbar | HIToolbarRef |
FontID() | HFONT | PangoFontDescription | PB internal pointer |
ImageID() | HBITMAP | GdkPixbuf | CGImageRef |
GadgetID() | HWND | GtkWidget | ControlRef |
ButtonGadget | “Button” | GtkButton / GtkToggleButton | PushButton / BevelButton |
ButtonImageGadget | “Button” | GtkButton / GtkToggleButton | PushButton / BevekButton |
CalendarGadget | “SysMonthCal32” | GtkCalendar | HIView |
CheckBoxGadget | “Button” | GtkCheckButton | CheckBox |
ComboBoxGadget | “ComboBox” / WC_COMBOBOXEX | GtkComboBox / GtkComboBoxEntry | PopupButton / HIComboBox |
ContainerGadget | custom class | GtkFixed | UserPane |
DateGadget | DATETIMEPICK_CLASS | GtkEntry | UserPane |
EditorGadget | RICHEDIT_CLASS | GtkTextView | UserPane (rendering a TNXObject) |
ExplorerComboGadget | WC_COMBOBOXEX | GekComboBoxEntry | HIComboBox |
ExplorerListGadget | WC_LISTVIEW | GtkTreeView | DataBrowser |
ExplorerTreeGadget | WC_TREEVIEW | GtkTreeView | DataBrowser |
Frame3DGadget | “Button” / “Static” | GtkFrame | GroupBox / UserPane / Separator |
HyperLinkGadget | “Static” | GtkButton | UserPane |
IPAddressGadget | WC_IPADDRESS | GtkEntry | EditUnicodeText |
ImageGadget | “Static” | GtkImage | UserPane |
ListIconGadget | WC_LISTVIEW | GtkTreeView | DataBrowser |
ListIconGadget | “ListBox” | GtkTreeView | DataBrowser |
MDIGadget | “MDICLIENT” | – | – |
OptionGadget | “Button” | GtkRadioButton | RadioButton |
PanelGadget | “SysTabControl32” | GtkNotebook | Tabs |
ProgressBarGadget | PROGRESS_CLASS | GtkProgressBar | ProgressBar |
ScrollAreaGadget | custom class | GtkScrolledWindow | UserPane |
ScrollBarGadget | “SCROLLBAR” | GtkVScrollBar / GtkHScrollBar | ScrollBar |
ShortcutGadget | HOTKEY_CLASS | GtkEntry | EditUnicodeText |
SpinGadget | UPDOWN_CLASS + “Edit” | GtkHBox containing others | UserPane containing others |
SplitterGadget | custom class | GtkVPaned / GtkHPaned | UserPane |
StringGadget | “Edit” | GtkEntry | EditUnicodeText |
TextGadget | “Static” | GtkLabel | StaticText |
TrackBarGadget | TRACKBAR_CLASS | GtkVScale / GtkHScale | Slider |
TreeGadget | WC_TREEVIEW | GtkTreeView | DataBrowser |
WebGadget | custom class + ActiveX control | GtkMozEmbed | HIWebView |
Notes:
- Gadgets all have the same basic type noted in the GadgetID() row. However, Gadgets are devided into “window classes” on Windows, or subclasses of the general GtkWidget on Linux.
- For Gadgets on Windows: If the entry is noted in “” then this is the class name, if it is not then this is the symbolic constant for the class name. You’ll have to look up the text value in the appropriate header files.
- On OSX, there are no classes for the controls, its all a ControlRef. The names i noted here are derived from the control creation functions (ie CreateTabsControl()). If you are looking for information, you should start there.
- Gadgets may have multiple classes depending on the flags on creation.
- On Linux, many gadgets are placed inside their own container to add a frame or catch events. (GtkFrame, GtkEventBox). The GadgetID() command returns the real gadget in this case, not the container.
- On OSX, the UserPane controls are drawn by PB itself, so you don’t have much ways to modify them other than the PB commands.
Thats it. I hope this information is useful to some people, and hopefully we will see some more cross-platform API examples on the forum in the future 🙂
It would be great if we could get an official TextGadget with support for links. I started one based upon the SysLink window class.
Viagra Acelera El Corazon cialis tablets for sale Wie Funktioniert Levitra Buy Cialis With No Perscription Viagra Frei Verkauflich 2013
Cialis 20 Compresse online cialis Levitra Drug Interactions Cheap Tadalista Levitra 40 Mg Sale
Cialis Online Rezeptfrei Aus Kanada viagra Cialis Generique Pas Cher
Comprar Viagra Original En 24 Horas Viagra Limbiate Amoxicillin 250 Mg Description cialis Photos De Pilules Amoxil
Tabletten Viagra Kaufen viagra Can I Drink Alcohol With Keflex Prix Du Viagra En Algerie Where Diflucan
Keflex Drug Information cialis 5mg Cephalexin Working Viagra Online Shop Buy Alli In Mexico
Propecia Cost Buy viagra prescription Best Online Site For Genuine Cialis Drug Reaction To Cephalexin In Dogs Where To Buy Alli Weight Loss Pills
Acheter Cialis 10 Mg France generic cialis Kamagra Sin Receta Puedo Comprar Levitra Sin Receta