Примітка Вставимо кнопки селектора в рамку елемента управління

Встановимо прапорці, надаючи їм повідомлення bm_setcheck функцією SendDlgItemMessage():

LRESULT WINAPI SendDlgItemMessageW(HWND hDlg, int nIDDlgItem,

UINT Msg, WPARAM wParam, LPARAM lParam);

Функція приймає дескриптор вікна hDlg діалогу, ідентифікатор кнопки і повідомлення bm_setcheck.

Для відображення стану горизонтальної та вертикальної смуги прокручування ми вставили два статичні елементи з ідентифікаторами idc_hscr та idc_vscr. Відобразимо в них значення змінних scrlh та scrlv функцією SetDlgitemint():

BOOL WINAPI SetDlgItemInt(HWND hDlg, int nIDDlgItem, UINT uValue,

Функція приймає: hDlg – дескриптор вікна, nIDDlgItem – ідентифікатор елемента управління, uValue – змінну цілого типу, bSigned – ознака виведення числа зі знаком.

Потрібно отримати дескриптор смуги прокручування функцією GetDlgitem():

HWND WINAPI GetDlgItem(HWND hDlg, int nIDDlgItem);

Це спеціалізована функція для діалогового вікна, яка дозволяє за ідентифікатором елемента управління niDDlgitem отримати його дескриптор.

Тепер потрібно встановити діапазон для горизонтальної смуги прокручування. Це робиться за допомогою функції SetScrollRange():

BOOL WINAPI SetScrollRange(HWND hWnd, int nBar, int nMinPos, int nMaxPos, BOOL bRedraw);

Першим параметром вказуємо дескриптор смуги прокручування. Другий параметр має значення SB_CTL, що ідентифікує смугу прокручування як елемент керування, а не властивість вікна, де він приймав значення sb_horz та sb_vert.

Потім задається поточна позиція движка функцією setscrollPos():

int WINAPI SetScrollPos(HWND hWnd,int nBar,intnPos,BOOL bRedraw);

Перші два параметри мають той самий сенс, що й у попередній функції, третій параметр - позиція движка, а останній параметр - ознака перемальовки.

Параметри вертикальної смуги прокручування встановлюємо аналогічно.

Для первинного заповнення списку ми описали глобальному масив покажчиків tchar *list[], де значення присвоєно лише 3-м першим елементам.

Отримаємо дескриптор списку hWndList і в циклі заповнимо список, передаючи повідомлення lb_addstring, де вказівник на рядок поміщаємо в lParam з явним перетворенням типу, інакше компілятор не зможе побудувати код цього виразу. Константа List_size описана на глобальному рівні та дорівнює 3.

Для відображення виділеного елемента надсилаємо списку повідомлення

LB_SETCURSEL, передаючи в wParam значення індексу lIndex.

Опишемо на глобальному рівні масив покажчиків tchar * combo [] для початкової ініціалізації комбінованого списку.

Далі все робиться так, як у списку, тільки префікс повідомлень замість LB буде cb.