BFM_INPUT_MOUSEWHEEL message



  • On 27/01/2016 at 08:29, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   R13 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    ---------
    Hello all,
    In Attribute window, when I rotate mouse wheel (over a combobox control) the value is changing and I want to inhib this operation.

    On Message(const BaseContainer& msg, BaseContainer& result) method (inherited from iCustomGui),

    if I rotate mouse wheel
    LONG ch = msg.GetLong( BFM_INPUT_CHANNEL );
    the result is ch = 0;
    My expectaction was ch = 100 (which means "BFM_INPUT_MOUSEWHEEL")

    If I click on mouse wheel the result is ch = 3 (which means "BFM_INPUT_MOUSEMIDDLE")

    Can you help me please, why the result is 0 when I rotate the wheel?
    Or do you have an other ideea how to do?

    Thank you,
    Daniel



  • On 28/01/2016 at 04:47, xxxxxxxx wrote:

    Hi,

    in a GeDialog (same for your iCustomGui) this is roughly how expected it to work:

    You check the incoming message:
    msg.GetId() == BFM_INPUT

    You check the device:
    msg.GetInt32(BFM_INPUT_DEVICE) == BFM_INPUT_MOUSE

    And then check the channel:
    msg.GetInt32(BFM_INPUT_CHANNEL) == BFM_INPUT_MOUSEWHEEL

    Seems to work quite well here. If you continue to have this issue, can you please reveal a bit more of your message function?



  • On 29/01/2016 at 07:54, xxxxxxxx wrote:

    Hi,
    and sorry for my delay...

    On "Command" method (from "class MyClass: public iCustomGui") I have:

    Bool MyClass::Command(LONG id, const BaseContainer &msg;)
    {
       switch (id){
          case IDC_COMBO_WPROP_TYPE:    
          {     
            //here is my combobox and over it I rotate the mouse wheel
            LONG lId = msg.GetId();
            if (lId == BFM_INPUT)
            int a = 5;   // something

    LONG chn = msg.GetLong( BFM_INPUT_CHANNEL );
         if (chn == BFM_INPUT_MOUSEWHEEL)
            int i = 9;   // something
          }
          break;
          ...
       }
       
       return iCustomGui::Command(id, msg);
    }

    Here "lId" is 0x62414354 = "bACT" which means "BFM_ACTION" not "BFM_INPUT"

    Can I see on "Command()" if the mouse wheel is rotated?

    Thank you,
    Daniel



  • On 29/01/2016 at 08:50, xxxxxxxx wrote:

    and chn is 0



  • On 30/01/2016 at 07:46, xxxxxxxx wrote:

    I could be wrong about this.
    But if you're trying to test for the rotating mouse wheel while hovering over a gizmo on a GeDialog. I don't believe that's possible.
    I think the gizmo's ability to catch mouse wheel values is private. And not supported in the SDK.

    The only places I know where we can catch the rotation values of the mouse wheel are:
    -The Editor view
    -A User Area attached to a GeDialog

    Detecting it anywhere else would require coding directly to your OS.
    But I could be wrong.

    -ScottA



  • On 01/02/2016 at 00:43, xxxxxxxx wrote:

    Thank you Scott for your info



  • On 01/02/2016 at 01:15, xxxxxxxx wrote:

    Hi,
    In Attributes window I have some comboboxes like in the below attached picture (inherited from iCustomGui) and I want to inhibit the changing of values when I rotate the wheel of mouse over combobox.

    Daniel



  • On 01/02/2016 at 02:04, xxxxxxxx wrote:

    Hi,

    I'm really not sure what the issue is. I mean, as you wrote, you already get the BFM_ACTION in your Command() function, when using the mousewheel on the combobox.
    I tried it here, in a GeDialog and it works just as expected.
    In your code example, you are of course evaluating things, that are not there. You are checking for BFM_INPUT and regardless of the result you try to evaluate the channel.
    Instead, you should evaluate, what you have received, as you said BFM_ACTION.
    And in my tests here, if the message ID is BFM_ACTION, I can simply read the BFM_ACTION_VALUE to get the new value of the combobox.



  • On 01/02/2016 at 04:40, xxxxxxxx wrote:

    Hi Andreas,
    Yes, you are right that I didn't evaluate correctly the result of BFM_INPUT... I did only some tests...

    My combobox is added in "CreateLayout()" with "AddComboBox" (which is from GeDialog)

    Bool iWidgetPropertyGui::CreateLayout( )
    {
    ...
    AddComboBox(IDC_COMBO_WPROP_TYPE,BFV_TOP|BFH_LEFT,SizePixChr(80,10),SizePixChr(10,1));
    ...
    }

    Is it possible to have this behaviour because I use Cinema4D R13 variant?

    Thank you,
    Daniel



  • On 01/02/2016 at 04:57, xxxxxxxx wrote:

    Well, usually we don't support versions older versions than the current one.
    But I don't see a reason, why it shouldn't work in R13. Haven't tried it though.



  • On 01/02/2016 at 05:19, xxxxxxxx wrote:

    To be more explicit this is my window and in green area I can catch "BFM_INPUT_MOUSEWHEEL" and "BFM_INPUT" messages.

    I understand that the combobox consumes this message and it is not forwarded...


Log in to reply