使用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文件。。。

在DirectX9中使用DXUT定制按钮来控制模型旋转的问题的更多相关文章

  1. 在Activity中响应ListView内部按钮的点击事件

    最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在A ...

  2. ASP.NET MVC中实现多个按钮提交的几种方法

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  3. easyui中Tab的tools按钮刷新当前tab

    easyui中Tab的tools按钮刷新当前tab 点击刷新按钮,刷新当前Tab选项卡. $('#index_tabs').tabs({ fit : true, border : false, too ...

  4. css中文本框与按钮对不齐解决方案

    我们先对对input标记设定样式,代码如下: html 代码 <form> <input type=”text” name=”text1” id=”text1” /> < ...

  5. GridView控件中插入自定义删除按钮并弹出确认框

    GridView控件中插入自定义删除按钮,要实现这个功能其实有多种方法,这里先记下我使用的方法,以后再添加其他方法. 一.实现步骤 1.在GridView中添加模板列(TemplateField). ...

  6. 在Activity中响应ListView内部按钮的点击事件的两种方法!!!

    在Activity中响应ListView内部按钮的点击事件的两种方法 转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题: ...

  7. element-- 修改MessageBox 弹框 中确定和取消按钮顺序

    需求:修改弹框中的 取消/确定按钮顺序,及头部和底部背景颜色; 原ui效果图 需求ui效果图 方法:对取消及确定按钮自定义类名,样式重写

  8. 在Activity中响应ListView内部按钮的点击事件的两种方法

    转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...

  9. 隐藏 FastAdmin 列表中的拖动排序按钮

    隐藏 FastAdmin 列表中的拖动排序按钮 就是以下这个按钮,想先删除不要. 刚开始在 CMS 插件中的栏目中发现没有,以为在哪个位置中,但找到半天的 weigh 都没有找到weigh 的字眼. ...

随机推荐

  1. 改变win7驱动图标

    一.背景 自己做的USB设备是HID设备,注册到设备管理器中就是"HID Compliant device",显得很业余,然后想去改变这个图标和名称,也就有了此篇文章 二.正文 还 ...

  2. Android如何一进入一个activity就唤醒键盘

    方法总结: 在AndroidManife.xml中对应的的Activity配置中加入以下配置项: android:windowSoftInputMode="stateVisible|adju ...

  3. 他山之石——vs2013 安装与部署及程序打包

    C#打包需要这个:InstallShield 2013 Limited Edition for Visual Studio  .下载地址: InstallShield 2013 Limited Edi ...

  4. Apache 两种mpm prefork 和 worker 的区别

    Apache默认的是线程安全的prefork,Prefork MPM 使用多个子进程,每个子进程有一个线程,每个进程每次只处理一个请求连接,一个请求出故障后不会影响其他请求,是线程安全的 worker ...

  5. svg + d3

    为了实现元素的添加,删除,拖拽,左键点击,右键单击,悬浮等功能,使用了d3 + svg 的技术来实现界面. 最开始是采用canvas,但是由于功能原因放弃了该技术,可以看下 canvas简介 另附:c ...

  6. BZOJ 3639: Query on a tree VII

    Description 一棵树,支持三种操作,修改点权,修改颜色,问所有与他路径上颜色相同的点的最大权,包含这两个点. Sol LCT. 用LCT来维护重边,对于每个节点在建一个set用来维护轻边,这 ...

  7. 《转载》使用org.w3c.dom.Element的setTextContent()、getTextContent()方法时出现编译错误

    今天在更新项目后进行编译时,出现如下错误一堆: 编译错误 Google之,在stackoverflow上看到如下的解决方法: I came here with the same problem. Ev ...

  8. cat命令

    [cat]          合并文件和打印到标准输出 命令格式: cat [OPTION]... [FILE]... 命令功能: 拼接文件或者做标准输入输出 命令格式: cat [OPTION].. ...

  9. java+eclipse+selenium环境搭建

    这几天在学selenium,大头虾的我.安装环境还是遇到了挺多问题,赶紧来记录下.不然下次又...(参考虫师的<Selenium2 Java自动化测试实战>),就随便写写加深下自己的印象. ...

  10. .net测试学习--理解.net测试选项

    1.创建基于测试简单应用程序 (1)启动visual studio(有安装c#的) (2)  选择File|New project (3)创建一个C# project,名字和保存路径自己设定,假设取名 ...