在 C++/WinAPI 程序中读取 Trackbar 控件值

Posted

技术标签:

【中文标题】在 C++/WinAPI 程序中读取 Trackbar 控件值【英文标题】:Read Trackbar control value in C++/WinAPI program 【发布时间】:2012-12-09 14:34:38 【问题描述】:

我正在用 Visual C++/Windows API 编写一个简单的 GUI 应用程序。我在资源中定义的对话框上有一个 Trackbar 控件:

CONTROL "",IDC_SLIDER1045,"msctls_trackbar32",0x50010000,23,52,141,16,0x00000000

我想在静态文本控件上显示trackbar值,所以我写了:

case WM_NOTIFY:
if(lParam == TRBN_THUMBPOSCHANGING)

    Pos1 = SendMessage(GetDlgItem(hwndDlg, 1045), TBM_GETPOS, 0, 0);

    wsprintf(szPos1, "Change IP address every %d minutes", Pos1);

    SetDlgItemText(hwndDlg, 1044, szPos1);

break;

我也试过了:

case WM_NOTIFY:
    Pos1 = SendMessage(GetDlgItem(hwndDlg, 1045), TBM_GETPOS, 0, 0);

    wsprintf(szPos1, "Change IP address every %d minutes", Pos1);

    SetDlgItemText(hwndDlg, 1044, szPos1);
break;

这两个代码都不起作用。首先不执行任何操作,然后挂起应用程序。

我的问题是:如何获取 Trackbar 值并实时显示在静态文本控件上?

【问题讨论】:

【参考方案1】:

请务必阅读 Trackbar 的 SDK documentation。标题为“Trackbar Notification Messages”的部分告诉您控件如何告诉您有关位置的信息。

注意它是如何记录您应该监听 WM_HSCROLL 或 WM_VSCROLL 消息的。

【讨论】:

【参考方案2】:

您的代码中的10451044 是什么?可能您的意思是IDC_SLIDER1045 和静态控制资源ID。如有必要,将resource.h 包含到源文件中。

【讨论】:

【参考方案3】:

正如其他答案所指出的,只要设置了适当的控件样式,Trackbar 控件就会发送传统的 WM_HSCROLL 和 WM_VSCROLL 通知消息。但是,这些通知仅支持 16 位范围。从 Windows Vista 开始,API 包括新的基于 WM_NOTIFY 的通知 TRBN_THUMBPOSCHANGING,它在随附的结构 NMTRBTHUMBPOSCHANGING 中发送 32 位位置数据。

【讨论】:

【参考方案4】:

我的问题已经解决了。

对于其他需要解决方案的人:

来自 MSDN:

轨迹栏通过发送 父 WM_HSCROLL 或 WM_VSCROLL 消息。带有 TBS_HORZ 样式发送 WM_HSCROLL 消息。带有 TBS_VERT 的轨迹栏 style 发送 WM_VSCROLL 消息。

代码:

case WM_HSCROLL:
    Pos1 = SendMessage(GetDlgItem(hwndDlg, IDC_SLIDER1045), TBM_GETPOS, 0, 0);

    wsprintf(szPos1, "Change IP address every %d minutes", Pos1);

    SetDlgItemText(hwndDlg, IDC_CHECKBOX1044, szPos1);
break;

【讨论】:

以上是关于在 C++/WinAPI 程序中读取 Trackbar 控件值的主要内容,如果未能解决你的问题,请参考以下文章

C#。 WinApi。在窗口上绘制

使用 WinAPI 的应用程序设置

如何在c ++ winapi中获取活动文件资源管理器窗口的路径

关于VC++的Winmain函数(WINAPI是啥?)

WinAPI 鼠标点击无法正常工作

c++ winapi线程