D3D9 Samples(15)--CustomUI

2024-06-16 22:58
文章标签 15 samples d3d9 customui

本文主要是介绍D3D9 Samples(15)--CustomUI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 

 

D3D9 Samples(15)--CustomUI

 

 

 

       打开CustomUI项目。编译运行:

 

 

        这个例子展示了DXUT提供的GUI系统。在dialog中展示各种控件的用法。

 

 

1. 对话框CDXUTDialog

 

1.1 初始化

 

InitApp

g_SampleUI.Init( &g_DialogResourceManager );

CDXUTDialog的初始化需要对话框资源管理对象g_DialogResourceManager。用于管理所需的资源。

 

g_SampleUI.SetCallback(OnGUIEvent );

设置控件消息响应函数,用于响应控件逻辑。

 

g_SampleUI.SetFont( 1,L"Comic Sans MS", 24,FW_NORMAL );

为Dialog添加第一种字体。

 

g_SampleUI.SetFont( 2,L"Courier New", 16,FW_NORMAL );

为Dialog添加第二种字体。

 

 

1.2 在窗口大小变化等情况下对Dialog的位置和大小做响应的调整

 

OnResetDevice

g_SampleUI.SetLocation( 0, 0 );

重置对话框位置。

 

g_SampleUI.SetSize(pBackBufferSurfaceDesc->Width,pBackBufferSurfaceDesc->Height );

重设对话框大小。

 

 

1.3 渲染

 

OnFrameRender

g_SampleUI.OnRender(fElapsedTime )

在这里绘制对话框。

 

 

1.4 接收消息

 

MsgProc

g_SampleUI.MsgProc(hWnd, uMsg,wParam, lParam );

在这里接收窗口消息,并在CDXUTDialog内部转化成控件消息,而触发OnGUIEvent。

 

 

 

2. 静态控件(CDXUTStatic)

 

2.1 初始化

 

InitApp

g_SampleUI.AddStatic(IDC_STATIC, L"This is a static control.", 0, 0, 200, 30 );

g_SampleUI.AddStatic(IDC_OUTPUT,

                          L"This static control provides feedback for your action. It will change as you interact with the UI controls.", 20, 50, 620, 300 );

在对话框上添加两个静态控件。

 

g_SampleUI.GetStatic(IDC_OUTPUT )->SetTextColor(D3DCOLOR_ARGB( 255, 255, 0, 0 ) );

g_SampleUI.GetStatic(IDC_STATIC )->SetTextColor(D3DCOLOR_ARGB( 255, 0, 255, 0 ) );

给两个静态控件分别设置不同的文字颜色。

g_SampleUI.GetControl(IDC_OUTPUT )->GetElement( 0 )->dwTextFormat =DT_LEFT | DT_TOP |DT_WORDBREAK;

g_SampleUI.GetControl(IDC_OUTPUT )->GetElement( 0 )->iFont = 2;

g_SampleUI.GetControl(IDC_STATIC )->GetElement( 0 )->dwTextFormat =DT_CENTER | DT_VCENTER |DT_WORDBREAK;

改变静态控件元素CDXUTElement的值,可以改变四种值:

UINT iTexture; 选择一个已有贴图。

UINT iFont; 选择一个已有字体。

DWORD dwTextFormat; 文字排版,使用和GDI中DrawText 函数的uFormat参数相同的可选值。

RECT rcTexture; 贴图区域

DXUTBlendColor TextureColor; 和贴图的混合色。包括6种状态,如Disable、Focus、Pressed等,主要实现在不同状态下控件的外观变化。

DXUTBlendColor FontColor; 和文字的混合色。

 

 

2.2 在窗口大小变化等情况下对Dialog的位置和大小做响应的调整

 

OnResetDevice

g_SampleUI.GetControl(IDC_STATIC )->SetSize(pBackBufferSurfaceDesc->Width,pBackBufferSurfaceDesc->Height * 6 /10 );

g_SampleUI.GetControl(IDC_OUTPUT )->SetSize(pBackBufferSurfaceDesc->Width - 170,pBackBufferSurfaceDesc->Height /4 );

 

 

 

3. 按钮控件(CDXUTButton)

 

3.1 初始化

 

InitApp

g_SampleUI.AddButton(IDC_ENABLEIME, L"Enable (I)ME", 30, 390, 80, 35,L'I' );

g_SampleUI.AddButton(IDC_DISABLEIME, L"Disable I(M)E", 30, 430, 80, 35,L'M' );

在对话框中添加两个按钮控件。

 

 

3.2 在窗口大小变化等情况下对Dialog的位置和大小做响应的调整

 

OnResetDevice

