【问题标题】:(WIN32 API) Edit Control Style not applying to RichEdit in CreateWindowEx(WIN32 API)编辑控件样式不适用于 CreateWindowEx 中的 RichEdit
【发布时间】:2014-03-30 22:47:43
【问题描述】:

我使用了以下代码,它运行良好,只允许用户输入数字。我想通过使用 RichEdit 来增加功能,所以我添加了它。

我使用的是:

wchar_t sampletext[] = L"foobar";  
HWND inputText = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", sampletext,
    ES_NUMBER | WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE,
    10, 10, 500, 75, hWnd, NULL, *hInst, NULL);

到:

LoadLibrary(L"riched32.dll");  

wchar_t sampletext[] = L"foobar";  
HWND inputText = CreateWindowEx(WS_EX_CLIENTEDGE, L"RichEdit", sampletext,
    ES_NUMBER | WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE,
    10, 10, 500, 75, hWnd, NULL, *hInst, NULL);

更改它允许我使用 CTRL+Z 和 CTRL+A,但现在由于某种原因我可以输入不是数字的字符。

如何解决此问题,以便 Rich Edit 仅接受此文本字段中的数字? 或
或者,我将如何创建自己的自定义过滤器,只接受文本字段中的数字?

编辑:
这是我打字的图像

【问题讨论】:

  • “RichEdit”是一个不同的控件类,有自己的风格。

标签: c++ windows api winapi user-interface


【解决方案1】:

“RichEdit”控件类有自己的set of styles

但根据 MSDN,ES_NUMBER 就是其中之一。但是,请注意 ElmueSoft 的评论。

要在没有控件帮助的情况下将输入过滤为仅数字,您可以对其进行子类化。不过,您需要处理很多消息。 WM_CHAR 是最明显的,但WM_PASTEWM_SETTEXT 可以传入非数字文本。

关于子类化的好信息:

【讨论】:

  • @user2893243:写一个窗口过程,正常创建窗口,然后调用SetWindowSubclass。我将在 Raymond Chen 的博客上的解释中添加一个链接。
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多