GUI and Interaction Messages Manual

内容表

关于

Communication between different parts of the Cinema 4D GUI happens through multiple messages. These messages are sent to GeDialog and GeUserArea elements:

Messages are represented by BaseContainer objects that store the parameters of the message. The ID of the message is typically the ID of the BaseContainer ( BaseContainer::GetId() ). See BaseContainer Manual .

For details on GeDialog and GeUserArea see GeDialog 手册 and GeUserArea Manual .

// This example catches a message to set the cursor when the mouse is over the user area.
Int32 Message( const BaseContainer & msg, BaseContainer & result) { // messages are identified by the BaseContainer ID switch (msg. GetId ()) { case BFM_GETCURSORINFO : { result. SetId ( BFM_GETCURSORINFO ); result. SetInt32 ( RESULT_CURSOR , MOUSE_POINT_HAND ); result. SetString ( RESULT_BUBBLEHELP , "This is an example GeUserArea" _s);
return true ; } } return GeUserArea::Message (msg, result); }

Message Redirection

All message are first sent to the object's "Message" function ( GeDialog::Message() , GeUserArea::Message() ). If the messages are not handled in the implementation of the "Message" function they will be also handled in the base-class. Certain messages are re-directed to dedicated functions.

GeDialog

Several messages sent to a GeDialog will invoke these member functions:

消息 函数
BFM_INIT GeDialog::CreateLayout()
BFM_DESTROY GeDialog::DestroyWindow()
BFM_INITVALUES GeDialog::InitValues()
BFM_SYNC_MESSAGE GeDialog::CoreMessage()
BFM_CORE_MESSAGE GeDialog::CoreMessage()
BFM_ACTION GeDialog::Command()
BFM_CHECKCLOSE GeDialog::AskClose()
BFM_TIMER_MESSAGE GeDialog::Timer()

GeUserArea

Several messages sent to a GeUserArea will invoke these member functions:

消息 函数
BFM_INIT GeUserArea::Init()
BFM_INITVALUES GeUserArea::InitValues()
BFM_CALCSIZE GeUserArea::GetMinSize()
BFM_SIZED GeUserArea::Sized()
BFM_DRAW GeUserArea::DrawMsg()
BFM_INPUT GeUserArea::InputEvent()
BFM_TIMER_MESSAGE GeUserArea::Timer()
BFM_SYNC_MESSAGE GeUserArea::CoreMessage()
BFM_CORE_MESSAGE GeUserArea::CoreMessage()

Return Values

Messages can be sent to receive information from the target element. In some cases the message must explicitly state that it requests a result.

// This example in a GeDialog requests the cursor position from a text edit field.

// prepare message BaseContainer message = BaseContainer ( BFM_EDITFIELD_GETCURSORPOS ); message. SetBool ( BFM_REQUIRESRESULT , true );

// send message const GeData res = this->SendMessage(3000, message);

// get position const Int32 pos = res. GetInt32 (); ApplicationOutput ( "Cursor Pos.: " + String::IntToString (pos));

User Interaction

Cursor

When the mouse cursor is moved over a GeDialog or GeUserArea a message is sent to these elements. The reaction to this message allows to define the cursor and some help text.

The parameters of the message are:

注意
The message BFM_GETCURSORINFO also contains BFM_DRAG_SCREENX and BFM_DRAG_SCREENY .
// This example sets the cursor when the mouse is over the current GUI element.

case BFM_GETCURSORINFO : { result. SetId ( BFM_GETCURSORINFO ); result. SetInt32 ( RESULT_CURSOR , MOUSE_POINT_HAND ); result. SetString ( RESULT_BUBBLEHELP_TITLE , "Bubblehelp Title" _s); result. SetString ( RESULT_BUBBLEHELP , "This is the bubble help text." _s); return true ; }

Compare also ToolData::GetCursorInfo() , SceneHookData::GetCursorInfo() ,等。

The message BFM_CURSORINFO_REMOVE can be sent by a custom callback function to inform a user area that the cursor has left the area:

// This example user area registers a callback function with RemoveLastCursorInfo(). // This function is called when the cursor leaves the user area. It is used to send the // message BFM_CURSORINFO_REMOVE back to the user area to inform it about the event.

// declarations static void RemoveCursorInfo(); class RemoveCursorUserArea; static RemoveCursorUserArea* g_userArea = nullptr ; // static variable storing pointer to a user area

// user area will display a different color depending if the cursor is over the area or not class RemoveCursorUserArea : public GeUserArea { public : RemoveCursorUserArea() { if (g_userArea == this ) g_userArea = nullptr ; }; ~RemoveCursorUserArea() { }; Int32 消息 ( const BaseContainer & msg, BaseContainer & result) { // messages are identified by the BaseContainer ID switch (msg. GetId ()) { case BFM_GETCURSORINFO : { // register RemoveCursorInfo() callback g_userArea = this ; RemoveLastCursorInfo (RemoveCursorInfo); _cursorInside = true ; Redraw (); return true ; } case BFM_CURSORINFO_REMOVE : { // message "BFM_CURSORINFO_REMOVE" sent by RemoveCursorInfo() _cursorInside = false ; Redraw (); break ; } } return GeUserArea::Message (msg, result); } void DrawMsg ( Int32 x1, Int32 y1, Int32 x2, Int32 y2, const BaseContainer & msg) { OffScreenOn (); SetClippingRegion (x1, y1, x2, y2);

