DirectX9 SDK Samples(12) CustomUI Sample

DirectX9.0bSDK(包含:DirectShow)环境搭建 一.简介 DirectShow是微软公司提供的一套在Windows平台进行流媒体处理的包,9.0b之前与DirectX在一起,后分开包含在WindowsSDK中! DirectShow是基于COM组件构建思想和Filter-Graph组织模式的一种流媒体处理库! //注解:本环境采用DirectShow9.0bSDK,本机环境Win10; 二.下载 DirectX9.0b之前的版本都是完整的,包含DirectShow,后续版本包含9.0c都不包括DirectShow,所以我们使用这个 阅读详情

这一次的例子是关于DXUT的UI。下面先翻译文档中的比较重要的说明。

这个例子开始时定义了两个CDXUTDialog对象:g_HUD和g_SampleUI。一个CDXUTDialog是一个装入了一个或多个控件(按钮等)的容器。对话框(CDXUTDialog)位于程序和控件之间。因此程序可以传递信息和渲染命令给对话框,而对话框保证它的所有控件能够正确收到信息和得到渲染。控件是设计成要和对话框一起使用,不可以单独使用。程序可以不限于一个对话框,他们可以一次用多个,正如例子所做的(两个)。

为了初始化对话框,这个例子第一件事就是使用SetCallback方法来设置事件回调函数。当用户和UI控制对象交互的时候,这些控制对象可以通知程序重要的事件,那么程序就可以根据情况作出反应。这一次程序也初始化了它所需要的额外的字体,这是通过SetFont来完成的。

例子下一步需要做的就是创建所需的控件。这是通过调用AddXXX方法来实现的,例如AddButton。在这个例子中,g_HUD包括了4个按钮。在控件添加完毕以后,它的外观可以被修改。在本例中你可以看到被修改过外观的静态控件、组合盒和带有IME功能的编辑框。

接下来,OnResetDevice函数,包括了几个对对话框和控件的SetSize和SetLocation方法。这是因为当用户改变窗口大小的时候,一些对话框和控件需要改变大小和位置。

为了渲染UI,本例子调用两个对话框的OnRender函数,对话框会渲染所包含的控件。

最后所需的一步就是向控件传递消息。在MsgProc函数中,例子调用了对话框的MsgProc方法来向下传递消息,这个方法需要返回TRUE来表示消息已经被处理。

以上就是文档中我认为比较重要的部分。接下来还是阅读代码。


首先让我们来看看相关的全局变量。

CDXUTDialogResourceManager  g_DialogResourceManager; // manager for shared resources of dialogs
CD3DSettingsDlg             g_SettingsDlg;          // Device settings dialog
CDXUTDialog                 g_HUD;                  // dialog for standard controls
CDXUTDialog                 g_SampleUI;             // dialog for sample specific controls

对话框资源管理器= =暂时不知道有什么用,下面应该会用到。设置对话框就不说了,默认的一个对话框。下面两个就是上文提到的对话框。重要的是SampleUI,这个对话框每个例子都不同,专门来放置跟例子有关的UI。

//--------------------------------------------------------------------------------------
// UI control IDs
//--------------------------------------------------------------------------------------
#define IDC_TOGGLEFULLSCREEN    1
#define IDC_TOGGLEREF           3
#define IDC_CHANGEDEVICE        4
#define IDC_EDITBOX1            5
#define IDC_EDITBOX2            6
#define IDC_ENABLEIME           7
#define IDC_DISABLEIME          8
#define IDC_COMBOBOX            9
#define IDC_STATIC              10
#define IDC_OUTPUT              12
#define IDC_SLIDER              13
#define IDC_CHECKBOX            14
#define IDC_CLEAREDIT           15
#define IDC_RADIO1A             16
#define IDC_RADIO1B             17
#define IDC_RADIO1C             18
#define IDC_RADIO2A             19
#define IDC_RADIO2B             20
#define IDC_RADIO2C             21
#define IDC_LISTBOX             22
#define IDC_LISTBOXM            23

