UpDown 控制的工作方式与预期相反

问题描述 投票:0回答:1

我编写了一个小程序,用于创建与编辑框关联的 UpDown 控件。

我已经使用资源脚本进行了测试,问题是相同的:向上箭头减少数字,向下箭头增加数字。我不知道我的错误在哪里。

我在 Windows 11 机器上使用 Visual Studio 2022 编写了该程序。

这是我的代码:

#include <Windows.h>
#include <CommCtrl.h>
#include "resource.h"

#pragma comment(lib, "comctl32.lib")

static HWND et1, ud1;
static HINSTANCE hinstancia;

LRESULT OnDestroy(HWND hwnd, WPARAM wp, LPARAM lp)
{
    PostQuitMessage(0);
    return 0;
}
/////////////////////////////////////////////////////////////////////
LRESULT OnCreate(HWND hwnd, WPARAM wp, LPARAM lp)
{
    et1 = CreateWindowEx(0, L"edit", L"", WS_CHILD | WS_VISIBLE, 10, 10, 40, 16, hwnd, NULL, hinstancia, NULL);
    if (!et1)
    {
        MessageBox(NULL, L"I was unable to create the input control", L"Error", MB_OK);
        exit(0);
    }
    ud1 = CreateWindowEx(0, L"MSCTLS_UPDOWN32", L"", WS_CHILD | WS_VISIBLE | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 50, 10, 12, 16, hwnd, NULL, hinstancia, NULL);
    if (!ud1)
    {
        MessageBox(NULL, L"I was unable to create the up down control", L"Error", MB_OK);
        exit(0);
    }
    return 0;
}
/////////////////////////////////////////////////////////////////////
LRESULT CALLBACK wndproc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
    switch (msg)
    {
    case WM_DESTROY: return OnDestroy(hwnd, wp, lp);
    case WM_CREATE: return OnCreate(hwnd, wp, lp);
    default: return DefWindowProc(hwnd, msg, wp, lp);
    }
    
}
////////////////////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    INITCOMMONCONTROLSEX ice;
    WNDCLASSEX wc;
    HWND hwnd;
    MSG msg;
    hinstancia = hInstance;
    ice.dwSize = sizeof(INITCOMMONCONTROLSEX);
    ice.dwICC = ICC_UPDOWN_CLASS;
    InitCommonControlsEx(&ice);
    ZeroMemory(&wc, sizeof(WNDCLASSEX));
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.hInstance = hInstance;
    wc.lpszClassName = L"Test1";
    wc.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wc.lpfnWndProc = wndproc;
    wc.style = CS_HREDRAW | CS_VREDRAW;
    if (!RegisterClassEx(&wc))
    {
        MessageBox(NULL, L"Window class was not registered", L"Error", MB_OK);
        return 0;
    }
    hwnd = CreateWindowEx(WS_EX_APPWINDOW, L"Test1", L"Sample", WS_CAPTION | WS_SYSMENU | WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);
    if (!hwnd)
    {
        MessageBox(NULL, L"Window was not createed", L"Error", MB_OK);
        return 0;
    }
    ShowWindow(hwnd, nShowCmd);
    UpdateWindow(hwnd);
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);  
    }
    return (int)msg.wParam;
}

有人可以告诉我我做错了什么吗?

我希望使用向上箭头增加数字并使用向下箭头减少数字。

c windows api winapi
1个回答
0
投票

我同意@Remy Lebeau,

根据文档:第7步:创建上下控件

当用户点击控件的时候让控件向上计数 向上箭头,必须设置上下控件的范围和方向。你 通过向控件发送一条

UDM_SETRANGE
消息来完成此操作,其中包含 上限和下限值。

这是代码:

SendMessage(ud1, UDM_SETRANGE, 0, UDM_GETRANGE);

您可以参考示例:上下控制示例代码

© www.soinside.com 2019 - 2024. All rights reserved.