• <menu id="w2i4a"></menu>
  • logo DevExpress WinForm中文手冊

    DirectX表單


    立即下載DevExpress WinForms

    DirectXForm為所有駐留在其表面上的控件啟用DirectX硬件加速,并支持DirectX渲染模式。

    與啟用DirectX的控件駐留在常規(guī)表單上的標(biāo)準(zhǔn)技術(shù)相比,DirectX表單具有以下優(yōu)點(diǎn):

    • 所有啟用DirectX的控件都在單個(gè)設(shè)備上下文中呈現(xiàn),當(dāng)表單承載大量子控件時(shí),這種技術(shù)提供了明顯更好的性能。
    • 啟用DirectX的控件消耗更少的內(nèi)存。
    • DirectX表單和他們的子控件可以有任何形狀和不透明度,由本地DirectX繪制方法。
    directxForm透明
    • 表單大小調(diào)整計(jì)算更快,大小調(diào)整動(dòng)畫更平滑。
    • 專用的HTML和CSS模板允許您創(chuàng)建自定義表單設(shè)計(jì)。

    局限性

    支持子控件

    DirectX表單無法呈現(xiàn)不支持DirectX的子控件,當(dāng)前不支持的DevExpress WinForms控件列表:

    • 電子表格

    不支持的控件列表與DirectX硬件加速文章中的DirectX兼容控件列表不同。例如,SimpleButton、RadioGroup和TokenEdit不是DirectX-ready控件:它們沒有啟用DirectX渲染的屬性,并且在調(diào)用全局WindowsFormsSettings.ForceDirectXPaint()方法時(shí)不能切換到DirectX模式,然而,當(dāng)放置在DirectX表單中時(shí),這些控件開始使用DirectX API。

    下面的自定義方法允許您識(shí)別放置在表單上的控件是否使用DirectX呈現(xiàn):

    C#:

    bool CheckDirectXEnabled(Control testedControl) {
    if (!testedControl.IsHandleCreated)
    return false;
    var dxClient = testedControl as DevExpress.Utils.DirectXPaint.IDirectXClient;
    if (dxClient == null) {
    var dxProvider = testedControl as DevExpress.Utils.DirectXPaint.IDirectXClientProvider;
    dxClient = dxProvider?.DirectXClient;
    }
    if (dxClient == null)
    return false;
    return dxClient.DirectXProvider.Enabled;
    }

    VB.NET :

    Private Function CheckDirectXEnabled(ByVal testedControl As Control) As Boolean
    If Not testedControl.IsHandleCreated Then
    Return False
    End If
    Dim dxClient = TryCast(testedControl, DevExpress.Utils.DirectXPaint.IDirectXClient)
    If dxClient Is Nothing Then
    Dim dxProvider = TryCast(testedControl, DevExpress.Utils.DirectXPaint.IDirectXClientProvider)
    dxClient = dxProvider?.DirectXClient
    End If
    If dxClient Is Nothing Then
    Return False
    End If
    Return dxClient.DirectXProvider.Enabled
    End Function

    我們不斷擴(kuò)展可以在DirectX Forms中托管的控件的數(shù)量,并期望在DirectX Form退出CTP階段時(shí)支持整套DevExpress WinForms控件。

    多文檔接口

    DirectX表單不支持MDI布局,因此,不能將現(xiàn)有的MDI表單轉(zhuǎn)換為DirectX表單。

    HTML模板

    與其他支持HTML和CSS模板的控件類似,DirectX Form實(shí)例暴露了HtmlTemplate屬性,允許您設(shè)計(jì)自定義模板,每個(gè)DirectX表單都從下默認(rèn)模板開始:

    <dx-form-frame id="frame">
    <dx-form-titlebar id="titlebar">
    <dx-form-icon id="icon"></dx-form-icon>
    <dx-form-text id="text"></dx-form-text>
    <dx-form-minimizebutton id="minimizebutton"></dx-form-minimizebutton>
    <dx-form-maximizebutton id="maximizebutton"></dx-form-maximizebutton>
    <dx-form-closebutton id="closebutton"></dx-form-closebutton>
    </dx-form-titlebar>
    <dx-form-content id="content"></dx-form-content>
    </dx-form-frame>

    這個(gè)默認(rèn)模板的CSS部分是空的,標(biāo)準(zhǔn)元素的外觀和行為存儲(chǔ)在內(nèi)部,元素的外觀取決于標(biāo)記(例如,<dx-form-icon>或<dx-form-maximizebutton>),而元素的行為取決于標(biāo)記ID。例如,下面的標(biāo)記創(chuàng)建了一個(gè)看起來像關(guān)閉按鈕,但行為像最小化按鈕的按鈕:

    <dx-form-closebutton id="minimizebutton"></dx-form-closebutton>

    您可以使用這些標(biāo)準(zhǔn)元素和 IDs 來避免編寫額外的代碼。下面的標(biāo)記創(chuàng)建一個(gè)具有自定義外觀的按鈕,由于“closebutton”ID,該按鈕充當(dāng)關(guān)閉按鈕,則不需要指定自定義方法并將其分配給按鈕的onclick屬性。

    <div id="closebutton" class="button">
    <img src="Close" class="button-glyph" />
    </div>

    提示:標(biāo)簽IDs是唯一的值,不能添加具有相同IDs的多個(gè)元素。

    “frame”和“content”IDs 為必選項(xiàng),沒有這些IDs 元素的模板被認(rèn)為是無效的。

    • 帶有“frame”ID的元素指定了表單的大小調(diào)整區(qū)域。
    • 帶有“content”ID的元素指定表單的客戶端區(qū)域(子控件駐留的區(qū)域)。

    因此,自定義模板所需的最小標(biāo)記如下:

    HTML:

    <div id="frame" class="frame">
    <div id="content">
    </div>
    </div>

    CSS:

    .frame {
    height: 100%;
    }

    然后可以向這個(gè)基本模板添加元素和CSS樣式,下面的示例模板可以在DevExpress WinForms演示中心(HTML演示模塊)中找到:

    wpf direct xForm

    HTML:

    <div class="root">
    <div class="frame" id="frame">
    <div class="caption">
    <div class="title">DirectX Form</div>
    <div id="closebutton" class="button">
    <img src="Close" class="button-glyph" />
    </div>
    </div>
    <div class="content" id="content"></div>
    </div>
    </div>

    點(diǎn)擊復(fù)制

    CSS :

    body {
    padding: 12px;
    }
    .root {
    border: 1px solid rgba(0,0,0,0.1);
    }
    .frame {
    height: 100%;
    display: flex;
    flex-direction: column;
    box-shadow: 2px 2px 8px @DisabledText;
    }
    .caption {
    background-color: @Control;
    height: 32px;
    display: flex;
    flex-direction: row;
    align-content: center;
    padding: 8px 8px 8px 16px;
    }
    .content {
    background-color: @Control;
    flex-grow: 1;
    }
    .button {
    width: 32px;
    height: 32px;
    min-width: 32px;
    min-height: 32px;
    align-self: center;
    border-radius: 4px;
    }
    .button:hover {
    background-color: @DisabledText/0.3;
    }
    .button:active {
    background-color: @DisabledText/0.7;
    }
    .button-glyph {
    width: 16px;
    height: 16px;
    min-width: 16px;
    min-height: 16px;
    margin: 8px;
    opacity: 0.5;
    }
    .title {
    color: @ControlText;
    flex-grow: 1;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    align-self: center;
    font-size: 18px;
    }
    
    body {
    padding: 12px;
    }
    .root {
    border: 1px solid rgba(0,0,0,0.1);
    }
    .frame {
    height: 100%;
    display: flex;
    flex-direction: column;
    box-shadow: 2px 2px 8px @DisabledText;
    }
    .caption {
    background-color: @Control;
    height: 32px;
    display: flex;
    flex-direction: row;
    align-content: center;
    padding: 8px 8px 8px 16px;
    }
    .content {
    background-color: @Control;
    flex-grow: 1;
    }
    .button {
    width: 32px;
    height: 32px;
    min-width: 32px;
    min-height: 32px;
    align-self: center;
    border-radius: 4px;
    }
    .button:hover {
    background-color: @DisabledText/0.3;
    }
    .button:active {
    background-color: @DisabledText/0.7;
    }
    .button-glyph {
    width: 16px;
    height: 16px;
    min-width: 16px;
    min-height: 16px;
    margin: 8px;
    opacity: 0.5;
    }
    .title {
    color: @ControlText;
    flex-grow: 1;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    align-self: center;
    font-size: 18px;
    } 

    點(diǎn)擊復(fù)制

    在上面的示例中,沒有使用body樣式的HTML元素,它作為一個(gè)全局樣式,為<frame>元素設(shè)置12px填充,這個(gè)空白區(qū)域允許<frame>元素繪制它的陰影(.frame style的box-shadow屬性)。

    標(biāo)題欄中元素的Mouse 事件

    位于DirectX表單標(biāo)題欄中的元素不會(huì)引發(fā)HtmlElementMouseClick事件,只有標(biāo)準(zhǔn)的最小化、最大化和關(guān)閉按鈕在單擊時(shí)觸發(fā)此事件。

    以下來自DirectX Form演示的標(biāo)記向標(biāo)題欄添加了五個(gè)元素,在這五個(gè)元素中,只有Close按鈕可以觸發(fā)HtmlElementMouseClick事件。

    <div class="shadowframe">
    <div class="frame" id="frame">
    <div class="titlebar">
    <img class="logo" src="Logo" /> <!--No Click event-->
    <div class="searchbox"> <!--No Click event-->
    <img class="searchimage" src="Search" />
    </div>
    <div class="addbutton"> <!--No Click event-->
    <div class="addbuttoncontainer">
    <img class="addimage" src="Add" />
    <div class="addbuttontext">Add New</div>
    </div>
    </div>
    <img class="button" src="User" id="loginbutton" /> <!--No Click event-->
    <img class="button" src="Close" id="closebutton"/> <!--Raises the Click event-->
    </div>
    <!--...-->
    </div>
    </div>

    這是因?yàn)楦笜?biāo)題欄攔截了所有mouse事件,當(dāng)指針位于標(biāo)題欄上并且用戶按下鼠標(biāo)按鈕時(shí),表單將此操作視為拖放(移動(dòng))操作的開始。要使header元素具有交互性(允許它們引發(fā)onclick方法并觸發(fā)HtmlElementMouseClick事件),您需要將它們的HtmlElementMouseDown事件設(shè)置為已處理。

    例如,下面的代碼檢查元素ID,如果ID用“button”開頭,則為該元素啟用Handled屬性。

    C#:

    this.HtmlElementMouseDown += (s, e) => {
    var args = e.MouseArgs as DXMouseEventArgs;
    if (e.ElementId.StartsWith("button"))
    args.Handled = true;
    };

    VB.NET :

    AddHandler Me.HtmlElementMouseDown, Sub(s, e)
    Dim args = TryCast(e.MouseArgs, DXMouseEventArgs)
    If e.ElementId.StartsWith("button") Then
    args.Handled = True
    End If
    End Sub
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();