Считать значение элемента управления Trackbar в программе C ++ / WinAPI

Я пишу простое приложение с графическим интерфейсом в Visual C ++ / Windows API. У меня есть элемент управления 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 и показать его на статическом текстовом контроле в реальном времени?

3

Решение

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

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

4

Другие решения

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

2

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

2

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

Для других, которым нужно решение:

Из 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;
1
По вопросам рекламы [email protected]