在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文件。。。
在DirectX9中使用DXUT定制按钮来控制模型旋转的问题的更多相关文章
- 在Activity中响应ListView内部按钮的点击事件
最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在A ...
- ASP.NET MVC中实现多个按钮提交的几种方法
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
- easyui中Tab的tools按钮刷新当前tab
easyui中Tab的tools按钮刷新当前tab 点击刷新按钮,刷新当前Tab选项卡. $('#index_tabs').tabs({ fit : true, border : false, too ...
- css中文本框与按钮对不齐解决方案
我们先对对input标记设定样式,代码如下: html 代码 <form> <input type=”text” name=”text1” id=”text1” /> < ...
- GridView控件中插入自定义删除按钮并弹出确认框
GridView控件中插入自定义删除按钮,要实现这个功能其实有多种方法,这里先记下我使用的方法,以后再添加其他方法. 一.实现步骤 1.在GridView中添加模板列(TemplateField). ...
- 在Activity中响应ListView内部按钮的点击事件的两种方法!!!
在Activity中响应ListView内部按钮的点击事件的两种方法 转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题: ...
- element-- 修改MessageBox 弹框 中确定和取消按钮顺序
需求:修改弹框中的 取消/确定按钮顺序,及头部和底部背景颜色; 原ui效果图 需求ui效果图 方法:对取消及确定按钮自定义类名,样式重写
- 在Activity中响应ListView内部按钮的点击事件的两种方法
转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...
- 隐藏 FastAdmin 列表中的拖动排序按钮
隐藏 FastAdmin 列表中的拖动排序按钮 就是以下这个按钮,想先删除不要. 刚开始在 CMS 插件中的栏目中发现没有,以为在哪个位置中,但找到半天的 weigh 都没有找到weigh 的字眼. ...
随机推荐
- FTP下载文件失败
这几天的定时任务下载文件的脚本失败了. 于是手工执行测试,发现报550 Permission denied. Passive mode refused. 意思就是被动模式下,没有权限获取文件. 解决方 ...
- android App使用新浪微博sdk的使用总结
问题1:注册app的key 问题2:在微博开放平台,我的应用中心中,设置应用的基本信息的时候其中有一项,是设置你的应用的签名,签名是需要在安卓设备上安装一个生成签名的app(这个app界面很丑,这点我 ...
- $.extend()和 $.fn.extend()
1 $.extend() jQuery.extend(): Merge the contents of two or moreobjects together into the first ...
- sublime text快捷键
Ctrl+Shift+V:粘贴并格式化Ctrl+D:选择单词,重复可增加选择下一个相同的单词Ctrl+L:选择行,重复可依次增加选择下一行Ctrl+M:跳转到对应括号Ctrl+K+B:开关侧栏Ctrl ...
- Linux less 命令
- less 打开文件后: shift + g 转至文件末尾 g 转至文件开头 搜索字段(/<pattern>)后: n 转至下一个匹配的字段 shift + n 转至上一个匹配的字段 同 ...
- asp:Repeater实例备忘
1.前置部分 <asp:Repeater ID="rptPlanNo" runat="server" OnItemDataBound="rptP ...
- js 数组,字符串,json互相转换
数组转字符串 var arr = [1,2,3,4,'巴德','merge']; var str = arr.join(','); console.log(str); // 1,2,3,4,巴德,me ...
- inq to datatable group by 多列 实现
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.T ...
- 解决自定义Shiro.Realm扩展类不能用注解(@Resource或@Autowire)自动装配的问题
问题产生原因:加载Realm时其他Spring配置文件(xml)尚未加载,导致注入失败. 解决方法:编写一个设置类把注入工作提前完成. package com.xkt.shiro import org ...
- oracle11g interval(numtoyminterval())自动创建表分区
Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不 ...