g_SampleUI.GetControl(IDC_ENABLEIME )->SetLocation( 130,pBackBufferSurfaceDesc->Height - 80 );

g_SampleUI.GetControl(IDC_DISABLEIME )->SetLocation( 220,pBackBufferSurfaceDesc->Height - 80 );

 

 

3.3 响应控件消息

 

OnGUIEvent

case IDC_ENABLEIME:

case IDC_DISABLEIME:

这里只能响应按钮按下消息。

 

 

 

4. 编辑控件(CDXUTEditBox)

 

4.1 初始化

 

InitApp

g_SampleUI.AddEditBox(IDC_EDITBOX1, L"Edit control with default styles. Type text here and press Enter", 20, 440, 600, 32 );

在对话框中添加编辑控件。

 

 

4.2 在窗口大小变化等情况下对Dialog的位置和大小做响应的调整

 

OnResetDevice

g_SampleUI.GetControl(IDC_EDITBOX1 )->SetLocation( 20,pBackBufferSurfaceDesc->Height - 230 );

g_SampleUI.GetControl(IDC_EDITBOX1 )->SetSize(pBackBufferSurfaceDesc->Width - 40, 32 );

 

 

4.3 响应控件消息

 

OnGUIEvent

caseIDC_EDITBOX1:

case IDC_EDITBOX2:

可以响应两种消息:一是EVENT_EDITBOX_CHANGE,一旦文字改变即响应;二是EVENT_EDITBOX_STRING,一旦在编辑框中回车即响应。

 

 

 

5. IME编辑控件(CDXUTIMEEditBox)

 

5.1 初始化

 

InitApp

CDXUTIMEEditBox*pIMEEdit;

CDXUTIMEEditBox::InitDefaultElements( &g_SampleUI );

为所有CDXUTIMEEditBox控件初始化默认的元素设置。

 

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 ) ) )

和其他控件不同,要先检查能否创建这个控件,然后再添加到对话框中。创建一个IME编辑控件并返回CDXUTIMEEditBox指针。

 

{

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控件加入到对话框中,并设置字体、颜色等属性。

}

 

 

5.2 其他和CDXUTEditBox相同

 

 

 

6. 滑块控件(CDXUTSlider)

 

6.1 初始化

 

InitApp

g_SampleUI.AddSlider(IDC_SLIDER, 200, 450, 200, 24, 0, 100, 50, false );

在对话框中添加一个滑块控件。

 

 

6.2 在窗口大小变化等情况下对Dialog的位置和大小做响应的调整

 

OnResetDevice

g_SampleUI.GetControl(IDC_SLIDER )->SetLocation( 10,pBackBufferSurfaceDesc->Height - 140 );

 

 

6.3 响应控件消息

 

OnGUIEvent

case IDC_SLIDER:

当滑块被拖动或点击改变滑块位置时响应。

 

 

 

7. 检查框控件(CDXUTCheckBox)

 

7.1 初始化

 

InitApp

g_SampleUI.AddCheckBox(IDC_CHECKBOX,

L"This is a checkbox with hotkey. Press 'C' to toggle the check state.", 170, 450, 350, 24,false, L'C',false );

g_SampleUI.AddCheckBox(IDC_CLEAREDIT,

L"This checkbox controls whether edit control text is cleared when Enter is pressed. (T)",

170, 460, 450, 24, false,L'T', false );

在对话框中添加两个检查框控件。

 

 

7.2 在窗口大小变化等情况下对Dialog的位置和大小做响应的调整

 

OnResetDevice

g_SampleUI.GetControl(IDC_COMBOBOX )->SetLocation( 20,pBackBufferSurfaceDesc->Height - 180 );

设置位置。

 

 

7.3 响应控件消息

 

OnGUIEvent

case IDC_COMBOBOX:

点击时响应。

 

 

 

8. 单选按钮控件(CDXUTRadioButton)

 

8.1 初始化

 

InitApp

g_SampleUI.AddRadioButton(IDC_RADIO1A, 1, L"Radio group 1 Amy (1)", 0, 50, 220, 24,false, L'1' );

g_SampleUI.AddRadioButton(IDC_RADIO1B, 1, L"Radio group 1 Brian (2)", 0, 50, 220, 24,false, L'2' );

g_SampleUI.AddRadioButton(IDC_RADIO1C, 1, L"Radio group 1 Clark (3)", 0, 50, 220, 24,false, L'3' );

 

g_SampleUI.AddRadioButton(IDC_RADIO2A, 2, L"Single (4)", 0, 50, 90, 24,false, L'4' );