// gadget color is controlled by the cursor position

if (_cursorInside) DrawSetPen ( 向量 (1.0, 0.0, 0.0)); else DrawSetPen ( 向量 (0.0, 1.0, 0.0)); DrawRectangle (x1, y1, x2, y2); } private : Bool _cursorInside = false ; // set to true if the cursor is over the user area };

// function will be called by the user area when the cursor left its area static void RemoveCursorInfo() { if (g_userArea == nullptr ) return ;

// send message to the user area BaseContainer bc; g_userArea->Message( BaseContainer ( BFM_CURSORINFO_REMOVE ), bc); }

Focus

A GeDialog or GeUserArea is informed when it receives or looses the focus:

// This example catches focus related messages in GeDialog::Message(). // Depending on the focus, a gadget is enabled or disabled.

case BFM_GOTFOCUS : { Enable(1000, true ); break ; } case BFM_LOSTFOCUS : { Enable(1000, false ); break ; }

Close Dialog

A GeDialog is informed when it is about to be closed. One has to return false if it is safe to close the dialog.

GeDialog Gadget Interaction

A GeDialog is informed when any kind of interaction with some hosted gadget starts or ends:

注意
These messages are useful to stop threads that work on the scene or to create undo steps. See Undo System Manual .
// This example catches two messages in GeDialog::Message() // to check if any interaction with a gadget started or ended.

case BFM_INTERACTSTART : { ApplicationOutput ( "Interaction start" _s); break ; } case BFM_INTERACTEND : { ApplicationOutput ( "Interaction end" _s); break ; }

When a gadget or custom GUI element is changed by the user it sends the message BFM_ACTION to the parent dialog.

The parameters of the message are:

// This example sends the BFM_ACTION message from a GeUserArea to the parent GUI element. // This message can be caught in GeDialog::Message() or GeDialog::Command(). BaseContainer action( BFM_ACTION ); action.SetInt32( BFM_ACTION_ID , GetId()); SendParentMessage(action);

// This example sends a message from a GeDialog (iCustomGui) // to the parent GeDialog to inform about change of stored value.

// construct the message BaseContainer message( BFM_ACTION ); message. SetInt32 ( BFM_ACTION_ID , GetId()); message. SetData ( BFM_ACTION_VALUE , _value);

// send the message SendParentMessage(message);

// This example catches an interaction with an edit number field in GeDialog::Command(). // If the user clicked with the right mouse button on the number field's arrows, // the value BFM_ACTION_RESET is set.