这大家都懂的= =

    g_HUD.Init( &g_DialogResourceManager );
    g_SampleUI.Init( &g_DialogResourceManager );

    g_HUD.SetCallback( OnGUIEvent ); int iY = 10;
    g_HUD.AddButton( IDC_TOGGLEFULLSCREEN, L"Toggle full screen", 35, iY, 125, 22 );
    g_HUD.AddButton( IDC_TOGGLEREF, L"Toggle REF (F3)", 35, iY += 24, 125, 22 );
    g_HUD.AddButton( IDC_CHANGEDEVICE, L"Change device (F2)", 35, iY += 24, 125, 22, VK_F2 );
初始化对话框并且加入控件,省略了很多代码,因为控件实在太多了

    // IME-enabled edit box
    CDXUTIMEEditBox* pIMEEdit;
    CDXUTIMEEditBox::InitDefaultElements( &g_SampleUI );
    if( SUCCEEDED( CDXUTIMEEditBox::CreateIMEEditBox( &g_SampleUI, IDC_EDITBOX2,
                                                      L"IME-capable edit control with custom styles. Type and press Enter", 20, 390, 600, 45, false, &pIMEEdit ) ) )
    {
        g_SampleUI.AddControl( pIMEEdit );
        pIMEEdit->GetElement( 0 )->iFont = 1;
        pIMEEdit->GetElement( 1 )->iFont = 1;
        pIMEEdit->GetElement( 9 )->iFont = 1;
        pIMEEdit->GetElement( 0 )->TextureColor.Init( D3DCOLOR_ARGB( 128, 255, 255, 255 ) );  // Transparent center
        pIMEEdit->SetBorderWidth( 7 );
        pIMEEdit->SetTextColor( D3DCOLOR_ARGB( 255, 64, 64, 64 ) );
        pIMEEdit->SetCaretColor( D3DCOLOR_ARGB( 255, 64, 64, 64 ) );
        pIMEEdit->SetSelectedTextColor( D3DCOLOR_ARGB( 255, 255, 255, 255 ) );
        pIMEEdit->SetSelectedBackColor( D3DCOLOR_ARGB( 255, 40, 72, 72 ) );
    }
上面是IME编辑框,可以看到代码中对外观进行了一定改变。


2

OnResetDevice函数

    g_HUD.SetLocation( pBackBufferSurfaceDesc->Width - 170, 0 );
    g_HUD.SetSize( 170, 170 );
    g_SampleUI.SetLocation( 0, 0 );
    g_SampleUI.SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height );

    g_SampleUI.GetControl( IDC_STATIC )->SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height * 6 /
                                                  10 );
    g_SampleUI.GetControl( IDC_OUTPUT )->SetSize( pBackBufferSurfaceDesc->Width - 170, pBackBufferSurfaceDesc->Height /
                                                  4 );
    g_SampleUI.GetControl( IDC_EDITBOX1 )->SetLocation( 20, pBackBufferSurfaceDesc->Height - 230 );
    g_SampleUI.GetControl( IDC_EDITBOX1 )->SetSize( pBackBufferSurfaceDesc->Width - 40, 32 );
设置对话框和控件的大小和位置。

3

MsgProc函数

    // Always allow dialog resource manager calls to handle global messages
    // so GUI state is updated correctly
    *pbNoFurtherProcessing = CDXUTIMEEditBox::StaticMsgProc( hWnd, uMsg, wParam, lParam );
    if( *pbNoFurtherProcessing )
        return 0;
    *pbNoFurtherProcessing = g_DialogResourceManager.MsgProc( hWnd, uMsg, wParam, lParam );
    if( *pbNoFurtherProcessing )
        return 0;
先让资源管理器和IME编辑框处理消息。

    *pbNoFurtherProcessing = g_HUD.MsgProc( hWnd, uMsg, wParam, lParam );
    if( *pbNoFurtherProcessing )
        return 0;
    *pbNoFurtherProcessing = g_SampleUI.MsgProc( hWnd, uMsg, wParam, lParam );
    if( *pbNoFurtherProcessing )
        return 0;
