在 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】:您的代码中的1045
和1044
是什么?可能您的意思是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 控件值的主要内容,如果未能解决你的问题,请参考以下文章