Skip to content

WinNativeCommonCtls 包

WinNativeCommonCtls 内置包是 Microsoft Common Controls 6.0(旧版 MSCOMCTL.OCX)的VB6兼容替代品,基于 COMCTL32.DLLMSFTEDIT.DLL 中的Win32 ComCtl32控件重新实现。它提供八个控件,尽可能镜像MSCOMCTL的成员名称,使用VB6开发者熟悉的相同属性/方法/事件拼写。

该包是twinBASIC附带的内置包。通过 Project → References(Ctrl-T)→ Available Packages 添加。

为什么需要此包

依赖 MSCOMCTL.OCX 的VB6项目无法在现代环境中直接运行 --- 该OCX未签名、需要管理员权限逐机注册、附带已知安全公告,且在非Windows主机上完全不可用。WinNativeCommonCtls 消除了这一依赖:将 ListViewTreeViewProgressBarSliderImageListDTPickerMonthViewUpDown 拖放到 Form 上,twinBASIC直接创建底层Win32 ComCtl32控件,无需OCX。

控件名称、属性名称、事件签名以及 vb… / tvw… / lvw… / sld… / Prb… 成员命名约定均与原始 MSCOMCTL.OCX API匹配,因此使用原始控件的VB6代码在添加包引用后通常无需修改即可编译运行。

控件

八个控件,每个都是叶类,继承自声明完整API的 <Name>BaseCtl

  • DTPicker --- 日期/时间选择器:下拉日历、单日期 Value、自定义格式字符串、可选微调按钮和复选框变体
  • ImageList --- 离屏图像集合,通过 Icons / SmallIcons / ImageList 属性为 ListViewTreeView 提供图标;运行时不可见
  • ListView --- 多列列表,支持四种 View 模式(Icon / SmallIcon / List / Report)、标签编辑、复选框、列头图标和逐项状态
  • MonthView --- 全月日历网格,支持多月布局(MonthColumns × MonthRows)、多日选择、粗体日期回调高亮、周数和今日指示器
  • ProgressBar --- 标准/平滑/跑马灯进度指示器,支持三种视觉状态(Normal / Error / Paused),水平或垂直方向
  • Slider --- 带刻度标记的轨道条/滑块,可选选择范围、垂直或水平方向,以及带浮动提示的可拖动滑块
  • TreeView --- Node 对象的层次树,支持排序、标签编辑、复选框、图像列表和逐节点粗体/颜色覆盖
  • UpDown --- 带上/下箭头的微调控件:纯 Min / Max / Value / Increment(无自动伙伴)

ListViewTreeViewImageList 包含集合子对象 --- 参见文件夹索引页获取完整层次结构。

枚举

跨多个控件共享的模块级枚举位于 Enumerations 下;每个控件嵌套的枚举(ListViewConstantsPrbStateTickStyleConstants 等)在声明它们的控件页面上进行文档说明。

  • Enumerations --- 共享模块中声明的十个面向用户的枚举

跨控件成员

每个控件都从 BaseControl / BaseControlRect / BaseControlRectDockable / BaseControlFocusable(或 BaseControlNotFocusable,当控件无法获取焦点时)继承标准VB包成员。继承成员包括:

  • 定位和布局 --- NameLeftTopWidthHeightAnchorsDockVisibleEnabledMoveRefreshZOrderContainerParentIndexTaghWnd
  • 外观 --- BackColor / ForeColor / Font(可聚焦控件)、AppearanceVisualStylesMousePointer / MouseIcon
  • 工具提示、拖放、验证 --- ToolTipTextDragMode / DragIconDragCausesValidationValidate 事件
  • 焦点(仅可聚焦控件)--- SetFocusTabIndexTabStopGotFocus / LostFocus 事件
  • 帮助集成 --- HelpContextIDWhatsThisHelpID
  • OLE 拖放 --- OLEDropModeOLEDrag 方法,以及 OLEStartDrag / OLEGiveFeedback / OLESetData / OLEDragOver / OLEDragDrop / OLECompleteDrag 事件。参见 OLEDropConstants
  • 透明度 --- OpacityDouble,0--100,百分比)和 TransparencyKeyOLE_COLOR-1 禁用)。两者都需要Windows 8(目标OS 6.2+)用于子控件;在较旧OS版本上静默无操作

每个控件的参考页列出了控件特定成员 --- 自有属性、方法、事件和嵌套枚举 --- 不再每次重新枚举整个继承基类。

控件类型常量

每个控件对应 ControlTypeConstants 中的一个 vb… 值:

常量控件
vbProgressBar21ProgressBar
vbTreeView22TreeView
vbSlider26Slider
vbUpDown27UpDown
vbDTPicker28DTPicker
vbMonthView29MonthView
vbListView30ListView
vbImageList31ImageList

每个控件的 ControlType 属性在运行时返回其常量,允许通过窗体 Controls 集合的通用 For Each 循环来区分控件。

另见

  • VB 包 --- 标准控件集:CheckBoxCommandButtonTextBoxFrameForm
  • CustomControls 包 --- 当Win32 API不够用时,自绘 Waynes… 自定义控件
  • ControlTypeConstants --- 每个控件的 ControlType 属性使用的 vb… 区分常量
  • OLEDropConstants --- 此包中每个控件共享的 OLEDropMode

twinBASIC及其LOGO版权为作者"韦恩"所有