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

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

Оба кода не работают. Первый не дает никаких действий, второй вешает приложение.

Мой вопрос: как получить значение трекбара и показать его на статическом текстовом элементе управления в режиме реального времени?


person David    schedule 09.12.2012    source источник


Ответы (4)


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

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

person Hans Passant    schedule 09.12.2012

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

person Alex F    schedule 09.12.2012

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

person Vidar Hasfjord    schedule 08.03.2013

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

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

Из 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;
person David    schedule 09.12.2012