簡體   English   中英

Win32 API:如何使編輯文本僅在c ++中接受無符號浮點數?

[英]Win32 API : how to make Edit Text to accept unsigned float only in c++?

我正在努力學習win32 api :)

我在DialogBox中放置了一些編輯文本,我希望它只接受大於0的浮點數

我只能通過在資源文件中使用樣式“ES_NUMBER”來使編輯文本接受整數,但我找不到任何方法如何讓它接受正浮動值請我需要你的幫助謝謝

除了處理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;
        }
    }
}

使用EN_UPDATE通知,如果用戶鍵入減號,只需將其刪除即可。 凈效果將正是您想要的:一個只接受正浮動的控件。 不要使用EN_CHANGE因為在重繪控件后發送,然后更改輸入將需要另一次重繪,這會給控件閃爍的印象。

c ++中沒有unsigned float,所以不可能!

您可能必須明確驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM