3

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

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

我想在静态文本控件上显示轨迹栏值,所以我写道:

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 值并将其实时显示在静态文本控件上?

4

4 回答 4

4

请务必阅读 Trackbar 的SDK 文档。标题为“跟踪栏通知消息”的部分告诉您控件如何告诉您有关位置的信息。

请注意它如何记录您应该侦听 WM_HSCROLL 或 WM_VSCROLL 消息。

于 2012-12-09T16:21:29.110 回答
2

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

于 2013-03-08T19:50:44.937 回答
2

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

于 2012-12-09T14:49:20.007 回答
1

我已经解决了我的问题。

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

来自 MSDN:

轨迹栏通过向父窗口发送 WM_HSCROLL 或 WM_VSCROLL 消息来通知其父窗口用户操作。具有 TBS_HORZ 样式的轨迹栏发送 WM_HSCROLL 消息。具有 TBS_VERT 样式的轨迹栏发送 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;
于 2012-12-09T16:54:00.437 回答