Примітка Вставимо кнопки селектора в рамку елемента управління
Встановимо прапорці, надаючи їм повідомлення 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.