刚开始建这个项目的时候编译器报了很多Link2019的错误。

后来添加了一些lib文件才解决,参考    缺少.lib文件导致的Link2019 解决方案汇总

============================================================================================================================

Dialog::InitDefaultElements()

创建各种Element(元素,组成Control的单元),放到CDXUTElementHolder类型的Dialog::m_DefaultElements中.

 struct DXUTElementHolder
{
UINT nControlType;
UINT iElement; CDXUTElement Element;
};

m_DefaultElements存放的ElementHolder根据所属控件的类型(nControlType)从小到大(0开始)编号

 //-------------------------------------
// CDXUTButton - Button
//-------------------------------------
SetRect( &rcTexture, , , , );
Element.SetTexture( , &rcTexture );
Element.SetFont( );
Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB( , , , );
Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( , , , );
Element.FontColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB( , , , ); // Assign the Element
SetDefaultElement( DXUT_CONTROL_BUTTON, , &Element ); //-------------------------------------
// CDXUTButton - Fill layer
//-------------------------------------
SetRect( &rcTexture, , , , );
Element.SetTexture( , &rcTexture, D3DCOLOR_ARGB( , , , ) );
Element.TextureColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB( , , , );
Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB( , , , );
Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB( , , , ); // Assign the Element
SetDefaultElement( DXUT_CONTROL_BUTTON, , &Element );

这段代码定义了两个Button类型的Element,编号为0和1。

如果继续添加的话编号递增。

添加另一种类型的话,编号重新从零开始。

===================================================================================================================

CDXUTControl::SetElement
 HRESULT CDXUTControl::SetElement( UINT iElement, CDXUTElement* pElement )
{
HRESULT hr = S_OK; if( pElement == NULL )
return E_INVALIDARG; //m_DefaultElements中的元素同类型编号按从小到大的顺序排列
//所以从m_DefaultElements中挑选出来的pElement的编号iElement递增(0,1,2.....)
//某一种控件第一次调用此函数(SetElement)时,控件的m_Elements为空,将编号为0的Element存入,循环退出
// Make certain the array is this large
for( UINT i = m_Elements.GetSize(); i <= iElement; i++ )
{
CDXUTElement* pNewElement = new CDXUTElement();
if( pNewElement == NULL )
return E_OUTOFMEMORY; hr = m_Elements.Add( pNewElement );
if( FAILED( hr ) )
{
SAFE_DELETE( pNewElement );
return hr;
}
} // Update the data
CDXUTElement* pCurElement = m_Elements.GetAt( iElement );
*pCurElement = *pElement; return S_OK;
}

===================================================================================================

Element的定义如下

 class CDXUTElement
{
public:
void SetTexture( UINT iTexture, RECT* prcTexture, D3DCOLOR defaultTextureColor = D3DCOLOR_ARGB( , , ,
) );
void SetFont( UINT iFont, D3DCOLOR defaultFontColor = D3DCOLOR_ARGB( , , ,
), DWORD dwTextFormat = DT_CENTER |
DT_VCENTER ); void Refresh();
  //纹理, 文本字体, 文本格式,
UINT iTexture; // Index of the texture for this Element
UINT iFont; // Index of the font for this Element
DWORD dwTextFormat; // The format argument to DrawText
  // 放纹理的边界矩形
RECT rcTexture; // Bounding rect of this element on the composite texture
  //纹理和文本的Blend颜色, Blend分量用于控制透明度
DXUTBlendColor TextureColor;
DXUTBlendColor FontColor;
};

======================================================================================================

可以使用输入法(Input Method Editor)的IMEEditBox

 //已经定义了g_SampleUI
CDXUTDialog g_SampleUI; // dialog for sample specific controls
g_SampleUI.Init( &g_DialogResourceManager );
g_SampleUI.SetCallback( OnGUIEvent );
// 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", , , , , false, &pIMEEdit ) ) )
{
g_SampleUI.AddControl( pIMEEdit );
pIMEEdit->GetElement( )->iFont = ;
pIMEEdit->GetElement( )->iFont = ;
pIMEEdit->GetElement( )->iFont = ;
pIMEEdit->GetElement( )->TextureColor.Init( D3DCOLOR_ARGB( , , , ) ); // Transparent center
pIMEEdit->SetBorderWidth( );
pIMEEdit->SetTextColor( D3DCOLOR_ARGB( , , , ) );
pIMEEdit->SetCaretColor( D3DCOLOR_ARGB( , , , ) );
pIMEEdit->SetSelectedTextColor( D3DCOLOR_ARGB( , , , ) );
pIMEEdit->SetSelectedBackColor( D3DCOLOR_ARGB( , , , ) );
}

