zoukankan      html  css  js  c++  java
  • 在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文件。。。

  • 相关阅读:
    入门菜鸟
    FZU 1202
    XMU 1246
    Codeforces 294E Shaass the Great 树形dp
    Codeforces 773D Perishable Roads 最短路 (看题解)
    Codeforces 814E An unavoidable detour for home dp
    Codeforces 567E President and Roads 最短路 + tarjan求桥
    Codeforces 567F Mausoleum dp
    Codeforces 908G New Year and Original Order 数位dp
    Codeforces 813D Two Melodies dp
  • 原文地址:https://www.cnblogs.com/Agravity/p/5128822.html
Copyright © 2011-2022 走看看