Автоматическое сообщение с запросом, когда «ноль» вводится в коде win32 - PullRequest
0 голосов
/ 17 февраля 2020

Я испробовал функцию всплывающей подсказки в коде win32, когда нажал «ОК», сообщение отображается только тогда, когда мы наводим курсор на конкретное поле. Но функция, которую я ожидаю, это автоматическое отображение сообщения в определенном окне при нажатии «ОК». Можно ли добавить такую ​​функцию автоматического всплывающего окна? Мне нужно всплывающее окно с сообщением об ошибке. Мой точный сценарий - всплывающее окно с ошибкой, когда в диалоговом окне задан ноль, когда нажата кнопка «ОК».

HWND gzui_controls::create_tool_tip_balloon(HWND hdlg, int tool_id, PTSTR text) const { if (!tool_id || !hdlg || !text) { return FALSE; }

HWND hwndTool = GetDlgItem(hdlg, tool_id);
if (WM_LBUTTONUP)
{
HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
        WS_POPUP | SWP_NOMOVE | TTS_NOPREFIX | TTS_BALLOON | BS_PUSHBUTTON,
        CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT,
        hdlg, NULL,
        getModuleInstance(), NULL);

    if (!hwndTool || !hwndTip)
    {
        return (HWND)NULL;
    }

    // Associate the tooltip with the tool.
    TOOLINFO toolInfo = { 0 };
    toolInfo.cbSize = sizeof(toolInfo);
    toolInfo.hwnd = hdlg;
    toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
    toolInfo.uId = (UINT_PTR)hwndTool;
    toolInfo.lpszText = text;
    SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
    return hwndTip;
}

1 Ответ

0 голосов
/ 17 февраля 2020

Ниже приведен пример всплывающей подсказки для отображения информации, когда вводимое значение недопустимо.

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

// ...

   editHwnd = CreateWindow(L"EDIT", 
       NULL, 
       WS_VISIBLE | WS_CHILD | ES_MULTILINE | WS_BORDER,
       120,
       10,
       100,
       100,
       hWnd,
       NULL,
       hInst,
       NULL);

// ...

case WM_COMMAND:
    {
        if (HIWORD(wParam) == EN_CHANGE)
        {
            // TODO: Add logic of detecting input value here
            if (editHwnd == (HWND)lParam) // && inputVal == 0
            {
                balloonTip.cbStruct = sizeof(EDITBALLOONTIP);
                balloonTip.pszText = L"Zero is given as input";
                balloonTip.pszTitle = L"Tips";
                balloonTip.ttiIcon = TTI_INFO;
                Edit_ShowBalloonTip(editHwnd, &balloonTip);
            }
        }
    }
    break;

См. Редактировать элемент управления , Структура EDITBALLOONTIP , Макрос Edit_ShowBalloonTip

Примечание. Для использования макроса Edit_ShowBalloonTip необходимо предоставить манифест, указывающий версию 6.0 Comclt32.dll.

Понравится :

enter image description here

...