对话框接着处理。可以看到函数返回一个说明是否需要继续处理的变量值。

不过实际上对话框的MsgProc函数是由DXUT提供的,我们不应该更改。我们需要更改的是上面设定的回调函数。在这个例子中,两个对话框都对应OnGUIEvent函数。


4

OnGUIEvent函数

    switch( nControlID )
    {
        case IDC_TOGGLEFULLSCREEN:
            DXUTToggleFullScreen(); break;
        case IDC_TOGGLEREF:
            DXUTToggleREF(); break;
        case IDC_CHANGEDEVICE:
            g_SettingsDlg.SetActive( !g_SettingsDlg.IsActive() ); break;
可以看到,就是一大段switch代码。根据ID执行代码。

《DirectX 9.0 3D游戏开发编程基础》-第一篇-VS2010下安装配置DirectX9 runtime和SDK 在编写DirectX 9 程序之前首先要安装DirectX9 runtime和Direct9 SDK 一、DirectX9 下载 可以到官网下载DirectX9 runtime和Direct9 SDK(Software Development Kit) 下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=6812 这个下 阅读详情

相关推荐

【DirectX 9.0c入门教程】之一 开发环境搭建:安装vs2008 sp1和DirectX SDK

本系列文章由@胡子长长了出品,转载请注明出处。   文章链接: http://blog.youkuaiyun.com/hzzcle/article/details/49717695 作者:胡子长长了    微博:http://weibo.com/hzzcle 一、安装VS2008 SP1

【胡子长长了】C++ Directx Opengl Ogre Shader专研 2303

directx 9.0c sdk api介绍

如题:

smilestone322的专栏 2499

DirectX9 SDK 下载、安装、VC++开发环境配置、跑通第一个例子

一 可在 http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exe 下载   也可在我的网盘下载: http://pan.baidu.com/s/1pJmMLHh   双击DXSDK_Feb10.exe进行安装,   协议,

bcbobo21cn的专栏 1万+

【免费下载】 DirectX9 SDK 下载、安装与VC++开发环境配置指南

DirectX9 SDK 下载、安装与VC++开发环境配置指南 【下载地址】DirectX9SDK下载安装与VC开发环境配置指南分享 DirectX9 SDK 下载、安装与VC++开发环境配置指南本文详细介绍了如何下载、安装DirectX9 SDK,并配置VC++开发环境,以便顺利跑通第一个DirectX9程序 ...

gitblog_06598的博客 1367

DirectX_9.0_SDK配置编译环境

DirectX_9.0_SDK配置编译环境

DirectX 9 SDK 9.0 Download DirectX 9 SDK 下载

DirectX SD9.0K包含了开发尖端多媒体应用软件不可或缺的开发工具,以及runtime、headers及程序库、范例执行文件、文件、DirectX工具、并且同时支援C++ 以及 Visual Basic开发软件.发现很多人都在找DirectX 8,那么只有一个想法想在VB.NET中引用,这样的话可以使用DirectX 9 同样支持Visual Basic.net

D3D9 Samples(15)--CustomUI

D3D9 Samples(15)--CustomUI              打开CustomUI项目。编译运行:             这个例子展示了DXUT提供的GUI系统。在dialog中展示各种控件的用法。     1. 对话框CDXUTDialog   1.1 初始化   InitApp g_SampleUI.Init( &g_DialogRes

TechTiger的博客 1999

DirectX 9.0 SDK 免安装板

DirectX 9.0 SDK直接使用,免下载巨大的安装包,包括Include和lib

DirectX 9.0 SDK安装

VC6.0+DirectX 9.0 SDK Update (Summer 2004) 下载后安装到根目录。 编译:Samples\C++\DirectShow\BaseClasses的项目,得到开发用的类库,strmbasd.lib和strmbase.lib。 设置:Tools->Option…->Directories Include files(注意顺序)   Dire...

weixin_30307267的博客 528

DirectX SDK 9

DirectX SDK 9 DirectX SDK 9 DirectX SDK 9 DirectX SDK 9

浮点数运算的陷阱与启示:FP16加法器/乘法器开发中的常见误区

本文深入探讨FP16加法器和乘法器开发中的常见误区,包括FP16格式解析、阶码对齐陷阱、尾数运算风险及规格化处理。通过Verilog实战代码展示防御性编程技巧,帮助开发者避免边界条件处理和异常状态管理中的错误,提升硬件设计的可靠性和效率。

dell8的博客 249

DirectX9SDK安装包及DirectShowSDK资源:赋能多媒体与游戏开发

DirectX9SDK安装包及DirectShowSDK资源:赋能多媒体与游戏开发 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在多媒体和游戏开发领域,DirectX 9 SDK无疑是一个不可或缺的工具包。它为开发者提供了丰富的API,以实现高质量的多媒体体验和游戏性能。今天,我们将介绍一个开源项目——DirectX 9 SDK 安装包及DirectShow SDK...

gitblog_06756的博客 427

Python自动化办公:5分钟搞定钉钉群文件自动发送(附完整代码)

本文详细介绍了如何利用Python实现钉钉群文件的自动化发送。通过结合钉钉企业内部应用与群机器人API,构建了包含智能令牌管理、文件上传与消息发送的完整工作流。文章提供了可直接复用的完整代码,并分享了定时任务、目录监听等进阶实战方案,帮助职场人士高效解决重复性文件发送难题,实现办公自动化。

7z8x2c4v6b9的博客 320

DirectX9 SDK 完整版资源介绍

DirectX9 SDK 完整版资源介绍 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供的是DirectX9 SDK的完整版资源,包含了全部的开发工具和文件,以及SDK的详细说明。DirectX9 SDK是一套用于开发DirectX9应用程序的软件开发工具包,包含了运行库、文档、示例代码等丰富内容,是游戏开发者和图形程序员的重要资源。 内容概述 开发工具:包含...

gitblog_06774的博客 444

华为设备OSPF配置全流程:从邻居关系到区域划分实战指南

本文详细介绍了华为设备上OSPF协议的完整配置流程,从基础概念到实战操作,包括邻居关系建立、多区域划分及高级特性配置。特别针对华为设备的特有语法和验证命令进行了重点讲解,帮助网络工程师快速掌握OSPF在华为环境中的部署与优化技巧,提升网络配置效率。

weixin_29299807的博客 251

手把手教你复现IEEE 2025高光谱图像盲超分算法DBSR(附开源代码与避坑指南)

本文详细介绍了如何从零复现IEEE 2025高光谱图像盲超分算法DBSR,包括环境配置、数据预处理、核心模块解析、训练策略及常见问题解决方案。特别针对开源代码中的关键步骤和潜在问题提供了实用指南,帮助研究者和开发者高效实现Deep blind super-resolution技术,适用于遥感、医疗等领域的图像增强应用。

weixin_42524708的博客 411

开启DirectX9开发之旅:一站式指南

开启DirectX9开发之旅:一站式指南 【下载地址】DirectX9SDK下载安装与VC开发环境配置指南分享 DirectX9 SDK 下载、安装与VC++开发环境配置指南本文详细介绍了如何下载、安装DirectX9 SDK,并配置VC++开发环境,以便顺利跑通第一个DirectX9程序 ...

gitblog_06593的博客 691

软件缺陷(定义+表现形式+优先级+信息+产生原因),看完这篇文章就懂了

软件缺陷软件缺陷的定义软件缺陷的表现形式软件缺陷产生的原因软件缺陷的根源软件缺陷的费用软件缺陷的信息 软件缺陷的定义 IEEE 1983 of IEEE Stardard 729中软件缺陷做了一个标准的定义: 从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。 因此软件缺陷就是软件产品中所存在的问题,最终表现为用户所需要的功能没有完全实现,没有满足用户的需求。 缺陷不是bug,缺陷包含bug,缺陷的范围更大。 软件缺陷

qq_40676418的博客 1万+

下载DirectX 9 SDK开发包

这个现在还是比较难搞到的,可以到微软官网上去下载。自从DirectX 9.0c sdk后,DirectShow SDK不再包含在DirectX SDK中,而是以Extras的形式发布,后来集成了一部分SDK到Windows SDK中,也就是说后来的环境(比如vs2005、vs2008环境下)比较难配置,极有可能不稳定,产生这样那样的错误。初学者可能看到如此难搞的环境配置就望而却步了,不利于学习。所

PLUTO AREA 3824

PX4无人机实战:手把手教你用MAVROS实现Offboard模式(附避坑指南)

本文提供了一份详尽的PX4无人机Offboard模式实战指南,重点解析了如何通过MAVROS实现从仿真到实机的控制。内容涵盖硬件连接、串口权限设置、MAVROS配置、核心代码编写以及实机操作全流程,并附有详细的避坑指南和故障排查手册,帮助开发者快速掌握ROS与PX4飞控的集成开发。

weixin_29172201的博客 266

代码解读:使用Stable Diffusion完成相似图像生成任务

作为内容生产重要的一部分,生成相似图像是一项有意义的工作,例如很多内容创作分享平台单纯依赖用户贡献的图片已经不够了,最省力的方法就是利用已有的图片生成相似的图片作为补充。这篇博客详细解读基于Stable Diffusion生成相似图片的原理和代码。

沉迷单车的追风少年 1392

DirectX 9的安装与配置

最近刚开始学Direct3D,首先要安装DirectX并配置环境,主要包括三个步骤: 一、安装DirectX SDK 二、配置环境 三、链接.lib文件,运行示例 四、Error Code s1023的解决方案 一、安装DirectX SDK 首先登陆Microsoft Download Center下载最新版本的DirectX SDK: https://www.microso

Fitzzhang 8825

连续相位调制通信调制方法的载波同步和定时同步研究及MATLAB仿真

本文将探讨CPM调制方法中的载波同步和定时同步问题,并提供MATLAB仿真源代码。本文讨论了连续相位调制通信中的载波同步和定时同步问题,并提供了相应的MATLAB仿真源代码。通过适当的载波同步和定时同步方法,可以实现对CPM信号的准确解调。希望本文对您理解连续相位调制通信调制方法的载波同步和定时同步问题有所帮助,同时也为您提供了一些MATLAB仿真实现的思路和示例代码。在CPM系统中,载波同步的主要任务是估计接收信号的载波频率偏移和相位偏移。在CPM系统中,常用的定时同步方法是基于自相关函数的峰值检测。

2301_79331230的博客 692

VS2022 + DirectX9 开发环境搭建

本文介绍了在VS2022环境下搭建DirectX 9开发环境的完整流程。主要内容包括: 开发环境准备:Win10系统 + VS2022 + DirectX SDK (June 2010)组合 详细安装步骤: VS2022工作负荷选择"使用C++的桌面开发" DirectX SDK安装过程及常见问题处理 环境配置: 设置DXSDK_DIR环境变量 介绍SDK目录结构(帮助文档、头文件、库文件等) 验证示例: 创建C++空项目 提供DirectX9简单窗口程序框架代码 该教程适合需要维护或学

蓝创精英团队 876

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

DirectX9.0 SDK 安装过程

DirectX9.0 SDK 开发包版本较多,DirectX9.0b 版本之前的SDK 包基本是完整的, DirectX9.0c 版本的SDK 包大多是升级包,里面并未附带DirectShow 部分,故不能 单独使用。 微软DirectX9.0b SDK 完整包的下载地址: http://download.microsoft.com/download/b/6/a/b6ab32f3-39e8-409...

weixin_30565327的博客 455

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

DXUT控件

  查看文章写新文章 DXUT控件2009-02-01 15:191:DirectX9c版本以上才支持DXUT控件2:与windows控件非常 类似,但是它们的内部实现和windows普通控件完全不同,其底层不涉及任何窗口句柄和Windows控件。DXUT控件的渲染也是由D3D完成的,适用于窗口

API&市场营销 1442

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: DirectX9 SDK Samples(11) CompiledEffect Sample
下一篇: DirectX9 SDK Samples(13) Pick
HowdChow
博客等级 码龄15年 10粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值