在 Win32 中子类化 MonthCal 控件

Posted

技术标签:

【中文标题】在 Win32 中子类化 MonthCal 控件【英文标题】:Subclass a MonthCal control in Win32 【发布时间】:2008-09-19 10:32:26 【问题描述】:

目的:使用标准的Win32 MonthCal控件,用RED绘制节假日等日子。

Win32 的原生方法似乎是使用MCN_GETDAYSTATE 通知,这似乎只允许以粗体绘制特定日期。

可能(但被拒绝)的解决方案是编写我自己随意绘制的 MonthCalendar,将自己赶出主题支持 - 这意味着当有更新的主题出现时,我的控制可能不会与 UI 保持一致。

如果有人遇到此问题,将不胜感激。

【问题讨论】:

我认为对特定颜色的硬连线要求已经使您脱离了主题支持。 【参考方案1】:

如果您的应用程序不使用任何 MFC,而是使用纯 win32 调用编写的,那么执行您想要的操作的 MFC 控件是不可能的。因此,您可以使用 MFC 或 win32 进行控件 - 显然 MFC 控件将在后台使用 win32,但 15 年的 Windows 开发人员约定表明,当有人谈论“win32 控件”时,它是一个“仅使用 win32 调用的控件” ,没有外部库”和“MFC 控件”是“直接或间接从 CWnd 派生并使用 MFC 类和使用模式的控件”。

不管怎样,看看http://www.bcgsoft.com/samples/calendar.htm。他们的 UI 套件中有一个控件,看起来像 MonthCal 控件,但您可以在其中用颜色指示日期范围等。

【讨论】:

【参考方案2】:

做不到。该控件仅支持以粗体显示某些日子。

您的目标是什么平台(桌面或 WM?)如果是桌面,它真的是 win32 还是 MFC 解决方案可以接受?

【讨论】:

以上是关于在 Win32 中子类化 MonthCal 控件的主要内容,如果未能解决你的问题,请参考以下文章

Win32中安全的子类化(翻译)

如何创建一个 Win32 控件来包含其他 Win32 控件?

子类化组合框时如何抑制自动搜索(Win32/WinAPI)

Win32:将子消息转发给父 - 返回值不同

.NET 中 ActiveX 控件的子类化窗口过程

自定义绘制 CProgressBarCtrl win32