Read Trackbar control value in C++/WinAPI program

Refresh

December 2018

Views

4.1k time

3

I am writing a simple GUI application in Visual C++/Windows API. I have a Trackbar control on the dialogbox defined in resources as:

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

I want to show the trackbar value on static text control, so I wrote:

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;

I tried also:

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;

Both codes doesn't work. First gives no action, second hangs the application.

My question is: How to get Trackbar value and show it on static text control in real time?

4 answers

2

Что 1045и 1044в вашем коде? Возможно , вы имели в виду IDC_SLIDER1045и статический элемент управления идентификатор ресурса. В случае необходимости, включать resource.hв исходный файл.

4

Обязательно прочитайте документацию SDK для TrackBar. Раздел под названием «TrackBar Notification сообщение» говорит вам , как управление сообщает вам о позиции.

Обратите внимание, что документы, которые вы должны слушать сообщение WM_HSCROLL или WM_VSCROLL.

2

Как и другие ответы указали, TrackBar управления отправить традиционные WM_HSCROLL и уведомления WM_VSCROLL сообщение, при условии , что соответствующий стиль управления установлен. Тем не менее, эти уведомления поддерживают только 16-битный диапазон. Так как Windows Vista, то API включает в себя новые уведомления WM_NOTIFY на основе TRBN_THUMBPOSCHANGING , которая передает 32-битовые данные позиции в сопроводительной структуре NMTRBTHUMBPOSCHANGING .

1

Я решил мой вопрос.

Для других, которые нуждаются в решении:

Из MSDN:

TrackBar уведомляет его родительское окно действий пользователя, послав родитель WM_HSCROLL или WM_VSCROLL сообщения. TrackBar со стилем TBS_HORZ посылает сообщения WM_HSCROLL. TrackBar со стилем 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;