CDXUTIMEEditBox继承自CDXUTEditBox, 定义在DXUTguiIME.h/cpp文件中

包含了静态函数:

static void             InitDefaultElements( CDXUTDialog* pDialog );

负责为该类定义所使用的Element(元素),并通过

HRESULT CDXUTDialog::SetDefaultElement( UINT nControlType, UINT iElement, CDXUTElement* pElement );

添加到所属Dialog的默认元素表(m_DefaultElements)中,  一共9个Element

Please refer to DXUTguiIME.h/cpp  for more details  .

=-=========================================================================================================================

单选列表框                                                     多选列表框

                           

 class CDXUTListBox : public CDXUTControl
{
public:
CDXUTListBox( CDXUTDialog* pDialog = NULL );
virtual ~CDXUTListBox();
.
.
.
.//member function skipped
.
. protected:
RECT m_rcText; // Text rendering bound
RECT m_rcSelection; // Selection box bound
CDXUTScrollBar m_ScrollBar;
int m_nSBWidth;
int m_nBorder;
int m_nMargin;
int m_nTextHeight; // Height of a single line of text
DWORD m_dwStyle; // List box style
int m_nSelected; // Index of the selected item for single selection list box
int m_nSelStart; // Index of the item where selection starts (for handling multi-selection)
bool m_bDrag; // Whether the user is dragging the mouse to select CGrowableArray <DXUTListBoxItem*> m_Items;
};
CDXUTListBox成员里的两个类型
CDXUTScrollBar m_ScrollBar; 滚动条定义如下
 class CDXUTScrollBar : public CDXUTControl
{
public:
CDXUTScrollBar( CDXUTDialog* pDialog = NULL );
virtual ~CDXUTScrollBar();
.
.
. //member functions skipped
.
.
. protected:
// ARROWSTATE indicates the state of the arrow buttons.
// CLEAR No arrow is down.
// CLICKED_UP Up arrow is clicked.
// CLICKED_DOWN Down arrow is clicked.
// HELD_UP Up arrow is held down for sustained period.
// HELD_DOWN Down arrow is held down for sustained period.
enum ARROWSTATE
{
CLEAR,
CLICKED_UP,
CLICKED_DOWN,
HELD_UP,
HELD_DOWN
}; void UpdateThumbRect();
void Cap(); // Clips position at boundaries. Ensures it stays within legal range. bool m_bShowThumb;
bool m_bDrag;
RECT m_rcUpButton;
RECT m_rcDownButton;
RECT m_rcTrack;
RECT m_rcThumb;
int m_nPosition; // Position of the first displayed item
int m_nPageSize; // How many items are displayable in one page
int m_nStart; // First item
int m_nEnd; // The index after the last item
POINT m_LastMouse;// Last mouse position
ARROWSTATE m_Arrow; // State of the arrows
double m_dArrowTS; // Timestamp of last arrow event.
};
CGrowableArray <DXUTListBoxItem*> m_Items  选项的类型如下
1 struct DXUTListBoxItem
2 {
3 WCHAR strText[256];
4 void* pData;
5
6 RECT rcActive;
7 bool bSelected;
8 };
CGrowableArray解析

