提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:鲍佳佳|2020-09-23 14:55:35.260|阅读 670 次
概述:在版本19.2之前,不能够将控件的主题应用于ToolkitPro控件(例如CXTPEdit,CXTPTree,CXTPListBox,CXTPListCtrl和CXTPPropertyGrid)中的滚动条。因为通用Windows控件拥有自己显示和处理的滚动条的方式,并且覆盖Windows通用控件的行为以及保持完全的向后兼容性在技术上非常具有挑战性,因此导致需要考虑一定的可使用进的解决方案。本文介绍了关键点,并试图回答可能出现的常见问题。
#慧都22周年庆大促·界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
相关链接:
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@hmdbvip.cn
文章转载自:



在嵌入式软件测试领域,对交叉编译代码进行单元测试是一大挑战。Parasoft C/C++test作为专业的C/C++测试工具,能够与劳特巴赫Trace32调试器深度集成。下面会详细介绍如何在C++test中配置Trace32调试器,实现对PowerPC架构程序的单元测试,涵盖环境设置、项目导入到测试执行的全过程。
本文将为大家介绍如何使用DevExpress WinForms数据网格控件实现摘要文本的格式化,欢迎下载最新版组件体验!
Parasoft C/C++test作为一款功能强大的自动化测试工具,为嵌入式开发提供了全面的测试解决方案。特别是在CCS开发环境中,C++test能够无缝集成,为F2812等DSP项目提供专业的单元测试支持。下面将介绍如何在CCS3环境下配置和使用C++test进行F2812项目的单元测试。
在嵌入式开发中,尤其是基于ARM架构的安全关键领域,单元测试是验证代码在目标硬件上运行时行为正确性的关键环节,对于保障最终产品的可靠性至关重要。下面将介绍如何利用Parasoft C/C++test开展单元测试,包括配置、执行及解决可能遇到的许可证问题,完成从静态检查到动态运行的完整测试闭环。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@hmdbvip.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
永利最大(官方)网站