winapi - Win32 DateTime_SetMonthCalColor 似乎不起作用
问题描述
我想更改 datetimepicker contorl 日历的背景颜色。根据 windows SDK,有一个 marco DateTime_SetMonthCalColor。
DateTime_SetMonthCalColor(hwnd,MSC_BACKGROUND,RGB(0,120,250));
但不行。我在 windows control spy 上执行此操作,发送相同的消息 DTM_SETMCCOLOR ,也没有效果。那么怎么了?
解决方案
MCSC_BACKGROUND
设置月历控件本身的背景颜色,仅在下拉菜单的大小调整为大于默认单月时显示。各个月份的背景设置为MCSC_MONTHBK
相反。
每次打开下拉菜单时都会创建月历控件。为了调整它的大小,日期时间选择器控件的父窗口必须处理DTN_DROPDOWN
通知,如下面的最小示例所示。
HWND CreateDTC(HWND hWnd)
{
INITCOMMONCONTROLSEX icex = { sizeof(icex), ICC_DATE_CLASSES };
InitCommonControlsEx(&icex);
return CreateWindowExW(0, DATETIMEPICK_CLASS, L"DateTime",
WS_BORDER | WS_CHILD | WS_VISIBLE | DTS_SHOWNONE,
10, 10, 150, 25, hWnd, nullptr, hInst, nullptr);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HWND hDTC = nullptr;
switch(msg)
{
case WM_CREATE:
hDTC = CreateDTC(hWnd);
DateTime_SetMonthCalColor(hDTC, MCSC_BACKGROUND, RGB(0, 120, 250)); // blue
DateTime_SetMonthCalColor(hDTC, MCSC_MONTHBK, RGB(120, 250, 0)); // green
break;
case WM_NOTIFY:
switch(((LPNMHDR)lParam)->code)
{
case DTN_DROPDOWN:
HWND hMC = DateTime_GetMonthCal(hDTC);
RECT rc;
MonthCal_GetMinReqRect(hMC, &rc);
MoveWindow(hMC, 0, 0, (5 * rc.right) / 2, (3 * rc.bottom) / 2, FALSE);
break;
}
break;
//...
}
return 0;
}
推荐阅读
- node.js - 使用玩笑和超测投掷
- python - 在 django 中使用装饰器时得到一个意外的关键字参数“pk”
- python - 从python中的等高线图中提取点
- json - 如何转义在 PowerShell 中运行的单引号 json
- javascript - 如何按顺序从异步调用中获取数据?
- spring-kafka - Spring Kafka 手动立即确认以及 SeekToCurrentErrorHandler
- python - (eval):10: 不匹配 | iTerm,Mac M1 Big Sur 上的 conda 活动错误
- dart-null-safety - 错误:参数类型“列表”
' 不能分配给参数类型 'Uint8List' - javascript - 离线时不会触发 onChange 事件
- django - Django Signals 设置信号以在注册用户后在 UserExtended 模型上创建默认头像图像