switch (LOWORD (wParam))
{
. . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
//Работа со списком
case IDC_LIST1:
//извещения можно анализировать по старшему слову wParam. Все извещения от списка
//начинаются LBN_ их много, описание смотри в MSDN
if (HIWORD(wParam) == LBN_DBLCLK || HIWORD(wParam) == LBN_SELCHANGE)
{
//дадим сообщение, что работаем со списком
MessageBox(hWnd, "Работа в списке", "СПИСОК", MB_OK );
//получить индекс выделенной строки
ListIndex= SendMessage((HWND)lParam, LB_GETCURSEL, 0, 0);
//получить текст из списка
SendMessage((HWND)lParam, LB_GETTEXT, ListIndex, (LPARAM)szListText);
//вывести принятый текст на экран
MessageBox(hWnd, szListText, "ПРИНЯТЫЙ ТЕКСТ", MB_OK );
//а так можно дальше проанализировать двойной щелчок на списке
if (HIWORD(wParam) == CBN_DBLCLK) {/* реакция на двойное нажатие мыши*/};
}
break;
. . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCROLLBARS (Линейки прокрутки)
11. Создадим две линейки прокрутки на форме: одну вертикальную и одну горизонтальную:
Вертикальной линейке присвоим идентификатор IDC_SCROLLBAR_VER, горизонтальной - IDC_SCROLLBAR_GOR.
12. Для управления линейками создадим программный код. В отличие от других элементов формы, линейки прокрутки не передают родительскому окну сообщение WM_COMMAND. Вместо этого вертикальная линейка дает сообщение WM_VSCROLL, а горизонтальная WM_НSCROLL.
Также для инициализации линеек используются не сообщения (хотя можно и до них добраться), а специальные функции:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <commctrl.h>
#include "resource.h"
#define TEST_WM_001 102
HINSTANCE ghInstance;
HWND hList1, hCombo1, hScroll;
char cBuffer[12];
// задать начальное значение текущего положения движков линеек прокрутки
INT nTekV = 50, nTekG = 50;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
switch (wMsg)
{
// Сообщение об инициализации диалогового окна
case WM_INITDIALOG:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
//Инициализация полос прокрутки
//получить хендел окна вертикальной линейки прокрутки
hScroll = GetDlgItem (hWnd, IDC_SCROLLBAR_VER);
// установить диапазон работы от 0 до 100
SetScrollRange(hScroll, SB_CTL, 0, 100, TRUE);
// установить начальное положение движка
SetScrollPos(hScroll, SB_CTL, 50, TRUE);
// выполнить те же действия для горизонтальной линейки
hScroll = GetDlgItem (hWnd, IDC_SCROLLBAR_GOR);
SetScrollRange(hScroll, SB_CTL, 0, 100, TRUE);
SetScrollPos(hScroll, SB_CTL, 50, TRUE);
break;
//ПРИМЕР ОБРАБОТКИ СООБЩЕНИЙ ОТ ЛИНЕЕК ПРОКРУТКИ
//Вертикальная полоса прокрутки
case WM_VSCROLL:
//анализ типа извещений проводится по нижнему слову wParam. Все извещения
//начинаются с SB_ , перечень которых можно найти в MSDN
switch (LOWORD(wParam))
{
case SB_PAGEUP: nTekV = max(0, nTekV-10); break;
case SB_LINEUP: nTekV = max(0, nTekV-1); break;
case SB_PAGEDOWN: nTekV = min(100, nTekV+10); break;
case SB_LINEDOWN: nTekV = min(100, nTekV+1); break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK: nTekV = HIWORD(wParam); break;
}
SetScrollPos((HWND)lParam, SB_CTL, nTekV, TRUE);
break;
// Горизонтальная полоса прокрутки
case WM_HSCROLL:
switch (LOWORD(wParam))
{
case SB_PAGEUP: nTekG = max(0, nTekG - 10); break;
case SB_LINEUP: nTekG = max(0, nTekG - 1); break;
case SB_PAGEDOWN: nTekG = min(100, nTekG + 10); break;
case SB_LINEDOWN: nTekG = min(100, nTekG + 1); break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK: nTekG = HIWORD(wParam); break;
}
SetScrollPos((HWND)lParam, SB_CTL, nTekG, TRUE);
break;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
В результате компилирования и запуска программы теперь имеем:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.