gpt4 book ai didi

c++ - 更改组合框选择的 DateTimePicker 样式失败

转载 作者:行者123 更新时间:2023-11-28 06:28:19 27 4
gpt4 key购买 nike

我正在尝试更改 DateTimePicker control 的样式和日期格式在组合框的 CBS_SELCHANGE 通知上。

当用户选择一个选项时,日期时间选择器应该有旋转控件并且只显示年份。如果用户选择其他选项,样式应重置为短日期样式,日期格式应将日期显示为 dd.mm.yyyy

这是我目前的代码:

case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_COMBO5:
{
if (HIWORD(wParam) == CBN_SELENDOK)
{
int iSelected = ComboBox_GetCurSel((HWND)lParam);

switch (i)
{
case 1:
{
DWORD_PTR dwStyle =
GetWindowLongPtr(GetDlgItem(hDlg,
IDC_DATETIMEPICKER1), GWL_STYLE);
// remove short date style
dwStyle &= ~DTS_SHORTDATEFORMAT;
// add spin control
dwStyle |= DTS_UPDOWN;
SetWindowLongPtr(GetDlgItem(hDlg,
IDC_DATETIMEPICKER1), GWL_STYLE, dwStyle);

// set date format
DateTime_SetFormat(GetDlgItem(hDlg,
IDC_DATETIMEPICKER1), L"yyyy");
}
break;
case -1:
case 0:
case 2:
default:
{
DWORD_PTR dwStyle =
GetWindowLongPtr(GetDlgItem(hDlg,
IDC_DATETIMEPICKER1), GWL_STYLE);
// remove spin control
dwStyle &= ~DTS_UPDOWN;
// restore short date format
dwStyle |= DTS_SHORTDATEFORMAT;
SetWindowLongPtr(GetDlgItem(hDlg,
IDC_DATETIMEPICKER1), GWL_STYLE, dwStyle);

// set date format
DateTime_SetFormat(GetDlgItem(hDlg,
IDC_DATETIMEPICKER1), L"dd'|'MM'|'yyyy");
}
break;
}
}
}
break;
// other cases...

格式已正确更改,但根本没有添加旋转控件。

通过调试器运行,我可以看到它通过了我的代码并且没有抛出任何异常 -> 我转到 Debug->Exceptions 并检查了 Thrown 下的所有内容。

我在 Windows 7 x86 上工作,使用 Visual Studio 2013。

我的目标是 XP。

您能帮我修复我的代码,以便我可以实现所需的行为吗?

最佳答案

有些公共(public)控件属性在创建控件后无法更改。在这种情况下,日期/时间选择器仅在创建时查看 DTS_UPDOWN 样式 - 如果在处理 WM_CREATE 时设置了该位,则它会创建子旋转控件。

事实上,如果您在尝试更改该样式后使用 GetWindowLong 查询控件的样式位,您会发现它主动阻止了更改 - 它不会让您更改 DTS_UPDOWNDTS_SHOWNONE 创建后。

您的选择是根据需要销毁并重新创建控件,或者首先从两个不同的控件开始,然后使用 ShowWindow 在它们之间切换。

关于c++ - 更改组合框选择的 DateTimePicker 样式失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28137962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com