如何在运行时将编辑样式更改为ES_NUMBER?

Tan*_*ngo 1 c++ windows winapi

在创建编辑控件时,我不添加ES_NUMBER.后来基于布尔标志,我想改变样式并使其ES_NUMBER恢复到布尔标志的另一个值上.

Dav*_*nan 6

文件给出了答案.一些摘录:

若要使用CreateWindow或CreateWindowEx函数创建编辑控件,请指定EDIT类,相应的窗口样式常量以及以下编辑控件样式的组合.创建控件后,除非另有说明,否则无法修改这些样式.

因此,我们可能会或可能无法在创建控件后更改样式.让我们来看看:

ES_NUMBER

仅允许在编辑控件中输入数字.请注意,即使使用此设置,仍可以将非数字粘贴到编辑控件中.

要在创建控件后更改此样式,请使用SetWindowLong.

要将输入到编辑控件中的文本转换为整数值,请使用GetDlgItemInt函数.要将编辑控件的文本设置为指定整数的字符串表示形式,请使用SetDlgItemInt函数.

要添加样式,请执行以下操作:

LONG style = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, style | ES_NUMBER);
Run Code Online (Sandbox Code Playgroud)

或者删除它:

LONG style = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, style & ~ES_NUMBER);
Run Code Online (Sandbox Code Playgroud)

  • 我建议改用[SetWindowLongPtr](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644898.aspx)。在这里不会有什么区别,但是遵循*始终使用`SetWindowLongPtr` *规则将是在确实重要的地方的安全选择。 (2认同)