if ( id == ID_EDIT_NUMBER) { if (msg. GetBool ( BFM_ACTION_RESET )) { // right click on the number field's arrows // set the value to a pre-defined default value const Float defaultValue = 0.5; SetPercent(ID_EDIT_NUMBER, defaultValue, 0.0, 100.0, 1.0); } else { // just pass through the given value const Float value = msg. GetFloat ( BFM_ACTION_VALUE ); SetPercent(ID_EDIT_NUMBER, value, 0.0, 100.0, 1.0); } }

Mouse and Keyboard Interaction

Both GeDialog and GeUserArea are informed on keyboard and mouse user interaction events.

The parameters of the message are:

// This example checks in GeUserArea::InputEvent() if the right mouse button was pressed. const Int32 device = msg. GetInt32 ( BFM_INPUT_DEVICE ); const Int32 channel = msg. GetInt32 ( BFM_INPUT_CHANNEL );

// check if this is a mouse event triggered by the right mouse button const Bool deviceIsMouse = device == BFM_INPUT_MOUSE ; const Bool channelIsRight = channel == BFM_INPUT_MOUSERIGHT ; if (deviceIsMouse && channelIsRight) { ApplicationOutput ( "Right mouse button pressed." ); const Int32 qualifier = msg. GetInt32 ( BFM_INPUT_QUALIFIER ); if (qualifier & QCTRL ) ApplicationOutput ( "Right mouse button with CTRL pressed." ); return true ; }

The input from keyboard interactions is either a character or some special key:

// This example catches keyboard events in GeUserArea::InputEvent(). const Int32 device = msg. GetInt32 ( BFM_INPUT_DEVICE ); if (device == BFM_INPUT_KEYBOARD ) { const Int32 channel = msg. GetInt32 ( BFM_INPUT_CHANNEL ); if (channel == KEY_ENTER ) ApplicationOutput ( "Enter!" ); const String key = msg. GetString ( BFM_INPUT_ASC );

// check if the String contains any content if (key. IsPopulated ()) ApplicationOutput ( "Key: " + key); return true ; }

Further details on the event are stored in these parameters:

// This example handles some mouse interaction in GeUserArea::InputEvent().

// get device and channel const Int32 device = msg. GetInt32 ( BFM_INPUT_DEVICE ); const Int32 channel = msg. GetInt32 ( BFM_INPUT_CHANNEL );

// check if this is a mouse event triggered by the left mouse button const Bool deviceIsMouse = device == BFM_INPUT_MOUSE ; const Bool channelIsLeft = channel == BFM_INPUT_MOUSELEFT ; if (deviceIsMouse && channelIsLeft) { // check if double click if (msg. GetBool ( BFM_INPUT_DOUBLECLICK )) { // get the cursor position Int32 mx = msg. GetInt32 ( BFM_INPUT_X ); Int32 my = msg. GetInt32 ( BFM_INPUT_Y ); Global2Local(&mx, &my); ApplicationOutput ( "Double click at " + String::IntToString (mx) + " - " + String::IntToString (my)); return true ; } }

Drag and Drop

Both GeDialog and GeUserArea are informed on drag and drop operations onto their area:

The parameters of the message are:

Different types of elements can be dragged:

另请参阅 Drag and Drop and Drag and Drop .

// This example receives a drag & drop message in GeUserArea::Message(). // If the dragged element is a command (from the "Customize Commands" dialog), // the command is executed.

case BFM_DRAGRECEIVE : { // check drag area if (!CheckDropArea(msg, true , true )) break ; Int32 type; void * data = nullptr ;

// get the drag data if (!GetDragObject(msg, &type, &data)) return false ; if (type == DRAGTYPE_COMMAND ) { // check if the drag has finished if (msg. GetInt32 ( BFM_DRAG_FINISHED )) { // end of drag // get command ID and execute the command const Int32 ID = msg. GetInt32 ( BFM_DRAG_DATA_NEW ); StopAllThreads (); CallCommand (ID); return true ; } else { // while in drag show cursor with question mark return SetDragDestination( MOUSE_QUESTION ); } } return false ; }

Description Notifications

A custom GUI element can be used to display a parameter of a NodeData based plugin the in the Attribute Manager. It is possible to send a message from the custom GUI to that NodeData based plugin. This can be used to inform the plugin on what internal data specificity was changed.

另请参阅 Attribute Manager Interaction .

// This example shows some part of a custom GUI that has a color picker that defines // the color of some of it's elements. When this color is changed a message is sent // to the host NodeData based plugin (assuming that the custom GUI is used by the // Attribute Manager to display a parameter).

// Update GUI this->InitValues();

// get the current color 向量 color; Float brightness; GetColorField(COLOR_ID, color, brightness);

// store message data BaseContainer messageContent; messageContent. SetVector (MSG_DESCRIPTION_COLORSTRING_COLOR, color);

// prepare message BaseContainer message( MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION ); message. SetInt32 ( BFM_ACTION_ID , GetId()); message. SetInt32 ( BFM_ACTION_VALUE , MSG_DESCRIPTION_COLORSTRING_COLORCHANGE); message. SetContainer ( MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION_CONTENT , messageContent); message. SetInt32 ( MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION_ID , ID_CUSTOMGUI_COLORSTRING);

// send message SendParentMessage(message);

Layout Messages

Layout Change

A GeUserArea can inform the parent dialog when it changed its size:

A GeDialog can be part of a layout and is created when that layout is loaded. To restore a given state of that GeDialog , internal data of that dialog must be stored with the layout. This internal data is received and reset using these messages:

注意
Typically the group weights are stored here. See Weights .
// This example catches two layout messages in GeDialog::Message(). // The messages are sent when the layout is saved to a file or when it is loaded from a file.

case BFM_LAYOUT_GETDATA : { // store custom data result = BaseContainer (0); result. SetInt32 (1000, 123); return true ; } case BFM_LAYOUT_SETDATA : { const BaseContainer * bc = msg. GetContainerInstance ( BFM_LAYOUT_SETDATA ); if (bc) { const Int32 custom = bc-> GetInt32 (1000); ApplicationOutput ( "Got custom data: " + String::IntToString (custom)); return true ; } break ; }

Weights

A GeDialog defines its layout using groups with multiple columns/rows. The weights of a group define the relative scale of these columns/rows. When the user changes the scale a message is sent to the GeDialog :

另请参阅 GeDialog Groups .

// This example catches in GeDialog::Message() the event when the weights // of a group are changed. The current weights are stored in a BaseContainer. // When the layout is saved the weights are stored as custom layout data.

// save the weights case BFM_WEIGHTS_CHANGED : { GroupWeightsSave(WEIGHT_GROUP, _weights); break ; } // store the weights case BFM_LAYOUT_GETDATA : { result = BaseContainer (0); result. SetContainer (10000, _weights); return true ; } // restore the weights case BFM_LAYOUT_SETDATA : { const BaseContainer * bc = msg. GetContainerInstance ( BFM_LAYOUT_SETDATA ); if (bc) { // access the sub-container with the ID 10000 const BaseContainer * const weightsContainer = bc-> GetContainerInstance (10000); if (weightsContainer) _weights = *weightsContainer; GroupWeightsLoad(WEIGHT_GROUP, _weights); return true ; } break ; }

衰退

A GeUserArea can support a dynamic fading effect. After GeUserArea::ActivateFading() was called, Cinema 4D sends the BFM_FADE message to the user area for the duration of the fading operation.

Drawing Operations .

// This example shows a GeUserArea that is "fading". // When the cursor is over the user area the fading is activated. // Cinema 4D will then send the message BFM_FADE to the user area so // it can interpolate a color and use this color to redraw itself. class FadingUserArea : public GeUserArea { public : FadingUserArea() { }; ~FadingUserArea() { }; Int32 消息 ( const BaseContainer & msg, BaseContainer & result) { // messages are identified by the BaseContainer ID switch (msg. GetId ()) { case BFM_GETCURSORINFO : { // cursor is over the user area // start fading ActivateFading (100); return true ; } case BFM_FADE : { // receive fade message and update the COLOR_BG used in DrawMsg() const Float percentage = msg. GetFloat ( BFM_FADE ); AdjustColor ( COLOR_BG , COLOR_BG_HIGHLIGHT , percentage);

// redraw using the updated COLOR_BG Redraw (); return true ; } } return GeUserArea::Message (msg, result); } void DrawMsg ( Int32 x1, Int32 y1, Int32 x2, Int32 y2, const BaseContainer & msg) { OffScreenOn (); SetClippingRegion (x1, y1, x2, y2); // draw background with COLOR_BG DrawSetPen ( COLOR_BG ); DrawRectangle (x1, y1, x2, y2); // draw text DrawSetTextCol ( COLOR_CONSOLE_TEXT , COLOR_TRANS ); DrawSetFont ( FONT_MONOSPACED ); DrawText ( "User Area" _s, 0, 0, DRAWTEXT_HALIGN_LEFT ); } };

Draw

The message BFM_DRAW is sent to a GeUserArea to draw into the Cinema 4D GUI. The message will call GeUserArea::DrawMsg() .

The clipping dimensions are stored in these parameters:

The draw reason is also stored:

// This example in GeUserArea::DrawMsg() skips the redraw if only the focus has changed. const Int32 reason = msg. GetInt32 ( BFM_DRAW_REASON );

// check if DrawMsg() was called because the focus changed const Bool reasonGotFocus = reason == BFM_GOTFOCUS ; const Bool reasonLostFocurs = reason == BFM_LOSTFOCUS ; if (reasonGotFocus || reasonLostFocurs) return ;

Visibility

Dialogs and user areas are informed when they become visible:

Specific GUI Elements

Some messages can only be sent to specific elements or are only sent by specific elements.

Text Edit Fields

Text edit field messages:

// This example sets the string of a text edit gadget that is part of a GeDialog. // Then a message is sent to the gadget to set the cursor position.

// set the text of the edit field. const String text { "Hello World" }; SetString(ID_TEXTEDIT, text);

// sets the cursor to the end of the new text BaseContainer bc { BFM_EDITFIELD_SETCURSORPOS }; bc. SetInt32 (1, ( Int32 )text.GetLength()); SendMessage(ID_TEXTEDIT, bc);

// set focus Activate(ID_TEXTEDIT);

Multi-line edit fields messages:

Messages to access the internally stored undo stack of a multi-line edit field:

It is also possible to send messages from the IDM list to the multi-line edit field.

// This example GeDialog includes a multi-line edit field and two buttons. // The two buttons can be used to send "Undo" and "Redo" commands to the // multi-line field. The buttons are enabled or disabled depending on the // undo stack of the field. Bool CreateLayout() { SetTitle( "Simple Script Manager" _s); const Int32 style = DR_MULTILINE_STATUSBAR | DR_MULTILINE_HIGHLIGHTLINE | DR_MULTILINE_WORDWRAP | DR_MULTILINE_MONOSPACED | DR_MULTILINE_PYTHON | DR_MULTILINE_SYNTAXCOLOR ;

// add a multi line text field AddMultiLineEditText(ID_MULTILINE_EDIT, BFH_SCALEFIT , 0, 200, style);

// set some python code SetString(ID_MULTILINE_EDIT, "import c4d\n\nprint(\"hello world\")\n" _s);

// add two buttons for "Undo" and "Redo" AddButton(ID_UNDO_BUTTON, BFH_SCALEFIT , 0, 10, "Undo" _s); AddButton(ID_REDO_BUTTON, BFH_SCALEFIT , 0, 10, "Redo" _s);

// use a timer to check the undo stack of the text field this->SetTimer(250); return true ; } Bool Command( Int32 id , const BaseContainer & msg) { if ( id == ID_UNDO_BUTTON) { // when "Undo" button was pressed, send IDM_UNDO // to the multi line text field SendMessage(ID_MULTILINE_EDIT, BaseContainer ( IDM_UNDO )); CheckUndoState(); } if ( id == ID_REDO_BUTTON) { // when "Redo" button was pressed, send IDM_REDO // to the multi line text field SendMessage(ID_MULTILINE_EDIT, BaseContainer ( IDM_REDO )); CheckUndoState(); } return GeDialog::Command ( id , msg); } void Timer( const BaseContainer & msg) { CheckUndoState(); }

// ---------------------------------------------------------------------------------------- // Checks the current undo stack of the multi-line edit text. // Depending on the stack the "Undo" and "Redo" buttons are enabled. // ---------------------------------------------------------------------------------------- void CheckUndoState() { // send message to get data BaseContainer getUndoLevelMsg = BaseContainer ( BFM_EDITFIELD_UNDOSTAT_UNDOLEVEL ); getUndoLevelMsg. SetBool ( BFM_REQUIRESRESULT , true ); const GeData res = SendMessage(ID_MULTILINE_EDIT, getUndoLevelMsg);

// check if the message result is a BaseContainer if (res. GetType () == DA_CONTAINER ) { BaseContainer * stat = res. GetContainer (); if (stat) { // get undo stack size and current level const Int32 undoStackCount = stat-> GetInt32 ( BFM_EDITFIELD_UNDOSTAT_COUNT ); const Int32 currentLevel = stat-> GetInt32 ( BFM_EDITFIELD_UNDOSTAT_UNDOLEVEL );

// enable and disable buttons accordingly if (currentLevel > 0) Enable(ID_UNDO_BUTTON, true ); else Enable(ID_UNDO_BUTTON, false );

// check if the current level is not the latest undo-level if (currentLevel < (undoStackCount - 1)) Enable(ID_REDO_BUTTON, true ); else Enable(ID_REDO_BUTTON, false ); } } }

Status Bar

The message BFM_SETSTATUSBAR can be sent to edit the status bar of a scroll group or a progress bar custom GUI element:

The parameters of this message are:

// This example sends a message to a CUSTOMGUI_PROGRESSBAR gadget to update the status bar. BaseContainer m( BFM_SETSTATUSBAR ); m.SetBool( BFM_STATUSBAR_PROGRESSON , true ); m.SetFloat( BFM_STATUSBAR_PROGRESS , _progress); m.SetData( BFM_STATUSBAR_TINT_COLOR , 向量 (1.0 - _progress, _progress, 0.0)); SendMessage(ID_STATUSBAR, m);

// This example sends a message to a scroll group to set the text of its status bar. BaseContainer bc( BFM_SETSTATUSBAR ); bc. SetData ( BFM_STATUSBAR_PROGRESSON , false ); bc. SetData ( BFM_STATUSBAR_TXT , "Some Text" ); bc. SetData ( BFM_STATUSBAR_HELP , "More Text" ); SendMessage(ID_SCROLLGROUP, bc);

Pop Up

A message is sent from a popup button:

// This example adds a pop up button to the layout in GeDialog::CreateLayout(). AddPopupButton(ID_POPUP, BFH_LEFT , 10, 10); AddChild(ID_POPUP, 1, "Child 0" _s); AddChild(ID_POPUP, 2, "Child 1" _s);

// This example catches a message in GeDialog::Message() after the pop up button was pressed // (but before the pop up menu is created).

case BFM_POPUPNOTIFY : { const Int32 ID = msg. GetInt32 ( BFM_ACTION_ID ); if (ID == ID_POPUP) { ApplicationOutput ( "The pop up button was pressed" _s); } break ; }

// This example catches the result in GeDialog::Command() after // something was selected in the pop up button's pop up menu.

if ( id == ID_POPUP) { const Int32 selectedItem = msg. GetInt32 ( BFM_ACTION_VALUE ); ApplicationOutput ( "The item " + String::IntToString (selectedItem) + " was selected" ); }

Scroll Group

A scroll group informs the parent dialog when it was scrolled:

Custom GUI Elements

The base class for custom GUI elements (used to display NodeData parameters in the Attribute Manager) is iCustomGui which is based on GeDialog . Such custom GUI elements receive these messages when the used "User Interface" is changed in the Attribute Manager. The custom GUI can then store the ID of the currently active gadget:

// This example stores the ID of the gadget currently in focus.

case BFM_GETFOCUSBEFOREUPDATE : { result. SetInt32 (0, _activeID); // store ID of active gadget return true ; } case BFM_SETFOCUSAFTERUPDATE : { const Int32 ID = msg. GetInt32 (0); Activate(ID); // active stored ID return true ; }

Core Messages

Both GeDialog and GeUserArea receive core messages. These messages call GeDialog::CoreMessage() or GeUserArea::CoreMessage() .

See the Core Messages Manual .

// This example catches EVMSG_ASYNCEDITORMOVE in a GeDialog.

case EVMSG_ASYNCEDITORMOVE : { // check if this core message is new if (CheckCoreMessage(bc)) { const Int movement = ( Int )bc. GetVoid ( BFM_CORE_PAR1 ); switch (movement) { case MOVE_START : { ApplicationOutput ( "Start Movement" ); break ; } case MOVE_CONTINUE : { ApplicationOutput ( "Continue Movement" ); break ; } case MOVE_END : { ApplicationOutput ( "End Movement" ); break ; } } } break ; }

延伸阅读

BFM_SETSTATUSBAR
@ BFM_SETSTATUSBAR
To set a statusbar (e.g. inside a SCROLLGROUP (dialog element)):
定义: gui.h:813
COLOR_BG
@ COLOR_BG
定义: c4d_colors.h:16
BFM_INPUT_KEYBOARD
@ BFM_INPUT_KEYBOARD
Keyboard.
定义: gui.h:688
BFH_LEFT
@ BFH_LEFT
Aligned to the left. 1<<3.
定义: gui.h:306
BFM_ACTION
@ BFM_ACTION
One of the child elements made any action:
定义: gui.h:721
GeUserArea::DrawSetPen
void DrawSetPen(const Vector &color)
DRAGTYPE_COMMAND
@ DRAGTYPE_COMMAND
Destination drag for command.
定义: gui.h:754
DA_CONTAINER
@ DA_CONTAINER
BaseContainer.
定义: c4d_gedata.h:49
QCTRL
@ QCTRL
定义: gui.h:39
BaseContainer::SetData
GeData * SetData(Int32 id, const GeData &n)
定义: c4d_basecontainer.h:255
BFM_INPUT_QUALIFIER
@ BFM_INPUT_QUALIFIER
Int32 A bit mask with the qualifiers at the time when the event occurred: QUALIFIER
定义: gui.h:684
Int
maxon::Int Int
定义: ge_sys_math.h:62
BFM_DRAGRECEIVE
@ BFM_DRAGRECEIVE
Drag receive. (See DragAndDrop.)
定义: gui.h:747
GeUserArea::DrawSetFont
void DrawSetFont(Int32 fontid)
BFM_STATUSBAR_TINT_COLOR
@ BFM_STATUSBAR_TINT_COLOR
Int32 Color ID for the status bar, or as RGB value (Vector).
定义: gui.h:821
MOVE_END
#define MOVE_END
Move ended. par2 == ESC.
定义: ge_prepass.h:2569
BFM_INPUT_DEVICE
@ BFM_INPUT_DEVICE
Int32 Device:
定义: gui.h:686
GeData::GetType
Int32 GetType(void) const
定义: c4d_gedata.h:407
BaseContainer::SetInt32
void SetInt32(Int32 id, Int32 l)
定义: c4d_basecontainer.h:505
BFM_INTERACTEND
@ BFM_INTERACTEND
Sent when user interaction ends.
定义: gui.h:917
BaseContainer::SetVector
void SetVector(Int32 id, const Vector &v)
定义: c4d_basecontainer.h:555
BaseContainer::SetString
void SetString(Int32 id, const maxon::String &s)
定义: c4d_basecontainer.h:569
BFM_REQUIRESRESULT
@ BFM_REQUIRESRESULT
Set to true in the passed container for GeDialog::SendMessage to return a value from the message.
定义: gui.h:1005
MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION_ID
#define MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION_ID
The custom GUI ID in the message container for MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION.
定义: c4d_baselist.h:404
BFM_CORE_PAR1
@ BFM_CORE_PAR1
ANY Parameter 1.
定义: gui.h:875
Float
maxon::Float Float
定义: ge_sys_math.h:64
GeUserArea::DrawText
void DrawText(const maxon::String &txt, Int32 x, Int32 y, Int32 flags=(0|(0<< 4)))
DRAWTEXT_HALIGN_LEFT
#define DRAWTEXT_HALIGN_LEFT
Align to the left.
定义: c4d_gui.h:181
BFM_INPUT_MOUSERIGHT
@ BFM_INPUT_MOUSERIGHT
Right mouse button.
定义: gui.h:693
BFM_DRAW_REASON
@ BFM_DRAW_REASON
BaseContainer Message which started the redraw.
定义: gui.h:566
GeUserArea::DrawMsg
virtual void DrawMsg(Int32 x1, Int32 y1, Int32 x2, Int32 y2, const BaseContainer &msg)
BaseContainer::GetContainerInstance
BaseContainer * GetContainerInstance(Int32 id)
定义: c4d_basecontainer.h:425
DR_MULTILINE_HIGHLIGHTLINE
@ DR_MULTILINE_HIGHLIGHTLINE
Highlight lines.
定义: gui.h:316
COLOR_BG_HIGHLIGHT
@ COLOR_BG_HIGHLIGHT
定义: c4d_colors.h:329
GeUserArea::SetClippingRegion
void SetClippingRegion(Int32 x, Int32 y, Int32 w, Int32 h)
IDM_UNDO
#define IDM_UNDO
Undo.
定义: ge_prepass.h:3602
BFM_ACTION_ID
@ BFM_ACTION_ID
Int32 ID of the dialog element that triggered the action.
定义: gui.h:722
COLOR_TRANS
@ COLOR_TRANS
定义: c4d_colors.h:14
maxon::String::IsPopulated
Bool IsPopulated() const
定义: string.h:1396
DR_MULTILINE_PYTHON
@ DR_MULTILINE_PYTHON
Python line return handling.
定义: gui.h:320
BFM_EDITFIELD_UNDOSTAT_COUNT
@ BFM_EDITFIELD_UNDOSTAT_COUNT
Int32 The undo stack size.
定义: gui.h:1002
DR_MULTILINE_SYNTAXCOLOR
@ DR_MULTILINE_SYNTAXCOLOR
Python syntax highlighting.
定义: gui.h:314
BaseContainer::GetFloat
Float GetFloat(Int32 id, Float preset=0.0) const
定义: c4d_basecontainer.h:335
RESULT_CURSOR
@ RESULT_CURSOR
Int32 Mouse cursor: MOUSE
定义: gui.h:542
BaseContainer::SetBool
void SetBool(Int32 id, Bool b)
定义: c4d_basecontainer.h:498
DR_MULTILINE_WORDWRAP
@ DR_MULTILINE_WORDWRAP
Word wrap multi-line field.
定义: gui.h:321
BFM_ACTION_VALUE
@ BFM_ACTION_VALUE
GeData Action value.
定义: gui.h:723
BFM_FADE
@ BFM_FADE
定义: gui.h:981
EVMSG_ASYNCEDITORMOVE
#define EVMSG_ASYNCEDITORMOVE
The user moved something in the editor window. Managers should update things like position fields.
定义: ge_prepass.h:2563
IDM_REDO
#define IDM_REDO
Redo.
定义: ge_prepass.h:3603
MOUSE_POINT_HAND
static const Int32 MOUSE_POINT_HAND
Point hand cursor.
定义: ge_prepass.h:2495
BFM_STATUSBAR_HELP
@ BFM_STATUSBAR_HELP
String Second text. (Help.)
定义: gui.h:819
GeUserArea::DrawSetTextCol
void DrawSetTextCol(Int32 fg, Int32 bg)
MOVE_CONTINUE
#define MOVE_CONTINUE
Move continued.
定义: ge_prepass.h:2568
BFM_STATUSBAR_PROGRESS
@ BFM_STATUSBAR_PROGRESS
Float Between 0.0 and 1.0.
定义: gui.h:817
BaseContainer::GetId
Int32 GetId() const
定义: c4d_basecontainer.h:131
GeUserArea::AdjustColor
void AdjustColor(Int32 colorid, Int32 highlightid, Float percent)
BFM_GETFOCUSBEFOREUPDATE
@ BFM_GETFOCUSBEFOREUPDATE
定义: gui.h:632
GeUserArea::Message
virtual Int32 Message(const BaseContainer &msg, BaseContainer &result)
String
定义: c4d_string.h:38
BFM_GOTFOCUS
@ BFM_GOTFOCUS
Item got the focus.
定义: gui.h:621
String::IntToString
static String IntToString(Int32 v)
定义: c4d_string.h:495
BFM_CURSORINFO_REMOVE
@ BFM_CURSORINFO_REMOVE
Sent when mouse cursor has left a user area.
定义: gui.h:555
maxon::Vec3< maxon::Float64, 1 >
BFM_POPUPNOTIFY
@ BFM_POPUPNOTIFY
Notification of popup before the menu opens.
定义: gui.h:896
GeData::GetInt32
Int32 GetInt32(void) const
定义: c4d_gedata.h:427
BFM_LAYOUT_GETDATA
@ BFM_LAYOUT_GETDATA
定义: gui.h:956
StopAllThreads
void StopAllThreads(void)
BFM_DRAG_FINISHED
@ BFM_DRAG_FINISHED
Bool Drag finished.
定义: gui.h:770
FONT_MONOSPACED
@ FONT_MONOSPACED
Monospaced font.
定义: gui.h:26
RemoveLastCursorInfo
Bool RemoveLastCursorInfo(LASTCURSORINFOFUNC func)
CallCommand
void CallCommand(Int32 id, Int32 subid=0)
BFM_INPUT_CHANNEL
@ BFM_INPUT_CHANNEL
Int32 Contains the key or mouse button. See also KEY.
定义: gui.h:691
KEY_ENTER
@ KEY_ENTER
定义: gui.h:68
BFM_LAYOUT_SETDATA
@ BFM_LAYOUT_SETDATA
Receive the container saved with BFM_LAYOUT_GETDATA when loading a layout.
定义: gui.h:958
BFM_GETCURSORINFO
@ BFM_GETCURSORINFO
定义: gui.h:539
GeUserArea::OffScreenOn
Bool OffScreenOn(void)
GeData
定义: c4d_gedata.h:82
BFM_STATUSBAR_PROGRESSON
@ BFM_STATUSBAR_PROGRESSON
Bool Statusbar active.
定义: gui.h:815
BFM_EDITFIELD_SETCURSORPOS
@ BFM_EDITFIELD_SETCURSORPOS
定义: gui.h:968
Int32
maxon::Int32 Int32
定义: ge_sys_math.h:58
GeDialog::Command
virtual Bool Command(Int32 id, const BaseContainer &msg)
GeUserArea::Redraw
void Redraw(Bool threaded=false)
ApplicationOutput
#define ApplicationOutput(formatString,...)
定义: debugdiagnostics.h:207
BaseContainer::SetId
void SetId(Int32 c_id)
定义: c4d_basecontainer.h:137
BaseContainer::GetVoid
void * GetVoid(Int32 id, void *preset=nullptr) const
定义: c4d_basecontainer.h:343
RESULT_BUBBLEHELP_TITLE
@ RESULT_BUBBLEHELP_TITLE
String Bubble help text title. Printed in bold for the bubble help, not visible in the status bar.
定义: gui.h:553
BFM_LOSTFOCUS
@ BFM_LOSTFOCUS
Item lost the focus.
定义: gui.h:622
BaseContainer::GetBool
Bool GetBool(Int32 id, Bool preset=false) const
定义: c4d_basecontainer.h:295
COLOR_CONSOLE_TEXT
@ COLOR_CONSOLE_TEXT
定义: c4d_colors.h:94
BFM_INPUT_Y
@ BFM_INPUT_Y
Float Y value.
定义: gui.h:704
BFM_STATUSBAR_TXT
@ BFM_STATUSBAR_TXT
String First text.
定义: gui.h:816
向量
maxon::Vec3< maxon::Float64, 1 > Vector
定义: ge_math.h:145
BFM_INPUT_MOUSE
@ BFM_INPUT_MOUSE
Mouse.
定义: gui.h:687
MOVE_START
#define MOVE_START
Move started.
定义: ge_prepass.h:2567
BFM_INPUT_MOUSELEFT
@ BFM_INPUT_MOUSELEFT
Left mouse button.
定义: gui.h:692
MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION
#define MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION
Sent by a custom GUI to the parent. The corresponding data is DescriptionCustomGuiNotification.
定义: c4d_baselist.h:403
BFM_SETFOCUSAFTERUPDATE
@ BFM_SETFOCUSAFTERUPDATE
定义: gui.h:670
BaseContainer::GetString
String GetString(Int32 id, const maxon::String &preset=maxon::String()) const
定义: c4d_basecontainer.h:387
BaseContainer::SetContainer
void SetContainer(Int32 id, const BaseContainer &s)
定义: c4d_basecontainer.h:597
BFM_INTERACTSTART
@ BFM_INTERACTSTART
定义: gui.h:898
Bool
maxon::Bool Bool
定义: ge_sys_math.h:53
BFH_SCALEFIT
@ BFH_SCALEFIT
Scale fit. BFH_SCALE|BFH_FIT.
定义: gui.h:310
RESULT_BUBBLEHELP
@ RESULT_BUBBLEHELP
String Bubble help text.
定义: gui.h:543
MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION_CONTENT
#define MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION_CONTENT
The used data in the message container for MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION.
定义: c4d_baselist.h:405
BFM_INPUT_X
@ BFM_INPUT_X
Float X value.
定义: gui.h:703
MOUSE_QUESTION
static const Int32 MOUSE_QUESTION
Question cursor.
定义: ge_prepass.h:2481
BFM_WEIGHTS_CHANGED
@ BFM_WEIGHTS_CHANGED
Group weights changed. The group ID is returned.
定义: gui.h:962
BFM_INPUT_DOUBLECLICK
@ BFM_INPUT_DOUBLECLICK
Bool Double click.
定义: gui.h:716
GeUserArea::ActivateFading
void ActivateFading(Int32 milliseconds)
BaseContainer::GetInt32
Int32 GetInt32(Int32 id, Int32 preset=0) const
定义: c4d_basecontainer.h:303
BFM_ACTION_RESET
@ BFM_ACTION_RESET
Bool Reset to default value on right-click of input field arrows.
定义: gui.h:728
GeData::GetContainer
BaseContainer * GetContainer(void) const
定义: c4d_gedata.h:487
DR_MULTILINE_MONOSPACED
@ DR_MULTILINE_MONOSPACED
Monospaced font.
定义: gui.h:313
BFM_EDITFIELD_GETCURSORPOS
@ BFM_EDITFIELD_GETCURSORPOS
Int32 Return the cursor position in an edit field.
定义: gui.h:966
GeUserArea
定义: c4d_gui.h:163
BaseContainer
定义: c4d_basecontainer.h:46
DR_MULTILINE_STATUSBAR
@ DR_MULTILINE_STATUSBAR
Display a statusbar with the cursor position.
定义: gui.h:315
GeUserArea::DrawRectangle
void DrawRectangle(Int32 x1, Int32 y1, Int32 x2, Int32 y2)
BFM_DRAG_DATA_NEW
@ BFM_DRAG_DATA_NEW
ANY Internal drag data.
定义: gui.h:774
BFM_EDITFIELD_UNDOSTAT_UNDOLEVEL
@ BFM_EDITFIELD_UNDOSTAT_UNDOLEVEL
Int32 The current undo level.
定义: gui.h:1003
BFM_INPUT_ASC
@ BFM_INPUT_ASC
String Contains the Unicode input from keyboard.
定义: gui.h:689

Copyright  © 2014-2025 乐数软件    

工业和信息化部: 粤ICP备14079481号-1