• 在DirectX9中使用DXUT定制按钮来控制模型旋转的问题


    使用DXUT中的按钮控件类实现 控制模型旋转的过程如下:

    1.创建一个CDXUTDialog对话框,并绑定至CDXUTDialogResourceManager对话框资源管理器。

    2.绑定回调函数GUIEvent(GUIEvent函数的函数名可自定义,DXUT框架没有强行规定对话框的回调函数名)

    3.为对话框AddButton添加按钮控件。

    4.设置对话框的位置和大小,在OnFrameRender中添加对话框的OnRender函数,在窗口的MsgProc中添加对话框的  子(相对于窗口的MsgProc) MsgProc以便截取消息。

    5.在按钮控件的HandleMouse函数中设置 控制模型旋转的相关代码。

    完成之后,当用户按下改按钮时MouseButtonDown消息被子MsgProc截获,并发送到按钮控件的HandleMouse函数中处理。

    在HandleMouse中对消息进行switch(message)                    

    而按DXUT中源代码的写法是跳过ButtonDown,处理ButtonUp,也就是说用户把按钮按下去不动的话,程序不会作出响应,在鼠标按键弹起来后才有。

    如果想实现按下去不动,模型开始朝一个方向旋转知道放开按键旋转停止  这样的效果,

    必须在

    DXUTgui.cpp文件的

      CDXUTButton::HandleMouse 

        switch( uMsg )

          case WM_LBUTTONDOWN:

    中添加代码。

    这样就会改变所有使用DXUTgui.cpp中CDXUTButton对话框的功能。就是说如果有其他的按钮,那他们也能让模型旋转。因为大家都是CDXUTButton。..

    并不是!

    case WM_LBUTTONUP:
            {
                if( m_bPressed )
                {
                    m_bPressed = false;
                    ReleaseCapture();
    
                    if( !m_pDialog->m_bKeyboardInput )
                        m_pDialog->ClearFocus();
    
                    // Button click
                    if( ContainsPoint( pt ) )
                        m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this );
    
                    return true;
                }
    
                break;
            }
    

      m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this );

      注意最后一个参数this,这个参数告诉对话框的回调函数OnGUIEvent消息来自哪一个控件。

      就算所有按钮都是CDXUTButton,  OnGUIEvent页能够区分各个按钮。只对特定的按钮作出模型旋转的回应。

    最后,,不管怎样还是会改变DXUTgui.cpp文件。。。

  • 相关阅读:
    【leetcode】19. Remove Nth Node From End of List
    【leetcode】18. 4Sum
    【leetcode】371. Sum of Two Integers
    【leetcode】17. Letter Combinations of a Phone Number
    【leetcode】16. 3Sum Closest
    【leetcode】13. Roman to Integer
    【leetcode】15. 3Sum
    【leetcode】14. Longest Common Prefix
    【leetcode】368. Largest Divisible Subset
    Linux学习总结(十四) 文件的打包和压缩
  • 原文地址:https://www.cnblogs.com/Agravity/p/5128822.html
Copyright © 2020-2023  润新知