Win32 API:如何使编辑文本仅在c ++中接受无符号浮点数?

use*_*647 5 c++ winapi textbox

我正在努力学习win32 api :)

我在DialogBox中放置了一些编辑文本,我希望它只接受大于0的浮点数

我只能通过在资源文件中使用样式"ES_NUMBER"来使编辑文本接受整数,但我找不到任何方法如何让它接受正浮动值请我需要你的帮助谢谢

Cap*_*ous 4

除了处理EN_CHANGE通知之外,您还可以选择对窗口进行子类化。这将允许您限制哪些击键有效,并且只允许数字、点等。下面的示例显示如何创建编辑控件、对其进行子类化并过滤输入,以便仅允许特定字符。它不处理从剪贴板粘贴等操作,因此您需要扩展它以满足您的特定要求。

这种方法的好处是您不需要向父窗口添加任何额外的代码来过滤编辑控件。这使您可以在整个应用程序中使用它,而无需重复大量代码。另一个好处是它消除了因更新控件内容以删除不需要的字符而可能发生的闪烁。

static WNDPROC OriginalEditCtrlProc = NULL;

LRESULT CALLBACK MyWindowProc(
    HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam)
{
    if(uMsg == WM_CHAR)
    {
        // Make sure we only allow specific characters
        if(!    ((wParam >= '0' && wParam <= '9')
                || wParam == '.'
                || wParam == VK_RETURN
                || wParam == VK_DELETE
                || wParam == VK_BACK))
        {
            return 0;
        }
    }

    return CallWindowProc(OriginalEditCtrlProc, hwnd, uMsg, wParam, lParam);
}

void CreateCustomEdit(HINSTANCE hInstance, HWND hParent, UINT id)
{
    HWND hwnd;

    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        _T("EDIT"),
        _T(""),
        WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,
        0, 0, 200, 40,
        hParent,
        reinterpret_cast<HMENU>(id),
        hInstance,
        NULL);
    if(hwnd != NULL)
    {
        // Subclass the window so we can filter keystrokes
        WNDPROC oldProc = reinterpret_cast<WNDPROC>(SetWindowLongPtr(
            hwnd,
            GWLP_WNDPROC,
            reinterpret_cast<LONG_PTR>(MyWindowProc)));
        if(OriginalEditCtrlProc == NULL)
        {
            OriginalEditCtrlProc = oldProc;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)