Drag and drop to UserArea
-
On 25/12/2017 at 01:22, xxxxxxxx wrote:
User Information:
Cinema 4D Version: R18
Platform: Windows ;
Language(s) : C++ ;---------
How can I get an animatable parameter by drag and drop?
The Object Manager object was created by adding LinkBoxGUI with AddCustomGui.
Is there a drag-and-drop correspondence GUI for the parameter?
Since I was not able to make LinkBox remodeling because it was difficult, I wanted to create it using user area drag and drop, but I saw the sample file of SDK manual and AsyncTest and made it for the same, but I understood how to receive the message did not.#pragma once #include "c4d.h" #include "c4d_commanddata.h" #include "c4d_gui.h" #define IDS_UserAreaTest 1000001 Bool RegisterUserAreaTest(void); Bool PluginStart(void) { if (!RegisterUserAreaTest()) return false; return true; } void PluginEnd(void) { } Bool PluginMessage(Int32 id, void* data) { switch (id) { case C4DPL_INIT_SYS: return true; case C4DMSG_PRIORITY: return true; case C4DPL_BUILDMENU: break; case C4DPL_COMMANDLINEARGS: break; case C4DPL_EDITIMAGE: return false; } return false; } class UserAreaLinkBox : public GeUserArea { public: virtual Bool GetMinSize(Int32& w, Int32& h); virtual void DrawMsg(Int32 x1, Int32 y1, Int32 x2, Int32 y2, const BaseContainer& msg); }; Bool UserAreaLinkBox::GetMinSize(Int32& w, Int32& h) { w = 100; h = 20; return true; } void UserAreaLinkBox::DrawMsg(Int32 x1, Int32 y1, Int32 x2, Int32 y2, const BaseContainer& msg) { this->OffScreenOn(); this->DrawSetPen(Vector(110, 110, 0)); this->DrawRectangle(x1 + 2, y1 + 2, x2 - 2, y2 - 2); } class UserAreaTestDialog : public GeDialog { public: virtual Bool CreateLayout(); virtual Int32 Message( const BaseContainer& msg, BaseContainer& result ); virtual Bool CoreMessage( Int32 id, const BaseContainer &msg; ); void Update(); UserAreaLinkBox ua; }; Bool UserAreaTestDialog::CreateLayout() { SetTitle( "UserAreaTest" ); Update(); return true; } Int32 UserAreaTestDialog::Message( const BaseContainer& msg, BaseContainer& result ) { switch (msg.GetId()) { case BFM_DRAGRECEIVE: if (msg.GetInt32(BFM_DRAG_LOST)) { GePrint("BFM_DRAG_LOST"); } if (msg.GetInt32(BFM_DRAG_FINISHED)) { GePrint("BFM_DRAG_FINISHED"); } if (CheckDropArea(200, msg, true, true)) { GePrint("CheckDropArea"); } break; default: break; } return GeDialog::Message( msg, result ); } void UserAreaTestDialog::Update() { LayoutFlushGroup(100); FreeChildren(100); GroupBegin(100, BFH_SCALEFIT, 1, 1, "", BFV_BORDERGROUP_FOLD_OPEN, 0); { C4DGadget* c4dgadget = AddUserArea(200, BFH_SCALEFIT, 100, 20); if (c4dgadget) AttachUserArea(ua, 200); } GroupEnd(); LayoutChanged(100); } Bool UserAreaTestDialog::CoreMessage( Int32 id, const BaseContainer &msg; ) { switch( id ) { case EVMSG_CHANGE: Update(); break; } return GeDialog::CoreMessage( id, msg ); }; class UserAreaTest : public CommandData { INSTANCEOF( UserAreaTest, CommandData ) public: virtual Bool Execute( BaseDocument* doc ); virtual Bool RestoreLayout( void* secret ); static UserAreaTest* Alloc() { return NewObjClear( UserAreaTest ); } private: UserAreaTestDialog _dialog; }; Bool UserAreaTest::Execute( BaseDocument* doc ) { if( _dialog.IsOpen() == false ) _dialog.Open( DLG_TYPE_ASYNC, IDS_UserAreaTest, -1, -1, 400, 400 ); return true; } Bool UserAreaTest::RestoreLayout( void* secret ) { return _dialog.RestoreLayout( IDS_UserAreaTest, 0, secret ); } Bool RegisterUserAreaTest( void ) { return RegisterCommandPlugin( IDS_UserAreaTest, String( "UserAreaTest" ), 0, nullptr, String( "UserAreaTest" ), UserAreaTest::Alloc() ); }
GePrint ("BFM_DRAG_LOST");
GePrint ("BFM_DRAG_FINISHED");
Please tell me how to get to.
Or please tell me if there is better usage. -
On 26/12/2017 at 00:06, xxxxxxxx wrote:
I have now seen the fact of shock.
I accidentally saw this forum with a different personal computer.
When searching using the keyword of drag, the same question hit a lot.
I noticed the cause was investigated.
When this forum is logged in, the search result is greatly reduced.
Why is this forum constantly watching nearly 100 people. I was concerned that there was only one or two people logging in.
I will not be able to recover for the time being.