Windows 属性表中编辑控件的奇怪之处

Windows 属性表中编辑控件的奇怪之处,windows,winapi,propertysheet,Windows,Winapi,Propertysheet,我有一张有几页的财产清单。大多数页面都有一个或多个编辑控件。 大多数控件不是从页面对话框初始化的,而是从创建属性表的对话框初始化的;但是,有些是在页面对话框中初始化的,它们的行为相同 一切开始都很好。可以在页面之间移动。没有一个控件具有输入焦点 如果单击建立输入焦点的属性页中的某个编辑控件,则可以修改该控件。一切似乎又井然有序了 如果一个控件移动到另一个属性页,则该页中的第一个编辑控件将获得输入焦点,并且该控件中的所有文本都将被选中!此行为适用于除具有只读样式的编辑控件的页面之外的所有页面。之后

我有一张有几页的财产清单。大多数页面都有一个或多个编辑控件。 大多数控件不是从页面对话框初始化的,而是从创建属性表的对话框初始化的;但是,有些是在页面对话框中初始化的,它们的行为相同

一切开始都很好。可以在页面之间移动。没有一个控件具有输入焦点

如果单击建立输入焦点的属性页中的某个编辑控件,则可以修改该控件。一切似乎又井然有序了

如果一个控件移动到另一个属性页,则该页中的第一个编辑控件将获得输入焦点,并且该控件中的所有文本都将被选中!此行为适用于除具有只读样式的编辑控件的页面之外的所有页面。之后,可以移回其他页面,恢复初始的nothing selected no input focus行为

所有页面都处理PSN_QUERYINITIALFOCUS通知,并通过SetWindowLong机制返回零

这是预期的行为吗

为什么一些控制一开始就没有重点呢

我的主要兴趣是以某种方式消除选择。我已尝试在PSN_SETACTIVE通知中使用EM_setel终止选择,但无效


MSDN在PSN_QUERYINITIALFOCUS下说:“否则,返回零,焦点将转到默认控件。”如何将控件设置为默认控件?

我觉得上述操作很奇怪!我还是想知道

如果它们正常。
为什么最初没有控件接收焦点。

通过向属性页添加代码来处理任何编辑控件的WM_命令/EN_SETFOCUS消息,我能够终止选择。我不知道是否有其他控制 发送EN_SETFOCUS消息

case EN_SETFOCUS:
    {
       char cn[16];
       HWND H = (HWND) lParam;
       GetClassName (H, cn, 15);
       if (strcmp (cn,"Edit") == 0)
       {
            SendMessage (H, EM_SETSEL, -1, 0);
       }
       return true;
    }                   
我认为可以在EN_KILLFOCUS处理程序中保存任何选择并恢复它 在EN_SETFOCUS处理程序中,但对未知数量的控件执行此操作将非常繁琐