我编写了一个小程序,用于创建与编辑框关联的 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;
}
有人可以告诉我我做错了什么吗?
我希望使用向上箭头增加数字并使用向下箭头减少数字。
我同意@Remy Lebeau,
根据文档:第7步:创建上下控件
当用户点击控件的时候让控件向上计数 向上箭头,必须设置上下控件的范围和方向。你 通过向控件发送一条
消息来完成此操作,其中包含 上限和下限值。UDM_SETRANGE
这是代码:
SendMessage(ud1, UDM_SETRANGE, 0, UDM_GETRANGE);
您可以参考示例:上下控制示例代码