Я пишу простое приложение с графическим интерфейсом в 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 и показать его на статическом текстовом контроле в реальном времени?
Обязательно прочитайте SDK документация для трекбара. Раздел под названием «Сообщения уведомлений о трекбар» рассказывает, как элемент управления сообщает вам о позиции.
Обратите внимание, как в нем указано, что вы должны прослушивать сообщение WM_HSCROLL или WM_VSCROLL.
Что 1045
а также 1044
в вашем коде? Возможно, вы имеете в виду IDC_SLIDER1045
и статический идентификатор ресурса управления. При необходимости включите resource.h
в исходный файл.
Как указывалось в других ответах, элементы управления Trackbar отправляют традиционные уведомления WM_HSCROLL и WM_VSCROLL при условии, что установлен соответствующий стиль элемента управления. Однако эти уведомления поддерживают только 16-битный диапазон. Начиная с Windows Vista, API включает новое уведомление на основе WM_NOTIFY TRBN_THUMBPOSCHANGING, который отправляет 32-битные данные о положении в сопровождающей структуре NMTRBTHUMBPOSCHANGING.
Я решил свой вопрос.
Для других, которым нужно решение:
Из 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;