CustomUI Direct3D9_Sample的更多相关文章

  1. Excel-DNA项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【C#版】

    Excel-DNA项目中的自定义功能区和自定义任务窗格需要用到各种命名空间.添加所需文件,才能实现.后来我发现可以把所有代码都写在Class1.cs这个默认文件中. 大家可以在Visual Studi ...

  2. Excel-DNA项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【VB.Net版】

    Excel-DNA项目中的自定义功能区和自定义任务窗格需要用到各种命名空间.添加所需文件,才能实现.后来我发现可以把所有代码都写在Class1.vb这个默认文件中. 大家可以在Visual Studi ...

  3. VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【C#版】

    VSTO中的自定义功能区和自定义任务窗格需要用到各种命名空间.添加所需文件,才能实现.后来我发现可以把所有代码都写在ThisAddin.cs这个默认文件中. 大家可以在Visual Studio中创建 ...

  4. VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【VB.Net版】

    VSTO中的自定义功能区和自定义任务窗格需要用到各种命名空间.添加所需文件,才能实现.后来我发现可以把所有代码都写在ThisAddin.vb这个默认文件中. 大家可以在Visual Studio中创建 ...

  5. Office customUI中如何动态更新控件标题和图标?

    本例,在Excel右键菜单中创建一个按钮,按钮的标题使用getLabel动态获取,图标使用getImage动态获取. customUI XML代码: <customUI xmlns=" ...

  6. 缺少.lib文件导致的Link2019 解决方案汇总

    环境Vs2015,  Win10 添加lib的方法在末尾 下面的错误都是我在写Direct3D程序中遇到的, 记下来方便查找 4.ws2_32.lib 3.   version.lib _GetFil ...

  7. Xcode8开发iOS10推送通知过程

    iOS10发布后,简书优先开发增加了iOS10的新通知.本文分享整个feature的开发过程遇到的问题. 1.工程配置 Xcode8发生了很大的变化,直接打开原来的工程编译运行,这个时候是获取不到Pu ...

  8. 如何使用.NET开发全版本支持的Outlook插件产品(四)——进阶探讨

    插件项目所有代码都已经上传至 https://github.com/VanPan/TestOutlookAdding 如何定制Ribbon在不同界面的显示 实际使用过程中出现的问题 这个问题的来自十分 ...

  9. 如何使用.NET开发全版本支持的Outlook插件产品(二)——完善插件

    插件项目所有代码都已经上传至 https://github.com/VanPan/TestOutlookAdding 勿在浮砂筑高台--定位错误 在介绍后面的插件开发技术之前,让我们先来看看已经达到的 ...

随机推荐

  1. Linux下Python 文件内容替换脚本

    Linux下Python 文件替换脚本 import sys,os if len(sys.argv)<=4: old_text,new_text = sys.argv[1],sys.argv[2 ...

  2. [COJ2201][KOJ0223][KOJ0250]花园

    [KOJ0223][KOJ0250]花园 试题描述 小奇的花园有n个温室,标号为1到n,温室以及以及温室间的双向道路形成一棵树. 每个温室都种植着一种花,随着季节的变换,温室里的花的种类也在不断发生着 ...

  3. 将本地项目提交到coding上托管

    1:   注册coding并新建项目test2:在终端 cd 到要提交的项目  使用git init创建.git文件夹3:使用git pull  <项目地址>https的那个4:git a ...

  4. Spring框架学习(二)

    一.Spring IOC参数值注入 1.注入基本值 1.1)<value></value>元素可以通过字符串指定属性或构造参数的值.容器将字符串从java.lang.Strin ...

  5. JavaBean的用法

    JavaBean是一个可重复使用的软件组件,是用Java语言编写的.遵循一定标准的类. JavaBean是Java Web的重要组件,它封装了数据和操作的功能类,供JSP和Servlet调用,完成数据 ...

  6. DevExpress 关于alertControl 图片显示

    private void button1_Click(object sender, EventArgs e) { AlertInfo info = new AlertInfo("Captio ...

  7. 关于imageOrientation

    用相机拍出来的照片都含有EXIF信息,UIImage的imageOrientation属性指的就是EXIF中的orientation信息.如果我们忽略orientation信心,而直接对照片进行想速处 ...

  8. SAP 订单状态跟踪

    *&--------------------------------------------------------------------- *& Program name:  *& ...

  9. Transaction事务传播行为种类PROPAGATION_REQUIRED

    事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 表1事务传播行为类型 事务传 ...

  10. JSP复习整理(三)基本语法续

    查看注册后的信息: TestBean.java package com.hai.xaio.cn; public class TestBean { public String userName; pub ...