使用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. jvm--1.class文件结构

    1.字节码(1)bytecode是构成平台无关性的基石 (2)当jvm发展到1.7-1.8的时候,jvm设计者通过,JSR-292,基本可以让其他语言运行在jvm上面. 如,Clojure , Gro ...

  2. linux学习第一天,常用命令一

    linux系统基本原则:1.由自由的单一的小程序组成,组合小程序完成负责的任务.2.一切皆文件,3.尽量避免捕获用户接口,也就是说用户输入命令后就能直接返回结果.4.配置文件保存为纯文本格式. GUI ...

  3. 页面解耦—— 统跳协议和Rewrite引擎

    原文: http://pingguohe.net/2015/11/24/Navigator-and-Rewrite.html 解耦神器 —— 统跳协议和Rewrite引擎 Nov 24, 2015 • ...

  4. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  5. SQL SERVER 2008 获取表字段的类型

    SELECT * FROM ( select a.name TABLENAME,b.name FIELDNAME,c.name FIELDTYPE,c.length FIELDLENGTH from ...

  6. Linux远程复制命令SCP

    scp test.json savo@yourdomain.com:/usr/share/nginx/test # 以上命令需配置好ssh

  7. infoq 微信后台存储架构

    infoq 上微信后台存储架构 视频很是值得认真一听,大概内容摘要如下: 主要内容:同城分布式强一致,园区级容灾KV存储系统 - sync 序列号发生器      移动互联网场景下,频繁掉线重连,使用 ...

  8. How to create a Python dictionary with double quotes as default quote format?

    couples = [ ['jack', 'ilena'], ['arun', 'maya'], ['hari', 'aradhana'], ['bill', 'samantha']] pairs = ...

  9. 触发bfd 的条件

    满足下列条件之一就可触发BFC [1]根元素,即HTML元素 [2]float的值不为none [3]overflow的值不为visible [4]display的值为inline-block.tab ...

  10. C# DataSet装换为泛型集合

    1.DataSet装换为泛型集合(注意T实体的属性其字段类型与dataset字段类型一一对应) #region DataSet装换为泛型集合 /// <summary> /// 利用反射和 ...