g_SampleUI.AddRadioButton(IDC_RADIO2B, 2, L"Double (5)", 0, 50, 90, 24,false, L'5' );

g_SampleUI.AddRadioButton(IDC_RADIO2C, 2, L"Triple (6)", 0, 50, 90, 24,false, L'6' );

 

添加两组单选按钮,第二个形参nButtonGroup作为组号。

 

 

8.2 在窗口大小变化等情况下对Dialog的位置和大小做响应的调整

 

OnResetDevice

g_SampleUI.GetControl(IDC_RADIO1A )->SetLocation(pBackBufferSurfaceDesc->Width - 160, 100 );

设置位置。

 

 

8.3 响应控件消息

 

OnGUIEvent

caseIDC_RADIO1A:

caseIDC_RADIO1B:

case IDC_RADIO1C:

一组在一起响应。

 

 

 

9. 列表控件(CDXUTListBox)

 

9.1 初始化

 

InitApp

g_SampleUI.AddListBox(IDC_LISTBOX, 30, 400, 200, 150, 0 );

for(int i = 0; i < 15; ++i )

{

WCHARwszText[50];

swprintf_s(wszText, 50, L"Single-selection listbox item %d",i );

g_SampleUI.GetListBox(IDC_LISTBOX )->AddItem(wszText, ( LPVOID )(size_t )i );

}

在对话框中添加一个列表控件,并加入15个条目(Item)。

 

 

9.2 在窗口大小变化等情况下对Dialog的位置和大小做响应的调整

 

OnResetDevice

g_SampleUI.GetControl(IDC_LISTBOX )->SetLocation(pBackBufferSurfaceDesc->Width - 400,

pBackBufferSurfaceDesc->Height - 180 );

g_SampleUI.GetControl(IDC_LISTBOX )->SetSize( 190, 96 );

重置控件的位置和大小。

 

 

9.3 响应控件消息

 

OnGUIEvent

case IDC_LISTBOX:

能接收两种消息:一是点选Item消息EVENT_LISTBOX_SELECTION;二是双击Item消息EVENT_LISTBOX_ITEM_DBLCLK

 

 

 

 

 

这篇关于D3D9 Samples(15)--CustomUI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067789

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

15 组件的切换和对组件的data的使用

划重点 a 标签的使用事件修饰符组件的定义组件的切换:登录 / 注册 泡椒鱼头 :微辣 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-

java基础总结15-面向对象11(抽象类)

下面通过一下的小程序深入理解抽象类 因此在类Animal里面只需要定义这个enjoy()方法就可以了,使用abstract关键字把enjoy()方法定义成一个抽象方法,定义如下:public abstract void enjoy();   从某种意义上来说,抽象方法就是被用来重写的,所以在父类声明的抽象方法一定要在子类里面重写。如果真的不想在子类里面重写这个方法,那么可以再在子类里

15年亚洲区长春站赛后总结

刷题打比赛的日子才叫青春   今年和ljy、lsj组队去长春站。这支队伍是我很放心的一支队伍,ljy可以做数学题和复杂思维题,lsj思维缜密可以和ljy对思路,我负责手速狗+模板暴力流。 有了去年两场亚洲区的经验,心态有了很大变化,也深知赛场上风云莫测,不至最后一分钟,仍未分胜负。开场的F题卡了很久,WA了很多发,这种复杂思维题丢给ljy和lsj搞了。我去开L题,给LJY说完题意后,他给

找不同-第15届蓝桥省赛Scratch初级组真题第4题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第183讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。 第15届蓝桥杯省赛已于2024年8月24日落下帷幕,编程题一共有5题,分别如下: 猪八戒落地 游乐场 画西瓜 找不同 消

PHP 验证身份号码 包括15位18位

查了很多资料 发现网上身份证15位的验证并不是那么严谨  今天研究了一下  代码如下 <?phpfunction check_id_card($num){//老身份证长度15位,新身份证长度18位$length = strlen($num);if ($length == 15) { //如果是15位身份证//15位身份证没有字母if (!is_numeric($num)) {return fa

CSS学习15--元素的显示与隐藏

元素的显示与隐藏 前言一、display显示二、visibility可见性三、overflow溢出 前言 CCS中有三个显示和隐藏的单词比较常见,分别是display visibility和overflow。 他们的主要目的是让一个元素在页面中消失,但是不在文档源码中删除。最常见的是网站广告。 一、display显示 display设置或者检索对象是否以及如何显示。使用更多

15个多线程相关的面试题

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! By 大数据技术与架构 场景描述:Java并发编程问题是面试过程中很容易遇到的问题,提前准备是解决问题的最好办法,将试题总结起来,时常查看会有奇效。 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,