提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:鲍佳佳|2020-09-23 14:55:35.260|阅读 544 次
概述:在版本19.2之前,不能够将控件的主题应用于ToolkitPro控件(例如CXTPEdit,CXTPTree,CXTPListBox,CXTPListCtrl和CXTPPropertyGrid)中的滚动条。因为通用Windows控件拥有自己显示和处理的滚动条的方式,并且覆盖Windows通用控件的行为以及保持完全的向后兼容性在技术上非常具有挑战性,因此导致需要考虑一定的可使用进的解决方案。本文介绍了关键点,并试图回答可能出现的常见问题。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
Xtreme Toolkit Pro是MFC开发中最全面界面控件套包,它提供了Windows开发所需要的11种主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。如果对产品感兴趣的话欢迎下载Xtreme Toolkit Pro最新试用版! 点击获取更多免费Xtreme Toolkit Pro教程、视频、示例!
【同类产品推荐】
在版本19.2之前,不能够将控件的主题应用于ToolkitPro控件(例如CXTPEdit,CXTPTree,CXTPListBox,CXTPListCtrl和CXTPPropertyGrid)中的滚动条。因为通用Windows控件拥有自己显示和处理的滚动条的方式,并且覆盖Windows通用控件的行为以及保持完全的向后兼容性在技术上非常具有挑战性,因此导致需要考虑一定的可使用进的解决方案。本文介绍了关键点,并试图回答可能出现的常见问题。
解决方案实际上,以下类保持不变,并且仍使用未应用主题的标准Windows滚动条:
为了能够应用滚动条主题或自定义滚动条类,必须使用或派生新特殊适配器模板类的新控件类CXTPScrollable<Base>。
对于最常见的用例,将应用程序中使用的控件类名替换为对应的类名就足够了,这些类名源自CXTPScrollable:
CXTPPropertyGrid这是一种特殊情况,它没有其他CXTPScrollable派生版本,仅在内部使用新方法,保持完全向后兼容,并且除非确认新添加会引起阻塞问题,否则不需要任何特殊考虑。如果从版本19.3开始是这种情况,则可以禁用PropertyGrid滚动条主题。
如果从版本19.3开始是这种情况,则可以选择禁用滚动条主题,以回退到19.2之前的行为。对于这个无论是取消对XTPPropertyGrid.h 文件中 (C:\Program Files (x86)\Codejock Software\MFC\Xtreme ToolkitPro v19.3.0\Source\PropertyGrid\XTPPropertyGrid.h) 的XTP_PROPERTY_GRID_DISABLE_SCROLLBAR_THEMES 宏或将宏定义为ToolkitPro或PropertyGrid库项目的C ++编译器属性,然后重新构建ToolkitPro或PropertyGrid项目,以使更改生效。
使用这些类将确保控件将自动具有合适的滚动条主题,并可以使用新方法设置自定义滚动条主题:
void SetScrollBarTheme(XTPScrollBarTheme nTheme);
使用从CXTPScrollable派生的类同时也会施加某些限制:
CXTPTreeCtrl m_tree; // As CXTPTreeCtrl is derived from CTreeCtrl it uses CTreeCtrl::Create overloaded // method which has signature different from CWnd::Create and thus should not be used for CXTPScrollableTreeCtrl m_tree.Create(WS_CHILD | TVS_LINESATROOT, rc, this, IDC_TREE);
Example of the fixed code: CXTPScrollableTreeCtrl m_tree; // Call CWnd::Create overridden method to ensure it can be compiled using all Microsoft C++ compilers m_tree.Create(_T("SysTreeView32"), NULL, WS_CHILD | TVS_LINESATROOT, rc, this, IDC_TREE);
CXTPEdit m_edtSingleLine; CXTPScrollableEdit m_edtMultiline; // IDC_EDIT_SINGLELINE is NOT derived from CXTPScrollable and thus can be referenced by Resize control by ID only. SetResize(IDC_EDIT_SINGLELINE, XTP_ANCHOR_TOPLEFT, CXTPResizePoint(1.f / 3.f, 0)); // IDC_EDIT_MULTILINE is derived from CXTPScrollable and thus must be referenced by Resize control by both ID and handle value. SetResize(IDC_EDIT_MULTILINE, m_edtMultiline, XTP_ANCHOR_TOPLEFT, CXTPResizePoint(1.f / 3.f, 0));从CXTPScrollable派生自定义控件
如果控件来自于受支持的类并使用标准的Windows滚动条,则可以使用CXTPScrollable自定义控件来将其应用于滚动条。
有两种可能的用例:
对于第一种情况,ToolkitPro为相应的基类提供了适配器模板:
例:
// Your existing classes class CCustomEdit : public CEdit { /*...*/ }; class CCustomTreeCtrl : public CXTPTreeCtrl { /*...*/ }; // Your new derived classes class CScrollableCustomEdit : public CXTPScrollableEditT<CCustomEdit> { /*...*/ }; class CScrollableTreeCtrl : public CXTPScrollableEditT<CCustomTreeCtrl> { /*...*/ };
在其他情况下,当您需要派生另一种自定义控件时,则需要实现 IXTPScrollable接口:
// Your existing class class CCustomControl : public CWnd { public: void InitializeCustomState(); // ... }; // Your new derived class. // Some or all method may have default implementation, the example demonstrates overloading of all methods. class CScrollableCustomControl : public CXTPScrollable { public: // IXTPScrollable overrides virtual BOOL HasVScroll(DWORD dwStyle, DWORD dwExStyle) const { // Determine if control has vertical scroll. return 0 != (GetStyle() & WS_VSCROLL); } virtual BOOL HasHScroll(DWORD dwStyle, DWORD dwExStyle) const { // Determine if control has horizontal scroll. return 0 != (GetStyle() & WS_HSCROLL); } virtual BOOL HasLeftScrollbar(DWORD dwStyle, DWORD dwExStyle) const { // Determine if control has scroll bar on the lets. return 0 != (GetExStyle() & WS_EX_LEFTSCROLLBAR); } virtual void DisableScrollbars() { // Force default scroll bars to hide. DisableScrollbars(*this); } virtual void DisableScrollbars(CWnd& wnd) { // Force default scroll bars to hide for a specific window. wnd.ModifyStyle(WS_VSCROLL | WS_HSCROLL, 0); } virtual CScrollBar* CreateBar() const { // Create scroll bar instance. return new CXTPScrollBarCtrl(); } virtual CWnd* CreateControl() const { // Re-create custom control instance and perform default initialization if necessary. CCustomControl* pNewCtrl = new CCustomControl(); VERIFY(NULL != pNewCtrl); pNewCtrl->InitializeCustomState(); return pNewCtrl; } virtual DWORD FilterStyle(DWORD dwStyle) const { return dwStyle; } virtual DWORD FilterExStyle(DWORD dwExStyle) const { return dwExStyle; } virtual BOOL RequiresMouseWheelOverriding() const { return true; } // ... };
今天的内容就是这些了,下载最新版Xtreme ToolKit Pro并在下方评论区分享您对该产品的想法。您的反馈意见可帮助我们在以后的更新中找到正确的方向,慧都作为Codejock的正版代理商现Xtreme ToolKit Pro正版授权最高立减2000元! Xtreme Command Bars在线订购最低仅需1105元!
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