首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在组合框选择失败时更改DateTimePicker样式

在组合框选择失败时更改DateTimePicker样式
EN

Stack Overflow用户
提问于 2015-01-25 15:16:49
回答 1查看 380关注 0票数 0

我试图在combobox的DateTimePicker控制通知上更改CBS_SELCHANGE的样式和日期格式。

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

下面是我到目前为止掌握的代码:

代码语言:javascript
复制
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...

格式被正确地改变,但是spin控件根本没有被添加。

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

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

我的目标是XP继续。

你能帮我修复我的代码吗?这样我才能达到预期的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-25 20:21:53

在创建控件后不能更改某些常见的控件属性。在这种情况下,日期/时间选择器只在创建时查看DTS_UPDOWN样式--如果在处理WM_CREATE时设置了位,那么它将创建子自旋控件。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28137962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档