Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler Підручник.doc
Скачиваний:
3
Добавлен:
16.07.2019
Размер:
531.46 Кб
Скачать

Assembler Підручник

http://www.grinchuk.lviv.ua/books/78.html

Вступ

Програмування за допомогою системних повідомлень

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

Повідомлення для вікон класу "Button"

Повідомлення від вікон класу "ComboBox"

Повідомлення для керування діалоговими вікнами

Повідомлення для керування вікнами класу ListBox

Нотифікаційні повідомлення SysTabControl32

Група команд MCI

Повідомлення вікон SysTreeView32

Повідомлення вікон SysTreeView32

Додавання пунктів у SysTreeVieew32

1.Вступ Якщо певні об’єкти мають дуже складну структуру, щоб її аналізувати, якщо їх поведінку не можливо описати достатньо простими засобами і поняттями, то на поміч приходять таки засоби спілкування між об’єктами, як обмін повідомленнями. Кожний складний об’єкт в операційній системі Windows (наприклад, вікно) являє собою “чорний ящик”, на вхід якого користувач може надсилати повідомлення в спеціальному форматі. Клавіатура і «миша» з точки зору програміста також є джерелом повідомлень, які поступають у вікна, які отримали фокус вводу. Отримавши повідомлення, об’єкт може “відгукнутись” іншим повідомленням, яке як правило, підкріплюється певною дією. Іншими “магічними закляттями” в системі Windows є функції. Функції API – це більш потужний засіб програмування, ніж повідомлення, але в рамках одного посібника не можливо охопити всі функції, яких існує понад 4000. Ми розглянемо лише ті функції, які пов’язані з повідомленнями. Отже, система повідомлень в Windows є певною універсальною мовою для керування об’єктами. Незнання цієї мови не просто обмежує можливості програміста, але і ускладнює вивчення інших алгоритмічних мов програмування, які будуть застосовуватись в Windows.

Програмування за допомогою системних повідомлень

Операційна система WINDOWS з самого початку свого існування була спроектована як система для паралельного програмування. Розробники WINDOWS започаткували ідею клієнт-серверної взаємодії, яку поклали в основу своєї системи. Таким чином, в системі (надалі ми так будемо називати спільні властивості всіх операційних систем WINDOWS) всі процеси виконують певні дії для своїх клієнтів. Той процес, який виконує певну дію називається сервером, а той процес, для якого виконується дія, називається клієнтом. Звичайно, що один програмний модуль може бути одночасно і сервером, і клієнтом. Клієнт і сервер обмінюються повідомленнями, або мають спільні блоки пам’яті.

Ядро операційної системи складається з множини файлів типу *.DLL (Dynamic Link Libraries), які є постачальниками певних послуг для клієнтів. Ці послуги доступні клієнтам через так звані функції API (Application Programming Interface). Кожний DLL-файл містить певну кількість таких функцій. При старті системи деякі з цих файлів завантажуються в пам’ять. Якщо для виконання програми необхідна певна функція API, яка знаходиться у DLL-файлі, який не був завантажений, то ініціатор програм завантажить потрібний DLL-файл разом з вашою програмою. Кількість функцій API постійно зростає при переході до нової версії системи, тому, якщо програма не використовує прямих засобів доступу до обладнання, а користується лише функціями API, то для таких програм забезпечується сумісність знизу уверх.

Серед функцій API, які найчастіше використовуються, є функція SendMessageA, яка надсилає так звані повідомлення в чергу будь-якого процесу. Як правило, процеси отримують повідомлення з черги за допомогою функції GetMessageA. Поняття повідомлення було введено розробниками системи для того, щоб позначити запити від клієнтів, або події в системі, які найбільш часто зустрічаються. Більшість повідомлень призначена для керування програмними засобами вводу/виводу – вікнами.

Історично так склалося, що програма і засоби спілкування з нею були розділені. Коли програма утворює вікно, система вводить новий об’єкт, який функціонує паралельно і незалежно від програми, яка його утворила. Цей об’єкт називається “віконна процедура”. Віконна процедура є сервером вікна. Вона виконує всі дії, які замовляє процес-клієнт за допомогою повідомлень, кожне з яких запускає віконну процедуру з відповідними параметрами за допомогою функції DispatchMessage.

Для спрощення керування вікнами їх організовують в ієрархічну структуру. Старше вікно називають батьківським (parent), а молодше – дочірнім (child). Спеціалізовані вікна називають контролами (Controls). Вони мають свої стандартизовані назви (класи) і є дочірніми вікнами деякого батьківського вікна, яке відповідає за ввід будь-яких параметрів. Контролами можна керувати так само, як і звичайними вікнами – за допомогою керуючих повідомлень. Деякі функції API для зручності дублюють можливості, які надає система повідомлень.

Існують також інші функції відправки повідомлень, які призначені для драйверів (SendDriverMessage) та функції відправки повідомлень до паралельних ниток-процесів (PostThreadMessageA). Повідомлення, які призначені не для керування, а для інформування системи та інших клієнтів про певні події, називаються нотифікаційними. Всі нотифікаційні повідомлення від дочірніх вікон мають код 4Eh і позначаються назвою WM_NOTIFY. Розрізняються вони лише параметрами wParam та lParam. Виключення складає повідомлення WM_COMMAND, яке надходить від дочірніх кнопок.

Наступний фундаментальний принцип програмування в системі WINDOWS - це стандартизація всіх назв: подій, параметрів, функцій, повідомлень і структур даних, не залежно від мови і засобів програмування в яких вони використовуються. Такі стандарти існують у вигляді спеціальних файлів, які ставлять у відповідність до будь-якої назви певну константу або шаблон структури даних. Цими константами система користується на асемблерному рівні програмування. Наприклад, виклик довільної функції API з N параметрами виглядає так:

Push

..................

Push <2-й параметр>

Push <1-й параметр>

Call <адреса функції>.

Результатом такого виклику функції буде деяка константа або індекс в регістрі EAX. Нуль або 0ffffffffh як правило означають помилку.

Всі параметрами є певними стандартизованими 4-х байтними константами, або 4-х байтними адресами стандартизованих структур даних. Адреса точки входу в функцію API також є стандартизованою 4-х байтною величиною. Всі змінні в захищеному режимі також мають стандартну довжину - 4 байти. Стандартизація назв цих констант, функцій, та назв структур даних існує лише на рівні системної документації. Якщо назви деяких функцій закінчуються на велику літеру “A”, то це означає, що в параметрах функцій зустрічаються текстові рядки в кодуванні ANSI (1 байт на символ), а аналогічні функції з великим символом “W” на кінці означають використання рядків в стандарті UNICODE (2 байти на один символ). Всі рядки передаються через змінну, яка містить їхню адресу в пам’яті. Якщо послідовність символів в пам’яті має символ NULL з кодом 0, то цей символ для ANSI вважається кінцем рядка (для UNICODE – два нуля).

Керуючі повідомлення до вікон являють собою стандартизовану структуру з назвою MSG (рис.1), яка складається з наступних чотирьохбайтних змінних:

Hwnd - хендл вікна, в яке поступило повідомлення;

Message – код, який означає дію, яку треба виконати;

wParam – параметр, який залежить від дії;

lParam - параметр, який залежить від дії;

time – час, коли було відправлено повідомлення;

pt_X – горизонтальна координатa курсору, коли було відправлено повідомлення;

pt_Y – вертикальна координатa курсору, коли було відправлено повідомлення;

Програма може отримати повідомлення за допомогою API-функцій GetMessageA та PeekMessageA, які при отриманні повідомлення заповнять шаблон цієї структури. Надіслати повідомлення можна будь-якою з наступних функцій:

SendMessageA - відправити повідомлення і чекати відповіді;

PostMessageA - відправити повідомлення в чергу і йти далі;

Таке розділення є причиною того, що при паралельній обробці можливі ситуації, коли завершення обробки одного повідомлення залежить від результатів обробки інших повідомлень. Таким чином, якщо користуватися лише функцією SendMessageA, то можливі взаємні блокування процесів (deadlock). Отже, коли не потрібна відповідь на повідомлення, то рекомендується користуватись функцією PostMessageA.

SendMessageCallbackA – Отримати негайну (позачергову) відповідь на повідомлення та результат передати Callback-функції, яка паралельно з основною програмою буде опрацьовувати результат відповіді;

SendMessageTimeoutA – відправити повідомлення вікну і якщо відповіді немає, то чекати певний час;

BroadcastSystemMessage – відправити повідомлення в чергу до певних процесів або драйверів, чекаючи або не чекаючи відповіді.

При надсиланні повідомлення система сформує вказану структуру MSG яку можна буде отримати в іншому процесі. Перші чотири значення структури MSG формуються програмістом за допомогою функції SendMessageA, а три наступних параметри автоматично формуються операційною системою (див. рис.1). Для того, щоб прийняти повідомлення, необхідно оголосити структуру MSG в програмі і виконати одну з наступних функцій:

GetMessageA – чекати повідомлення, і отримати результат в EAX;

PeekMessageA – перевірити, чи є повідомлення в черзі.

Як видно з малюка, функція SendMessageA повертає в регістрі EAX певне 4-х байтове значення, яке ми будемо на кожній сторінці називати результатом повідомлення.

В даному посібнику будуть розглянуті коди повідомлень з їх символічними назвами, а також зміст їх дії і зміст параметрів wParam та lParam. Крім того, будуть дані практичні рекомендації по їх використанню та приклади їх застосування на асемблері, що цілком зрозуміло й виправдано.

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

Для створення вікна будь-який процес, в тому числі і процеси операційної системи, викликають функцію CreateWindowExA. В параметрах цієї функції необхідно вказувати координати, розмір, а також клас та стилі вікна. В наступній таблиці подані назви стандартних класів вікон (контролів), які існують у Windows:

Стандартні класи вікон.

Назва класу

Зовнішній вигляд вікон даного класу

Button Кнопка, відмітка

ComboBox Спадаючий список

з вікном редагування

Edit Вікно редагування

ListBox Список

Message Повідомлення

ScrollBar Індикатор зсуву

Static Статичне зображення

SysAnimate32 Рухаючийся малюнок

SysHeader32 Заголовок вікна

SysTreeView32 Дерево для перегляду

SysTabControl32 Закладка

SysTreeView32 Дерево для перегляду

tooltips_class32 Спливаюча підказка

ToolTips Підказка, роз’яснення

ToolbarWindow32 Панель інструментів

msctls_hotkey32 Гаряча клавіша

msctls_progress32 Індикатор виконання

msctls_statusbar32 Статусне вікно

msctls_trackbar32 Регулювач

msctls_updown32 Пара стрілок протилежного напрямку

Кожен клас має свої стандартні стилі. Стилі для кожного класу мають стандартні назви, перші символи яких подані нижче в таблиці:

Таблиця 2. Символічні назви стилів.

Перші символи назви стилю

Клас вікон, до якого належить стиль

ES_ Edit – вікно для редагування тексту

SS_ Static – вікно для відображення статичних зображень

BS_ Button – вікно типу кнопка або відмітка

CBS_ ComboBox – комбінація вікон Edit та ListBox

LBS_ ListBox – список з можливістю вибору

LVS_ SysListView32 – список з іконками

SBS_ ScrollBar – індикатор зсуву тексту

TBS_ Msctls_trackbar32 – трикутний повзунок

TCS_ SysTabControl32 – закладка в таблиці

TVS_ SysTreeView32 – дерево каталогів

PBS_ Msctls_progress32 – індикатор виконання

UDS_ Msctls_updown32 – дві кнопки зі стрілками

ACS_ SysAnimate32 – вікно для анімації зображення

Існують спільні для всіх класів стилі вікон, які позначаються першими символами WS_ (від англійського window styles). Ці спільні для всіх вікон стилі кодуються старшим словом чотирьохбайтного числа, а стилі, що відносяться до специфічних класів – молодшим словом цього ж числа, яке є одним з параметрів функції CreateWindowExA. Отже, спільні для всіх класів стилі вікон подані нижче в таблиці:

Константа

Вікно має наступні властивості:

WS_MAXIMIZEBOX Існує кнопка максимізації вікна

WS_MINIMIZEBOX Існує кнопка мінімізації вікна

WS_THICKFRAME Можна змінювати розмір, якщо тягнути за край

WS_SYSMENU Має іконку системного меню

WS_HSCROLL Має дочірнє вікно – горизонтальний ScrollBar

WS_VSCROLL Має дочірнє вікно – вертикальний ScrollBar

WS_DLGFRAME Буде відображатися на панелі задач

WS_BORDER Тоненька рамка

WS_MAXIMIZE При створенні має максимальний розмір

WS_CLIPCHILDREN Не закриває дочірніх вікон

WS_CLIPSIBLINGS Перемальовує дочірні вікна

WS_DISABLED Не переключається на панелі задач

WS_VISIBLE Вікно є видимим одразу ж після створення

WS_MINIMIZE Після створення відображається в згорнутому виді

WS_OVERLAPPED Вікно, що має заголовок з назвою

WS_CHILD Дочірнє вікно, змінює координати разом з основним

WS_POPUP Спливаюче вікно, яке немає заголовку

Дочірні вікна, як і всі вікна, створюються функцією API CreateWindowExA. При створенні дочірнього вікна в параметрах обов’язково вказується його власник і загальний стиль WS_CHILD. Параметр, який містить для звичайних вікон хендл меню, визначає ідентифікатор дочірнього вікна.

Події, що відбуваються у дочірніх вікнах передається у батьківське вікно як параметр повідомлення WM_NOTIFY. Друге важливе повідомлення, яке передається у батьківське вікно від дочірнього ? це WM_COMMAND. Це повідомлення є основним для дочірніх вікон класу Button.

Переходимо безпосередньо до переліку повідомлень. Повідомлення має свій код, та два 4-х байтні параметри: wParam та lParam, зміст яких для кожного повідомлення роз’яснюється. Серед повідомлень будуть зустрічатися коментарі, які уточнюють дію повідомлення в залежності від стилю вікна. Нагадую, що стиль вікна – це в основному набір бітових прапорців, які вказують на ту чи іншу характеристику вікна. Наприклад, якщо вказано, що вікно повинно мати стиль 10h, то це означає, що в змінній стилю встановлений біт 00000000000000000000000000010000b. Біля символічної назви повідомлення в дужках вказується код, який вставляється у поле Message (див.Рис.1). Якщо в змінній wParam чи lParam вказується адреса рядка, то цей рядок завжди закінчується нульовим символом (0h).

Повідомлення для вікон класу "Button"

BM_CLICK (0F5h)

Коли вікно класу Button отримує повідомлення BM_CLICK, то воно відображає дію, що еквівалентна кліку миші. В результаті надсилання цього повідомлення вікно отримує послідовність WM_LBUTTONDOWN - натиснення лівої кнопки миші, WM_LBUTTONUP - відпускання лівої кнопки миші, а батьківське вікно отримує повідомлення BN_CLICKED - нотифікаційне повідомлення.

wParam = 0;

lParam = 0.

Якщо кнопка знаходиться у діалоговому вікні і діалогове вікно не є активним, то повідомлення BM_CLICK не може бути передано. Для надійної передачі повідомлення необхідно перед тим викликати функцію SetActiveWindow для активізації діалогового вікна в яке буде передано повідомлення.

BM_GETCHECK (0F0h)

Програма надсилає повідомлення BM_GETCHECK для отримання стану radio-кнопки або відмітки.

wParam = 0;

lParam = 0.

Якщо кнопка була створена в одному з наступних стандартних стилів: BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, BS_AUTO3STATE, BS_CHECKBOX, BS_RADIOBUTTON, або BS_3STATE, то в EAX повертається одне з наступних значень:

0h (BST_UNCHECKED) - Кнопка витерта, або має нестандартний стиль.

01h (BST_CHECKED) - Кнопка готова для тестування.

02h (BST_INDETERMINATE) - Кнопка знаходиться в сірому стані, який означає неможливість визначення її стану (застосовується для кнопок, що були утворені в стилі BS_3STATE або BS_AUTO3STATE.

BM_GETIMAGE (0F6h)

Програма надсилає повідомлення BM_GETIMAGE для отримання хендлу зображення, яке асоційоване з даною кнопкою.

wParam = тип зображення що асоційовано з даною кнопкою. Цей параметр може приймати одне з наступних значень:

0h (IMAGE_BITMAP) - зображення є бітовим файлом

01h (IMAGE_ICON) - зображення є іконкою

lParam = 0.

Повідомлення повертає хендл зображення в EAX.

BM_GETSTATE (0F2h)

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

wParam = 0;

lParam = 0.

Значення, що повертається в EAX визначає поточний стан кнопки і є комбінацією певних бітових ознак, які означають наступне:

0h (BST_UNCHECKED) - Відмітка витерта, або кнопка має нестандартний стиль.

01h (BST_CHECKED) – Відмітка стоїть.

02h (BST_INDETERMINATE) - Кнопка знаходиться в сірому стані, який означає неможливість визначення її стану (вікно кнопки має стиль BS_3STATE = 5 або BS_AUTO3STATE = 6).

04h (BST_PUSHED) – Кнопка натиснута в даний момент.

08h (BST_FOCUS) – Кнопка має фокус вводу і сприймає повідомлення від клавіатури;

Значення 03h = 01h or 02h визначає стан відмітки radio-кнопки. Нульове значення ідентифікує що відмітки немає; значення 01h означає, що відмітка зроблена. Radio-кнопка вибрана, коли вона в середині має точку. Значення 02h означає, що стан відмітки визначити неможливо і вона виглядає сірою.

BM_SETCHECK (0F1h)

Програма надсилає повідомлення BM_SETCHECK для встановлення стану відмітки або radio-кнопки. Повідомлення не дає ефекту для кнопок, які натискаються.

wParam = стан відмітки, який може приймати одне з наступних значень:

0h (BST_UNCHECKED) – Витирає відмітку.

01h (BST_CHECKED) – Встановлює відмітку.

02h (BST_INDETERMINATE) – Встановлює відмітку або кнопку в сірий колір, який ідентифікує, що кнопка 0. Використовується лише для кнопок, що утворені в стилі BS_3STATE або BS_AUTO3STATE.

BM_SETIMAGE (0F7h)

Програма надсилає повідомлення BM_SETIMAGE для встановлення нового малюнка на кнопці.

wParam = тип зображення що асоційовано з даною кнопкою. Цей параметр може приймати одне з наступних значень:

0h (IMAGE_BITMAP) - зображення є бітовим файлом

01h (IMAGE_ICON) - зображення є іконкою

lParam = хендл зображення, що асоціюється з кнопкою.

Значення, що повертається є хендлом попереднього зображення, яке було асоційовано з кнопкою. Якщо кнопка немала зображення, то повертається нуль.

BM_SETSTATE (0F3h)

Програма надсилає повідомлення BM_SETSTATE для зміни підсвітки кнопки. Стан підсвітки буде виглядати так, що ніби користувач натиснув і утримує її.

wParam = визначає, чи кнопка буде натиснута:

0ffffffffh - встановлює кнопку у натиснутий стан.

0h - відпускає кнопку.

LParam =0.

Повідомлення діє лише на видимі кнопки. Вона не діє на відмітки і radio-кнопки. Кнопка відпускається, якщо користувач позиціонував на ній курсор та клацнув на ній.

BM_SETSTYLE (0F4h)

Програма надсилає повідомлення BM_SETSTYLE для зміну стилю кнопки.

wParam = прапорці стилів кнопки.

lParam = атрибут перемальовування:

0ffffffffh - перемальовує кнопку;

0h – кнопка не перемальовується.

Нотифікаційні повідомлення від вікон класу Button.

Повідомлення, які надходять від дочірніх вікон називаються нотифікаційними. Від кнопок надходить повідомлення WM_COMMAND.

WM_COMMAND (111h)

Повідомляє батьківське вікно, що у дочірньому вікні (кнопці) відбувається певна подія.

молодше слово wParam містить ідентифікатор кнопки.

Старше слово wParam містить один з нотифікаційних кодів, який відображає подію, яка відбувається з кнопкою:

0h (BN_CLICKED) – користувач натискає кнопку.

05h (BN_DBLCLK) - користувач робить подвійний клік на кнопці. Ця нотифікація відсилається автоматично, якщо кнопка має стиль BS_USERBUTTON (08h), BS_RADIOBUTTON (04h), або BS_OWNERDRAW (0Bh). Інші типи кнопок відсилають BN_DBLCLK лише тоді, коли вони мають стиль BS_NOTIFY (4000h).

07h (BN_KILLFOCUS) - відсилається, коли кнопка втрачає фокус клавіатури. Для відсилки цього повідомлення кнопка повинна мати стиль BS_NOTIFY.

06h (BN_SETFOCUS) - відсилається, коли кнопка отримує фокус клавіатури. Кнопка повинна мати стиль BS_NOTIFY (4000h) для відсилки цього повідомлення.

lParam – хендл дочірнього вікна.

WM_CTLCOLORBTN (135h)

надсилається у батьківське вікно перед малюванням кнопки. Батьківське вікно може змінити текст кнопки та фоновий колір. Однак, лише кнопки стилю BS_OWNERDRAW (0Bh) надсилають це повідомлення. Якщо користувач хоче змінити фоновий малюнок кнопки, то в регістрі EAX віконної процедури у відповідь на WM_COMMAND він повинен вернути хендл кисті, яка буде замальовувати фон кнопки. За замовченням функція DefWindowProc визначає системні кольори кнопки. Кнопки стилів BS_PUSHBUTTON (0h), BS_DEFPUSHBUTTON (1h), або BS_PUSHLIKE (1000h) не змінюють фону кнопки. Кнопки цих стилів завжди малюються системними кольорами. Малювання кнопок вимагає декількох різних кистей – лицьової, підсвітки та натиснутої.

Для забезпечення звичайного появлення для кнопок, що натискаються, використовуйте кнопки стилю BS_OWNERDRAW (0Bh).

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

Це повідомлення не пересилається між окремими процесами.

Воно пересилається тільки в межах одного процесу. Можна змінити колір тексту відмітки чи radio-кнопки. Прямокутник фокусу для цих кнопок залишиться по замовченню. Колір тексту групи кнопок також можна змінити. Якщо діалогове вікно процедури повертає 0, то виконується обробка повідомлень по замовченню, інакше процедура обробки повертає безпосередньо інше значення.

Повідомлення від вікон класу "ComboBox"

CB_ADDSTRING (143h)

Надсилається для додавання рядка в список рядків ComboBox. Якщо ComboBox не має стилю CBS_SORT, то рядок додається в кінець списку, інакше він додається в список в алфавітному порядку.

wParam = 0;

lParam = адреса рядка.

Якщо повідомлення виконано успішно, то повідомлення повертає в регістрі EAX індекс рядка, який був доданий. Інакше повертає значення 0ffffffffh (CB_ERR). Якщо помилка виникає в результаті нестачі місця в пам’яті, то в EAX вертається значення 0fffffffeh (CB_ERRSPACE). Якщо ви створюєте ComboBox з стилем 100h (CBS_SORT), але без стилю 200h (CBS_HASSTRINGS), то повідомлення WM_COMPAREITEM (039h) надсилається один або декілька разів до батьківського вікна при порівнянні в процесі сортування. Якщо процедура батьківського вікна вертає в EAX значення 0ffffffffh, то необхідно рухатись вперед; якщо вертає значення 0, то пункти еквівалентні і місце для вставки знайдено; якщо процедура вертає 1, то необхідно рухатись назад.

Якщо блок списку комбінованого блоку не відсортований, рядок міститься в кінець списку. Якщо комбінований блок має стиль cbs_OwnerDrawFixed чи cbs_OwnerDrawVariable і не має стилю cbs_HasString, то lParam є 32-бітовим значенням, яке запам'ятовується замість адреси рядка, і кожен елемент, що додається, порівнюється з іншими елементами і при кожному порівнянні власнику вікна надсилається повідомлення WM_COMPAREITEM (039h).

CB_DELETESTRING (144h)

Повідомлення надсилається у ComboBox для знищення одного з рядків його списку.

wParam = індекс пункту, який необхідно знищити;

lParam = 0;

Повідомлення повертає кількість рядків, що залишилися в списку. Якщо знищити вказаний рядок неможливо, то функція вертає 0ffffffffh (CB_ERR).

Якщо повідомлення надсилається вікну ComboBox, яке не має стилю CBS_HASSTRINGS, то у відповідь на нього до батьківського вікна надсилається повідомлення WM_DELETEITEM (2Dh) для підтвердження видалення рядка значенням 1 (TRUE).

CB_DIR (145h)

Надсилається у вікно ComboBox для включення в його список імен файлів певного каталогу.

wParam = атрибути необхідних файлів;

lParam = адреса імені файлу з символами “*” та “?”;

Значення, яке повертається – індекс останнього імені файлу, доданого до списку. У випадку помилки – вертаються значення 0ffffffffh (CB_ERR) або 0fffffffeh (CB_ERRSPACE).

CB_FINDSTRING (14Ch)

Надсилається для пошуку пункту, який починається з певної послідовності символів.

wParam = індекс рядка з якого починається пошук;

lParam = адреса префіксного рядка.

Повідомлення вертає індекс знайденого рядка або 0ffffffffh (CB_ERR) при помилці.

Якщо пошук починався не з нульового рядка, то він продовжується спочатку доти, поки індекс не досягне значення wParam. Якщо wParam = 0ffffffffh, то пошук починається з нульового рядка. Пошук не залежить від регістру.

Якщо ви створюєте ComboBox, який перемальовується власником (стиль cbs_OwnerDrawFixed чи cbs_OwnerDrawVariable), але без параметру CBS_HASSTRINGS, то повідомлення CB_FINDSTRING залежить від того, чи використовується стиль CBS_SORT. Якщо ви використовуєте CBS_SORT, то до власника ComboBox надсилаються повідомлення WM_COMPAREITEM (039h) для того, щоб власник визначив, чи відповідає даний пункт заданому рядку.

CB_FINDSTRINGEXACT (158h)

Користувач надсилає це повідомлення для знаходження першого рядка списку в ComboBox, який співпадає з рядком, адреса якого вказана у lParam.

wParam = індекс рядка з якого починається пошук;

lParam = адреса рядка, який є зразком для пошуку (завершується нулем).

В іншому повідомлення еквівалентно повідомленню CB_FINDSTRING.

CB_GETCOUNT (146h)

Надсилається у ComboBox для визначення кількості пунктів у його списку.

wParam = 0;

lParam = 0;

Повідомлення вертає індекс останнього пункту в списку ComboBox або 0ffffffffh (CB_ERR) при помилці.

CB_GETCURSEL (147h)

Надсилається для визначення індексу виділеного (поточно обраного) пункту у ComboBox.

wParam = 0;

lParam = 0;

Повідомлення вертає індекс виділеного (поточно обраного) пункту в ComboBox або значення 0ffffffffh (CB_ERR) при помилці.

CB_GETDROPPEDCONTROLRECT (152h)

Надсилається для визначення позиції та розміру ComboBox на екрані.

wParam = 0;

lParam = адреса структури RECT, в яку вертаються координати.

Повідомлення завжди вертає 0.

CB_GETDROPPEDSTATE (157h)

Надсилається для того, щоб визначити, чи відкритий список пунктів у ComboBox.

wParam = 0;

lParam = 0;

Якщо список пунктів є видимим, то повідомлення вертає 1 (TRUE), інакше повідомлення вертає 0 (FALSE).

CB_GETDROPPEDWIDTH (15Fh)

Надсилається для визначення ширини списку в ComboBox з стилем CBS_DROPDOWN або CBS_DROPDOWNLIST.

wParam = 0;

lParam = 0;

Повідомлення вертає ширину списку в пікселях або 0ffffffffh (CB_ERR) при помилці.

CB_GETEDITSEL (140h)

Повертає початковий і кінцевий індекси обраного тексту в органі керування редагуванням комбінованого блоку.

wParam = вказівник на змінну, яка отримує індекс початкового виділеного символу (або 0)

lParam = вказівник на змінну, яка отримує індекс кінцевого виділеного символу (або 0)

Повідомлення повертає в регістрі EAX індекс початкового виділеного символу (у молодшому слові) та індекс кінцевого виділеного символу (у старшому слові).

CB_GETEXTENDEDUI (156h)

Надсилається для визначення чи ComboBox має стандартний чи розширений інтерфейс.

wParam = 0;

lParam = 0;

Якщо ComboBox має розширений інтерфейс, то повертає 1 (TRUE), інакше – 0 (FALSE).

За замовченням, клавіша F4 відкриває або закриває ComboBox, а клавіша “Стрілка вниз” змінює вибраний пункт. При розширеному інтерфейсі F4 не діє, а клавіша “стрілка вниз” відкриває список ComboBox.

CB_GETHORIZONTALEXTENT (15Dh)

Надсилається лише у випадку, коли ComboBox має горизонтальний ScrollBar для отримання ширини поля прокрутки.

wParam = 0;

lParam = 0;

Повідомлення повертає ширину поля прокрутки в пікселях.

CB_GETITEMDATA (150h)

Можна надсилати для отримання 4-х байтного значення, яке може бути асоційоване з пунктом.

wParam = індекс пункту;

lParam = 0;

Повідомлення вертає в регістрі EAX 4-х байтне значення, яке було асоційоване з даним пунктом (item data), або 0ffffffffh (CB_ERR) при помилці. Якщо ComboBox був створений без стилю CBS_HASSTRINGS, то повідомлення повертає значення, яке міститься в lParam повідомлень CB_ADDSTRING, CB_INSERTSTRING або CB_SETITEMDATA.

CB_GETITEMHEIGHT (154h)

Надсилається для визначення висоти пункту, або поля, яке доступно для вибору в ComboBox.

wParam = індекс пункту;

lParam = 0;

Якщо wParam = 0ffffffffh, то повідомлення вертає висоту пункту, який вибраний в даний момент. Якщо ComboBox не має стилю CBS_OWNERDRAWVARIABLE, то висота всіх пунктів однакова і wParam може дорівнювати 0.

Повідомлення вертає висоту означеного пункту в пікселях або 0ffffffffh (CB_ERR) при помилці.

CB_GETLBTEXT (148h)

Надсилається для отримання рядка із списку в ComboBox.

wParam = індекс пункту, який відповідає рядку;

lParam = адреса для отримання рядка;

Розмір буферу повинен бути достатнім для розміщення рядка. Тому перед виділенням буферу можна отримати довжину рядка за допомогою CB_GETLBTEXTLEN.

Повідомлення повертає довжину отриманого рядка, або 0ffffffffh (CB_ERR) при помилці.

Якщо ви створюєте ComboBox з стилем CBS_OWNERDRAWFIXED або CBS_OWNERDRAWVARIABLE але без стилю CBS_HASSTRINGS, то буфер для отримання рядка буде містити 4-х байтне значення, асоційоване з рядком (item data).

CB_GETLBTEXTLEN (149h)

Надсилається для отримання довжини символьного рядка із списку ComboBox.

wParam = індекс пункту, який відповідає рядку;

lParam = 0;

Повідомлення повертає в регістрі EAX довжину вказаного рядка в байтах (в Unicode деякі символи займають 2 байти). Якщо індекс більше максимального, то повідомлення вертає 0ffffffffh (CB_ERR).

CB_GETLOCALE (15Ah)

Повідомлення надсилається для отримання коду країни та коду мови для коректного сортування та відображення рядків при їх вводу у вікно, якщо ComboBox має стиль CBS_SORT.

wParam = 0;

lParam = 0;

Повідомлення вертає в старшому слові регістра EAX код країни, а в молодшому – код мови.

CB_GETTOPINDEX (15Bh)

Призначене для отримання індексу пункту, який є видимим в ComboBox. Використовується в основному для вікон, які мають вертикальний ScrollBar.

wParam = 0;

lParam = 0;

Повідомлення повертає індекс першого видимого пункту в списку. В разі помилки вертає 0ffffffffh (CB_ERR).

CB_INITSTORAGE (161h)

Надсилається перед тим, як користувач захоче додати велику кількість пунктів. Це повідомлення дозволяє системі оптимальніше розподілити пам’ять для списку.

wParam = кількість пунктів, які необхідно додати;

lParam = розмір пам’яті в байтах;

При успішному виконанні повідомлення вертає максимальну кількість пунктів, яку може запам’ятати об’єкт пам’яті. Інакше повідомлення вертає 0ffffffffh (CB_ERR).

CB_INSERTSTRING (14Ah)

Надсилається у ComboBox для вставки нового пункту у його список. На відміну від повідомлення CB_ADDSTRING дане повідомлення не використовує сортування.

wParam = індекс місця, куди вставляється новий пункт або 0ffffffffh якщо пункт додається в кінець списку;

lParam = адреса рядка з назвою пункту;

Повідомлення повертає індекс позиції, в яку вставився новий пункт; При помилці повідомлення вертає 0ffffffffh (CB_ERR) або 0fffffffeh (CB_ERRSPACE) при нестачі пам’яті.

CB_LIMITTEXT (141h)

Користувач може надсилати це повідомлення для встановлення максимальної довжини тексту, який можна вводити у вікно для редагування ComboBox.

wParam = максимальна кількість символів. Якщо цей параметр = 0, то кількість символів = 7ffffffeh;

lParam = 0;

Повідомлення завжди вертає 1 (TRUE).

CB_MSGMAX (162h)

Максимально можливе значення повідомлення для вікон класу ComboBox.

CB_RESETCONTENT (14Bh)

Дане повідомлення надсилається у ComboBox для знищення всіх пунктів в його списку.

wParam = 0;

lParam = 0;

Повідомлення завжди вертає 0. Якщо ComboBox був створений з стилем CBS_OWNERDRAWFIXED або CBS_OWNERDRAWVARIABLE але без стилю CBS_HASSTRINGS, то для кожного пункту власник ComboBox отримує повідомлення WM_DELETEITEM.

CB_SELECTSTRING (14Dh)

Якщо надсилається це повідомлення, то в списку ComboBox шукається пункт, перші символи якого співпадають з заданим рядком, і якщо такий пункт знайдено, то він вибирається для редагування.

wParam = індекс пункту з якого починається пошук;

lParam = адреса префіксного рядка;

Коли пошук досягає кінця списку, то він продовжується з початку до рядка wParam.

Якщо значення wParam = 0ffffffffh, то пошук ведеться по всьому списку.

Повідомлення повертає індекс знайденого пункту, інакше EAX = 0ffffffffh (CB_ERR).

Якщо ComboBox був створений з стилем CBS_SORT та CBS_OWNERDRAWFIXED або CBS_OWNERDRAWVARIABLE але без стилю CBS_HASSTRINGS, то в батьківське вікно надсилається повідомлення WM_COMPAREITEM (039h) при кожному порівнянні. Без стилю CBS_SORT ці вікна порівнюють не рядки, а 4-х байтні значення, які асоційовані з ними.

CB_SETCURSEL (14Eh)

Повідомлення можна надсилати у ComboBox для вибору певного пункту з його списку. Якщо необхідно, то це повідомлення зсуває список, доки назва пункту не стає видимою. Попереднє виділення зникає.

wParam = індекс пункту;

lParam = 0;

Якщо індекс = 0ffffffffh, то попереднє виділення зникає, а рядок для редагування очищується.

Повідомлення вертає індекс виділеного пункту. Якщо індекс виходить за межі, то вертає значення 0ffffffffh (CB_ERR).

CB_SETDROPPEDWIDTH (160h)

Надсилається для встановлення ширини списку в пікселях для вікон ComboBox, які мають стиль CBS_DROPDOWN або CBS_DROPDOWNLIST.

wParam = ширина списку;

lParam = 0.

Повідомлення вертає нову ширину списку ComboBox, або 0ffffffffh (CB_ERR) в разі помилки.

CB_SETEDITSEL (142h)

Надсилається для виділення фрагменту рядка у вікні редагування ComboBox.

wParam = 0;

lParam = Початкова позиція + кінцева позиція * 10000h.

Якщо lParam = 0ffffh, то виділення знімається, а якщо lParam = 0ffff0000h, то виділяється весь текст у вікні редагування.

Повідомлення вертає 1 (TRUE) при успішному виконанні. Якщо повідомлення надсилалося до ComboBox зі стилем CBS_DROPDOWNLIST, то воно вертає 0ffffffffh (CB_ERR).

CB_SETEXTENDEDUI (155h)

Повідомлення встановлює тип інтерфейсу (звичайний чи розширений) для вікна ComboBox, яке має стиль CBS_DROPDOWN або CBS_DROPDOWNLIST.

wParam = 1 – розширений або 0 – звичайний інтерфейс;

lParam = 0.

При успішному виконанні повідомлення вертає 0 (CB_OKAY), або 0ffffffffh (CB_ERR) при помилці. При звичайному інтерфейсі клавіша F4 відкриває і закриває список, а стрілка вниз змінює вибір. При розширеному інтерфейсі F4 не діє, а стрілка вниз відкриває та закриває список.

CB_SETHORIZONTALEXTENT (15Eh)

Повідомлення задає ширину горизонтального скролінгу в пікселях для вікна ComboBox.

wParam = ширина скролінгу;

lParam = 0.

CB_SETITEMDATA (151h)

Повідомлення надсилається у вікно ComboBox для зв’язування 4-х байтного значення (item data) з певним пунктом зі списку.

wParam = індекс пункту;

lParam = ідентифікатор пункту (item data).

При помилці повідомлення вертає 0ffffffffh (CB_ERR).

CB_SETITEMHEIGHT (153h)

Повідомлення надсилається для встановлення висоти пункту списку або виділеного поля в ComboBox.

wParam = індекс пункту або 0ffffffffh для виділеного поля;

lParam = Висота пункту в пікселях.

Якщо ComboBox не має стилю CBS_OWNERDRAWVARIABLE, то висота всіх пунктів буде однаковою і wParam = 0. Висота виділеного поля не повинна бути меншою висоти елемента списку. При помилці повідомлення вертає 0ffffffffh (CB_ERR).

CB_SETLOCALE (159h)

Встановлення ідентифікатора мови, яка використовується в ComboBox. Перелік значень ідентифікаторів знаходиться в розділі реєстру:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Locale

Якщо ComboBox має стиль CBS_SORT, то сортування пунктів при їх додаванні буде відбуватися за алфавітом відповідної мови.

wParam = ідентифікатор мови, що складається з ідентифікатора мови та підмови;

lParam = 0.

Повідомлення вертає попередній ідентифікатор мови, яка була встановлена у ComboBox.

CB_SETTOPINDEX (15Ch)

Повідомлення надсилається для того, щоб певний пункт списку став видимим. Якщо ComboBox має вертикальний скролінг, то список посувається так, щоб потрібний пункт був зверху списку.

wParam = індекс пункту;

lParam = 0.

При успішному виконанні повідомлення вертає 0, а при неуспішному – 0ffffffffh.

CB_SHOWDROPDOWN (14Fh)

Повідомлення надсилається для того, щоб розгорнути (показати) або згорнути список ComboBox, який має стиль CBS_DROPDOWN або CBS_DROPDOWNLIST.

wParam = 1 ? розгорнути список; 0 ? згорнути список;

lParam = 0

Повідомлення завжди вертає 1 (TRUE).

Повідомлення не дає жодного ефекту, якщо ComboBox має стиль CBS_SIMPLE.

Повідомлення для керування діалоговими вікнами

DM_GETDEFID (400h)

Повертає стандартний ідентифікатор органу керування текстової кнопки діалогу.

wParam = 0;

lParam = 0.

Повідомлення повертає в молодшому слові EAX ідентифікатор текстової кнопки діалогового вікна. У старшому слові EAX повідомлення вертає DC_HASDEFID (534h).

DM_REPOSITION (402h)

Повідомлення можна надсилати у діалогове вікно для позиціонування його на екрані для того, щоб воно було повністю видимим. Як правило використовується після зміни розмірів вікна.

wParam = 0;

lParam = 0;

Дане повідомлення не дає результату, якщо діалогове вікно є дочірнім.

DM_SETDEFID (401h)

Задає ідентифікатор для текстової кнопки діалогу.

wParam = новий стандартний ідентифікатор текстової кнопки.

lParam = 0.

Це повідомлення обробляється функцією DefDlgProcl. Для встановлення кнопки за замовченням програма може надіслати повідомлення WM_GETDLGCODE та BM_SETSTYLE. Використовуючи повідомлення DM_SETDEFID можна зробити за замовченням більше одної кнопки за замовченням.

------------------------------------------------------------------

Повідомлення для керування вікнами класу “Edit”

EM_CANUNDO (0C6h)

Визначає, чи може орган керування редагуванням відповісти на повідомлення em_Undo.

wParam = 0;

lParam = 0.

Повідомлення вертає не нульове значення, якщо вікно редагування може відповідати на повідомлення EM_UNDO (0C7h), інакше вертається 0.

EM_EMPTYUNDOBUFFER (0CDh)

Робить порожнім буфер скасування органу керування редагуванням, що забороняє можливість скасування останнього редагування.

wParam = 0;

lParam = 0.

Якщо у вікно редагування надіслати повідомлення WM_SETTEXT (0Ch) або EM_SETHANDLE (0BCh), то це також скасує буфер керування редагуванням.

EM_FMTLINES (0C8h)

Вказує органу керування редагуванням, чи додавати спеціальну послідовність символів в кінці рядків тексту, у яких був перенос слів.

wParam = 0 послідовності “повернення каретки”, “зміна рядка” видаляються з тексту, wParam = 1 - включаються;

lParam = 0.

Повідомлення повертає не нульове значення, якщо текст змінився в результаті повідомлення. Повідомлення не впливає на звичайну послідовність кінця рядка - “одне повернення каретки, зміна рядка”. Повідомлення відноситься лише до багаторядкових вікон редагування.

EM_GETHANDLE (0BDh)

Повертає хендл буферу керування редагуванням.

wParam = 0;

lParam = 0.

Це повідомлення може надсилатися лише вікну зі стилем стилем ds_LocalEdit.

EM_GETLINE (0C4h)

Повертає один рядок з вікна редагування.

wParam = індекс рядка (починається з 0);

lParam = адреса буферу для отримання рядка. Перше слово буферу є його довжиною.

Повідомлення повертає фактично передану в буфер кількість байт.

Це повідомлення відноситься лише до багаторядкових вікон редагування.

EM_GETLINECOUNT (0Bah)

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

wParam = 0;

lParam = 0.

Це повідомлення відноситься лише до багаторядкових вікон редагування.

EM_GETMODIFY (0B8h)

Повертає прапорець модифікації тексту у вікні редагування.

Прапорець встановлюється встановлюється, коли текст був змінений, або коли вікну редагування надсилалося повідомлення EM_SETMODIFY (0B9h).

wParam = 0;

lParam = 0.

Повідомлення повертає 0, якщо змін не було.

EM_GETRECT (0B2h)

Зчитує координати прямокутника, який обмежує область редагування.

wParam = 0;

lParam = вказівник на структуру даних Rect, яка буде заповнена після виконання повідомлення.

EM_GETSEL (0B0h)

Повертає початковий і кінцевий індекси обраного фрагменту тексту у вікні.

wParam = 0;

lParam = 0.

Повідомлення вертає в молодшому слові індекс початкової літери, а в старшому слові – індекс кінцевої літери фрагменту.

EM_LIMITTEXT (0C5h)

Встановлює максимальне число символів, яке можна ввести у вікно редагування.

wParam = нове максимальне число символів. 0 – обмеження немає.

lParam = 0.

У випадку успішного завершення повертається ненульове значення, інакше повертається нуль.

EM_LINEFROMCHAR (0C9h)

Повертає номер рядка в залежності від індексу символу.

wParam = індекс символу;

lParam = 0.

Якщо wParam = 0ffffffffh, то повертається номер рядка, що містить перший символ в обраному тексті, інакше повертається номер рядка, що містить зазначений у wParam індекс символу.

EM_LINEINDEX (0BBh)

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

wParam = номер рядка; 0ffffffffh – рядок, на якому знаходиться курсор.

lParam = 0.

EM_LINELENGTH (0C1h)

Повертає довжину рядка, що містить індекс зазначеного символу.

wParam = індекс символу; 0ffffffffh - рядок, на якому знаходиться курсор.

lParam = 0.

EM_LINESCROLL (0B6h)

Повідомлення зсуває текст у вікні для редагування.

wParam = 0;

молодша частина lParam = число рядків, які зсуваються по вертикалі.

старша частина lParam = число рядків, які зсуваються по горизонталі.

EM_REPLACESEL (0C2h)

Заміняє обраний текст у вікні редагування.

wParam = 0;

lParam = вказівник на текст для заміни.

EM_SETHANDLE (0BCh)

Встановлює текстовий буфер для великого вікна редагування.

wParam = хендл буферу віртуальної пам’яті;

lParam = 0.

Перед тим, як за допомогою цього повідомлення буде встановлений новий текстовий буфер, попередній буфер пам’яті повинен бути отриманий за допомогою EM_GETHANDLE та знищений за допомогою функції LocalFree.

EM_SETMODIFY (0B9h)

Встановлює прапорець модифікації тексту у вікні редагування.

wParam = нове значення прапорця модифікації.

lParam = 0.

EM_SETPASSWORDCHAR (0CCh)

Встановлює символ, який буде відображатись замість символів, набраних у вікні, створеному зі стилем es_Password.

wParam = новий символ.

lParam = 0.

EM_SETRECT (0B3h)

Встановлює координати прямокутника, який обмежує область редагування.

wParam = 0.

lParam = Вказівник на структуру Rect, яка визначає новий прямокутник.

EM_SETRECTNP (0B4h)

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

wParam = 0.

lParam = Вказівник на структуру Rect, що визначає новий прямокутник.

Використовуйте це повідомлення замість em_SetRect, коли текст повинний бути відтворений пізніше. Це повідомлення відноситься тільки до багаторядкових вікон редагування.

EM_SETSEL (0B1h)

Визначає обраний текст в органі керування редагуванням.

wParam = 0.

Молодша частина lParam: Визначає індекс початкового символу.

Старша частина lParam: Визначає індекс кінцевого символу.

Повертається: 0.

EM_SETTABSTOPS (0CBh)

Встановлює позиції табуляції органу керування редагуванням.

wParam = 0, 1, або довжина масиву табуляції.

lParam = Якщо wParam = 0, то позиція табуляції, яка встановлюється через кожні 32 символи. Якщо wParam = 1, то позиція табуляції встановлюється в кожній кратній до lParam позиції. В інших випадках lParam вказує на цілочисельний масив, що складається з wParam елементів, кожний з який більше попереднього і є позицією табуляції.

Повертається: Якщо були установлені всі позиції табуляції, повертається ненульове значення; інакше повертається нуль.

Позиція табуляції складає одну четверту від одиниці поточної ширини бази діалогу, що може бути отримана за допомогою функції GetDialogBaseUnits. Це повідомлення відноситься тільки до багаторядкових вікон редагування.

EM_SETWORDBREAKPROC (0D0h)

Змінює функцію обробки розриву слів у вікні редагування.

wParam = 0.

lParam = Адреса процедури функції, яка обробляє розрив слів, яка має наступні

Параметр1 вказує на текст органу керування редагуванням.

Параметр2 є індексом початку поточного слова в тексті.

Параметр3 визначає сумарне число байт у тексті.

Функція повинна повертати вказівник на символ, який стоїть на початку наступного слова в тексті. Якщо поточне слово є останнім, то функція повинна повертати вказівник на символ, що знаходиться відразу ж за останнім символом у рядку.

Повертається: 0.

Стандартна функція розриву слів Windows визначає початок наступного слова як перший не порожній символ після ряду пробілів. Це повідомлення відноситься тільки до багаторядкових вікон редагування.

EM_UNDO (0C7h)

Скасовує останню модифікацію тексту в органі керування редагуванням.

wParam = 0.

lParam = 0.

Повертається: У випадку успішного завершення повертається ненульове значення, інакше повертається нуль і текст в органі керування редагуванням не змінюється.

Кожна зміна тексту в органі керування редагуванням записується в буфер скасування. Умова неуспішного завершення цього повідомлення є недостача пам'яті для створення буфера скасування для самої операції скасування.

Повідомлення для керування вікнами класу ListBox

LB_ADDSTRING (180h)

Додає рядок до блоку списку.

wParam = 0.

lParam = вказівник на рядок, що додається.

Повертається: У випадку успішного завершення повертається індекс доданого рядка, інакше вертає значення

0Fffffffeh (lb_errspace) при нестачі пам’яті для ввід нового рядка, або 0ffffffffh (lb_err) в разі іншої помилки.

Якщо блок списку не відсортований, то рядок записується в кінець списку. Якщо блок списку має стиль LBS_OWNERDRAWFIXED (10h) LBS_OWNERDRAWVARIABLE (20h) і не має стилю LBS_HASSTRINGS (40h), то lParam є 4-х байтним значенням, яке запам'ятовується замість рядка, і кожен елемент, що додається, буде порівнюватись з іншими елементами, і при кожному порівнянню вікну надсилається повідомлення WM_COMPAREITEM (039h).

LB_DELETESTRING (182h)

Видаляє рядок із блоку списку.

wParam = індекс елемента, який треба видалити.

lParam = 0.

Повертається: Якщо wParam є правильним індексом, повертається кількість елементів, що залишилися у списку. Інакше повертається 0ffffffffh (LB_ERR).

Якщо блок списку має стиль LBS_OWNERDRAWFIXED (10h) LBS_OWNERDRAWVARIABLE (20h) і не має стилю LBS_HASSTRINGS (40h), то видаляється відповідне 32-бітове (4-х байтне) значення, а власнику вікна надсилається повідомлення WM_DELETEITEM (2Dh).

LB_DIR (18Dh)

Додає до блоку списку кожне ім'я файлу з поточного каталогу. Шаблон файлів задається відповідною специфікацією.

wParam = змінна атрибутів файлу.

lParam = Вказівник на рядок специфікації файлу, наприклад:

db “TEXT??.*”,0.

Повертається: У випадку успішного завершення повертається індекс останнього елемента в результуючому списку; інакше, вертає значення 0fffffffeh (LB_ERRSPACE) при нестачі пам’яті, або 0ffffffffh (LB_ERR) в разі іншої помилки.

LB_FINDSTRING (18Fh)

Знаходить перший елемент блоку списку, що відповідає префіксному рядку.

wParam = індекс, з якого повинний починатися пошук. Першим елементом, який переглядається, є елемент, що знаходиться після елемента з індексом wParam. Якщо досягається кінець списку, то пошук продовжується з нульового елемента доти, поки індекс не досягне значення wParam. Якщо wParam = 0ffffffffh, то проглядається весь список, починаючи з нульового елемента.

lParam = Вказівник на префіксний рядок.

Повертається: У випадку успішного завершення повертається індекс першого співпадаючого елемента, інакше повертається значення 0fffffffeh (LB_ERRSPACE) при нестачі пам’яті, або 0ffffffffh (LB_ERR) - в разі іншої помилки.

Якщо блок списку має стиль LBS_OWNERDRAWFIXED (10h) LBS_OWNERDRAWVARIABLE (20h) і не має стилю LBS_HASSTRINGS (40h), то lParam містить певне 32-бітове (4-х байтне) значення, яке порівнюється з кожним 4-х байтним елементом списку.

LB_GETCOUNT (18Bh)

Повертає число елементів у блоці списку.

wParam = 0.

lParam = 0.

LB_GETCURSEL (188h)

Повертає індекс поточного обраного елемента в блоці списку.

wParam = 0.

lParam = 0.

При помилці вертає 0ffffffffh (LB_ERR).

LB_GETHORIZONTALEXTENT (193h)

Повертає ширину в елементах зображення, на яку блок списку може бути прокручений по горизонталі.

wParam = 0.

lParam = 0.

Вікно повинно мати стиль WS_HSCROLL (100000h).

LB_GETITEMDATA (199h)

Повертає 32-бітове значення, яке зв'язане з елементом у блоці списку.

wParam = індекс елемента.

lParam = 0.

При помилці вертає 0ffffffffh (LB_ERR).

LB_GETITEMRECT (198h)

Зчитує координати обмежуючого прямокутник елемента блоку списку.

wParam = індекс елемента.

lParam = Вказівник на структуру TRect, що буде заповнюватися значеннями з обмежуючого прямокутника.

Повертається: У випадку помилки повертається 0ffffffffh (LB_ERR).

LB_GETSEL (187h)

Повертає інформацію про те, чи обраний блок списку, чи ні.

wParam = індекс елемента.

lParam = 0.

Якщо елемент обраний, то повертається позитивне значення; інакше повертається нуль.

LB_GETSELCOUNT (190h)

Повертає кількість елементів, обраних у даний момент у блоці списку.

wParam = 0.

lParam = 0.

Блок списку повинен мати стиль 8h (LBS_MULTIPLESEL).

Повертається число обраних елементів або 0ffffffffh (LB_ERR).

LB_GETSELITEMS (191h)

Повертає індекси елементів, які обрані у даний момент у блоці списку.

wParam = максимальне число індексів елементів, що зчитуються.

lParam = вказівник на масив, який буде заповнений індексами відмічених елементів.

Блок списку повинен мати стиль 8h (LBS_MULTIPLESEL).

Повертається сумарне число елементів, що записані у масив або 0ffffffffh (LB_ERR).

LB_GETTEXT (189h)

Копіює рядок з блок списку в наявний буфер.

wParam = індекс елемента.

lParam = вказівник на буфер.

Буфер повинний бути досить великим для того, щоб уміщати рядок і його порожній символ, яким він закінчується.

Повертається: 0. Якщо блок списку має стиль LBS_OWNERDRAWFIXED (10h) або LBS_OWNERDRAWVARIABLE (20h) і не має стилю LBS_HASSTRINGS (40h), то в буфер копіюється 4-х байтний параметр, який зв’язаний з кожним елементом.

LB_GETTEXTLEN (18Ah)

Повертає довжину в байтах елемента в блоці списку.

wParam = індекс елемента.

lParam = 0.

Якщо wParam визначає вірний індекс, то повертається довжина елемента або 0ffffffffh (LB_ERR) при помилці.

LB_GETTOPINDEX (18Eh)

Повертає індекс першого видимого елемента в блоці списку.

wParam = 0.

lParam = 0.

Спочатку першим видимим елементом у списку є нульовий елемент. Якщо блок списку прокручується, то верхнім може виявитися інший елемент.

LB_INSERTSTRING (181h)

Уставляє рядок у блок списку без сортування.

wParam = Якщо wParam=0ffffffffh, то рядок додається в кінець списку. Інакше wParam використовується як індекс вставки рядка.

lParam = Вказівник на рядок, що вставляється, що закінчується порожнім символом.

У випадку успішного завершення, повертається індекс, за яким був вставлений рядок. інакше якщо не вистачає пам'яті для збереження рядка, то повертається значення 0fffffffeh (LB_ERRSPACE) при нестачі пам’яті, або 0ffffffffh (LB_ERR) - в разі іншої помилки.

LB_RESETCONTENT (184h)

Видаляє всі елементи з блоку списку.

wParam = 0.

lParam = 0.

Завжди повертається 0.

Якщо блок списку має стиль то lParam є 4-х байтним значенням, яке запам'ятовується замість рядка, і кожен елемент, що додається, буде порівнюватись з іншими елементами, і при кожному порівнянню вікну надсилається повідомлення WM_COMPAREITEM (039h).

Якщо блок списку має стиль LBS_OWNERDRAWFIXED (10h) чи LBS_OWNERDRAWVARIABLE (20h) і не має стилю LBS_HASSTRINGS (40h), то власнику вікна для кожного елемента посилається повідомлення WM_DELETEITEM (2Dh) для підтвердження видалення рядка значенням 1 (TRUE).

LB_SELECTSTRING (18Ch)

Вибирає перший елемент блоку списку, що співпадає з префіксним рядком.

wParam = індекс, з якого повинний починатися пошук. Першим елементом, що переглядається, є елемент, що випливає після елемента з індексом wParam. Якщо досягається кінець списку, то пошук продовжується з нульового елемента, поки індекс не досягне значення wParam. Якщо wParam=0ffffffffh, то проглядається весь список, починаючи з нульового елемента.

lParam = Вказівник на префіксний рядок, що закінчується порожнім символом.

У випадку успішного завершення повертається індекс першого співпадаючого елемента, інакше повертається 0ffffffffh (LB_ERR) і поточний вибір не змінюється.

Якщо блок списку має стиль LBS_OWNERDRAWFIXED (10h) або LBS_OWNERDRAWVARIABLE (20h) і не має стилю LBS_HASSTRINGS (40h), то lParam є 32-бітовим значенням, яке порівнюється з кожним відповідним 32-бітовим значенням у списку.

LB_SELITEMRANGE (19Bh)

Вибирає чи скасовує вибір послідовних елементів у блоці списку.

wParam = 0 або 1. Якщо wParam дорівнює нулю, вибір елементів скасовується, інакше елементи вибираються.

Молодша частина lParam: Індекс початкового елемента.

Старша частина lParam: Індекс кінцевого елемента.

Повертається: У випадку помилки повертається 0ffffffffh (LB_ERR). Це повідомлення відноситься тільки до блоків списку з стилем 8h, що означає різноманітний вибір LBS_MULTIPLESEL.

LB_SETCOLUMNWIDTH (195h)

Встановлює ширину стовпця блоку списку.

wParam = Нова ширина кожного стовпця в елементах зображення.

lParam = 0.

Це повідомлення відноситься тільки до блоків списку з повідомленням 200h (LBS_MULTICOLUMN).

LB_SETCURSEL (186h)

Вибирає елемент блоку списку.

wParam = Індекс елемента. Якщо wParam=0ffffffffh, то обраного елемента немає.

lParam = 0.

Повертається індекс обраного елемента або 0ffffffffh (LB_ERR).

LB_SETHORIZONTALEXTENT (194h)

Встановлює нову ширину в елементах зображення, на яку блок списку може бути прокручений по горизонталі.

wParam = Число елементів зображення, на яке блок списку може бути прокручений по горизонталі.

lParam = 0.

Це повідомлення відноситься тільки до блоків списку, які створені зі стилем 100000h (WS_HSCROLL). Горизонтальний індикатор прокручування буде доступний в тому випадку, якщо ділянка прокручування більше ширини блоку списку.

LB_SETITEMDATA (19Ah)

Встановлює 32-бітове значення, зв'язане з елементом у блоці списку.

wParam = Індекс елемента.

lParam = нове 32-бітове значення, що зв'язується з елементом.

У випадку помилки повертається 0ffffffffh (LB_ERR).

LB_SETSEL (185h)

Вибирає чи скасовує вибір елемента в блоці списку.

wParam = 0 або 1. Якщо wParam=0, то вибір елемента скасовується, інакше елемент вибирається.

Молодша частина lParam = індексом елемента.

Якщо lParam=0ffffffffh, то це повідомлення відноситься до всіх елементів у блоці списку.

У випадку помилки повертається 0ffffffffh (LB_ERR).

Це повідомлення відноситься тільки до блоків списку з різноманітним вибором – стиль 8h (LBS_MULTIPLESEL).

LB_SETTABSTOPS (192h)

Встановлює позиції табуляції блоку списку.

wParam = 0 – позиція табуляції встановлюється через кожні 2 одиниці діалогу. 1 – табуляція встановлюється в кожній кратній lParam позиції в одиницях діалогу. В інших випадках дорівнює довжині масиву, на який вказує lParam.

lParam = Адреса масиву, що складається принаймні з wParam елементів, кожний з яких більше попереднього і є позицією табуляції в одиницях діалогу.

Якщо були установлені всі позиції табуляції, повертається ненульове значення, інакше повертається нуль.

Поточна одиниця діалогу складає одну четверту від одиниці поточної ширини бази діалогу, яка може бути отримана за допомогою функції GetDialogBaseUnits. Це повідомлення відноситься тільки до блоків списку з різноманітним вибором – стиль 8h (LBS_MULTIPLESEL).

LB_SETTOPINDEX (197h)

Встановлює індекс першого видимого елемента в блоці списку.

wParam = Індекс елемента.

lParam = 0.

Повертається: У випадку помилки повертається 0ffffffffh (LB_ERR).

Нотифікаційні повідомлення SysTabControl32

NM_CLICK

Повідомляє батьківське вікно, що користувач натиснув на вкладці ліву клавішу миші. Це повідомлення надходить у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру NMHDR.

NMHDR:

hwndFrom DD 0 ; хендл SysTabControl32;

idFrom DD 0 ; ідентифікатор (індекс) вкладки;

code DD 0 ; код NM_CLICK.

NM_RCLICK

Повідомляє батьківське вікно, що користувач натиснув на вкладці праву клавішу миші. Це повідомлення надходить у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру NMHDR.

NMHDR:

hwndFrom DD 0 ; хендл SysTabControl32;

idFrom DD 0 ; ідентифікатор (індекс) вкладки;

code DD 0 ; код NM_CLICK.

NM_RELEASEDCAPTURE (tab)

NM_RELEASEDCAPTURE (tab)

Notifies a tab control's parent window that the control is releasing mouse capture. This notification is sent in the form of a WM_NOTIFY message.

NM_RELEASEDCAPTURE

lpnmh = (LPNMHDR) lParam;

Parameters

lpnmh

Address of an NMHDR structure that contains additional information about this notification message.

Return Values

The control ignores the return value from this notification.

Requirements

Version 4.71 and later of Comctl32.dll

Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later).

Windows 95/98: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later).

Windows CE: Unsupported.

Header: Declared in commctrl.h.

TCN_GETOBJECT

Sent by a tab control when it has the TCS_EX_REGISTERDROP extended style and an object is dragged over a tab item in the control. This notification message is sent in the form of a WM_NOTIFY message.

TCN_GETOBJECT

lpnmon = (LPNMOBJECTNOTIFY) lParam;

Parameters

lpnmon

Address of an NMOBJECTNOTIFY structure that contains information about the tab item the object is dragged over and receives data the application returns in response to this message.

Return Values

The application processing this notification must return zero.

NMOBJECTNOTIFY

Contains information used with the TBN_GETOBJECT, TCN_GETOBJECT, and PSN_GETOBJECT notification messages.

typedef struct tagNMOBJECTNOTIFY {

NMHDR hdr;

int iItem;

IID* piid;

IUnknown* pObject;

HRESULT hResult;

} NMOBJECTNOTIFY, FAR* LPNMOBJECTNOTIFY;

Members

hdr

NMHDR structure that contains additional information about this notification.

iItem

Control-specific item identifier. This value will comply to item identification standards for the control sending the notification. However, this member is not used with the PSN_GETOBJECT notification message.

piid

Interface identifier of the requested object.

pObject

Address of an object provided by the window processing the notification message. The application processing the notification message sets this member.

hResult

COM success or failure flags. The application processing the notification message sets this member.

Requirements

Version 4.71 and later of Comctl32.dll

Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later).

Windows 95/98: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later).

Windows CE: Unsupported.

Header: Declared in commctrl.h.

Requirements

Version 4.71 and later of Comctl32.dll

Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later).

Windows 95/98: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later).

Windows CE: Unsupported.

Header: Declared in commctrl.h.

TCN_KEYDOWN

Notifies a tab control's parent window that a key has been pressed. This message is sent in the form of a WM_NOTIFY message.

TCN_KEYDOWN

pnm = (NMTCKEYDOWN FAR *) lParam;

Parameters

pnm

Address of an NMTCKEYDOWN structure.

Return Values

No return value.

NMTCKEYDOWN

Contains information about a key press in a tab control. It is used with the TCN_KEYDOWN notification message. This structure supersedes the TC_KEYDOWN structure.

typedef struct tagNMTCKEYDOWN {

NMHDR hdr;

WORD wVKey;

UINT flags;

} NMTCKEYDOWN;

Members

hdr

NMHDR structure that contains information about the notification message.

wVKey

Virtual key code.

flags

Value that is identical to the lParam parameter of the WM_KEYDOWN message.

Requirements

Version 4.71 and later of Comctl32.dll

Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later).

Windows 95/98: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later).

Windows CE: Requires version 2.0 or later.

Header: Declared in commctrl.h.

Requirements

Windows NT/2000: Requires Windows NT 3.51 or later

Windows 95/98: Requires Windows 95 or later

Windows CE: Requires version 1.0 or later.

Header: Declared in commctrl.h.

TCN_SELCHANGE

Notifies a tab control's parent window that the currently selected tab has changed. This message is sent in the form of a WM_NOTIFY message.

TCN_SELCHANGE

lpnmhdr = (LPNMHDR) lParam;

Parameters

lpnmhdr

Address of an NMHDR structure. The hwndFrom member is the handle to the tab control. The idFrom member is the child window identifier of the tab control. The code member is TCN_SELCHANGE.

Return Values

No return value.

Remarks

To determine the currently selected tab, use the TabCtrl_GetCurSel macro.

See Also

TCN_SELCHANGING

Requirements

Windows NT/2000: Requires Windows NT 3.51 or later

Windows 95/98: Requires Windows 95 or later

Windows CE: Requires version 1.0 or later.

Header: Declared in commctrl.h.

TCN_SELCHANGING

Notifies a tab control's parent window that the currently selected tab is about to change. This message is sent in the form of a WM_NOTIFY message.

TCN_SELCHANGING

lpnmhdr = (LPNMHDR) lParam;

Parameters

lpnmhdr

Address of an NMHDR structure. The hwndFrom member is the handle to the tab control. The idFrom member is the child window identifier of the tab control. The code member is TCN_SELCHANGING.

Return Values

Returns TRUE to prevent the selection from changing, or FALSE to allow the selection to change.

Remarks

To determine the currently selected tab, use the TabCtrl_GetCurSel macro.

See Also

TCN_SELCHANGE

Requirements

Windows NT/2000: Requires Windows NT 3.51 or later

Windows 95/98: Requires Windows 95 or later

Windows CE: Requires version 1.0 or later.

Header: Declared in commctrl.h.

NM_OUTOFMEMORY equ NM_FIRST-1

NM_CLICK equ NM_FIRST-2

NM_DBLCLK equ NM_FIRST-3

NM_RETURN equ NM_FIRST-4

NM_RCLICK equ NM_FIRST-5

NM_RDBLCLK equ NM_FIRST-6

NM_SETFOCUS equ NM_FIRST-7

NM_KILLFOCUS equ NM_FIRST-8

WM_DRAWITEM", 43, 0, "Draw request, visual aspect change" }, // Special case

TCN_GETOBJECT", -553, 0, "An object has been dragged over an item" },

TCN_SELCHANGING", -552, 0, "Current selection is about to change to a new item" },

TCN_SELCHANGE", -551, 0, "Current selection has changed to a new item" },

TCN_KEYDOWN", -550, 0, "A key has been pressed" },

TTN_NEEDTEXT (tooltip)",-520,0, "Tooltip text request (from child tooltip control)" },

NM_RELEASEDCAPTURE", -16, 0, "Control is releasing mouse capture" },

NM_RCLICK", -5, 0, "User clicked right mouse button in control" },

NM_CLICK", -2, 0, "User clicked left mouse button in control" } };

Structures

NMTCKEYDOWN

TC_HITTESTINFO

TC_ITEM

TC_ITEMHEADER

TC_KEYDOWN

TCHITTESTINFO

TCITEM

TCITEMHEADER

Tab Control Item States

Tab control items now support an item state to support the TCM_DESELECTALL (1332h) message. Additionally, the TCITEM structure supports item state values. Value Description

TCIS_BUTTONPRESSED Version 4.70. The tab control item is selected. This state is only meaningful if the TCS_BUTTONS style flag has been set.

TCIS_HIGHLIGHTED Version 4.71. The tab control item is highlighted, and the tab and text are drawn using the current highlight color. When using high-color, this will be a true interpolation, not a dithered color.

PSM_SETCURSEL equ WM_USER + 101

PSM_REMOVEPAGE equ WM_USER + 102

PSM_ADDPAGE equ WM_USER + 103

PSM_CHANGED equ WM_USER + 104

PSM_RESTARTWINDOWS equ WM_USER + 105

PSM_REBOOTSYSTEM equ WM_USER + 106

PSM_CANCELTOCLOSE equ WM_USER + 107

PSM_QUERYSIBLINGS equ WM_USER + 108

PSM_UNCHANGED equ WM_USER + 109

PSM_APPLY equ WM_USER + 110

PSM_SETTITLEA equ WM_USER + 111

PSM_SETTITLE equ

PSM_SETWIZBUTTONS equ WM_USER + 112

Група команд MCI

MCI_CLOSE

Див. приклад: Як програмно відкрити\закрити піддон CD-ROM?

Усі повідомлення MCI пересилаються за допомогою функції mciSendCommand.

Повідомлення MCI_CLOSE звільняє доступ до чи пристрою файлу. Усі пристрої приймають це повідомлення.

mciId: Ідентифікатор пристрою MCI, що повинне одержати повідомлення.

dwParam1: Прапори MCI_NOTIFY чи MCI_WAIT.

dwParam2: Адреса структури TMCI_Generic_Parms. (В оригіналі говориться про структури MCI_CLOSE_PARMS і MCI_REALIZE_PARMS, але через те, що вони однакові розроблювачі Дельфи вирішили використовувати одну структуру замість трьох.)

Зауваження

Завершуючи програма, не забувайте закривати усі відкриті пристрої MCI, інакше можна залишити їх недоступними.

Група посилань: MCI

MCI_BREAK модуль MMSystem

Усі повідомлення MCI пересилаються за допомогою функції mciSendCommand.

Повідомлення встановлює ключ переривання для устройтсв MCI. Всі устройтсва підтримую цю команду.

mciId: Ідентифікатор устройсва MCI, що повинний одержати це повідомлення.

dwParam1: Прапори MCI_NOTIFY, MCI_WAIT, чи MCI_TEST.

dwParam2: Адреса структури TMCI_Break_Parms.

Значення, що повертається

Нуль у випадку чи успіху помилка в противному випадку.

Зауваження

Можна безліч разів задавати ключ переривання для того щоб перервати операцію чекання. Передача ключа переривання після того як чекання пристрою скасоване, може послати переривання в програма. Якщо програма визначив дію для ключа, то тоді воно може неумешленно зреагувати на передачу переривання. Наприклад, програма, що використовує VK_CANCEL для гарячої клавіші, тожет зреагувати на CTRL+BREAK якщо комбінація натиснута після скасування чекання.

Наступні додаткові прапори відносяться до всіх пристроїв:

MCI_BREAK_HWND - Параметр hwndBreak структури зазначеної в dwParam2 модержит хендл вікна, що було поточним вікном до того як було передане переривання для цього пристрою MCI. Звичайно це основне вікно додатка. Якщо прапорець не встановлений, MCI не перевіряє хендл поточного вікна.

MCI_BREAK_KEY - Параметр nVirtKey структури зазначеної в dwParam2 визначає віртуальний код для гарячої клавіші для переривання. За замовчуванням комбінація - CTRL+BREAK. Цей прапорець потрібно у випадку якщо MCI_BREAK_OFF не встановлений.

MCI_BREAK_OFF - Відключає всі існуючі гарячі клавіші переривання для зазначеного пристрою.

Група посилань: MCI

MCI_CONFIGURE модуль MMSystem

Усі повідомлення MCI пересилаються за допомогою функції mciSendCommand.

Повідомлення відображає діалог установки опцій відеопристроїв. Усі пристрої цифрового відео приймають це повідомлення.

mciId: Ідентифікатор устройсва MCI, що повинний одержати це повідомлення.

dwParam1: Прапори MCI_NOTIFY, MCI_WAIT, чи MCI_TEST.

dwParam2: Адреса структури TMCI_Generic_Parms. (Пристрою з розширеними командними опціями, можуть замінити цю структуру інший, залежної від пристрою структурою.)

Значення, що повертається

У випадку успіху чи нуль помилка в противному випадку.

Група посилань: MCI

MCI_OPEN

Див. приклад: Як програмно відкрити\закрити піддон CD-ROM?

Усі повідомлення MCI пересилаються за допомогою функції mciSendCommand.

Инициализирует чи пристрій файл. Усі пристрої визнають цю команду.

dwParam1: Прапори MCI_NOTIFY чи MCI_WAIT. Для інформації щодо цих прапорів, дивися "MCI Overview." Список інших прапорів дивися нижче.

dwParam2: Адреса структури TMCI_Open_Parms. (Пристрою з розширеними командними опціями, можуть замінити цю структуру інший, залежної від пристрою структурою.)

Прапорець MCI_OPEN_TYPE повинний використовуватися всякий раз, коли пристрій визначається у функції mciSendCommand. Якщо Ви відкриваєте пристрій установлюючи константу типу пристрою, Ви повинні установити прапорець MCI_OPEN_TYPE_ID додатково до MCI_OPEN_TYPE. Список констант див. нижче.

Якщо прапорець MCI_OPEN_SHAREABLE не встановлений, коли чи пристрій файл уже відкриті, усі наступні команди MCI_OPEN для чи пристрою файлу зазнають невдачі. Якщо чи пристрій файл уже відкритий і цей прапорець не встановлений, виклик зазнає невдачі навіть якби перша команда відкриття установила MCI_OPEN_SHAREABLE. Файли відкриті для MCISEQ.DRV і пристрою MCIWAVE.DRV є неподілюваними(nonshareable).

Для того, щоб використовувати автоматичний вибір типу (через дані в реєстрі), установите ім'я файлу і розширення в елементі lpstrElementName структури зазначеної в dwParam2, елемент lpstrDeviceType повинний бути nil і встановлений прапорець MCI_OPEN_ELEMENT.

Додаткові Прапори:

Наступні додаткові прапори відносяться до всіх пристроїв підтримуючим MCI_OPEN:

MCI_OPEN_ALIAS - Псевдонім заноситися в елемент lpstrAlias структури зазначеної в dwParam2.

MCI_OPEN_SHAREABLE - чи Пристрій файл повинний бути окрыть як загальне(розділене).

MCI_OPEN_TYPE - чи Ім'я константа типу пристрою заноситься в елемент lpstrDeviceType структури зазначеної в dwParam2.

MCI_OPEN_TYPE_ID - Молодше слово елемента lpstrDeviceType структури зазначеної в dwParam2 містить стандартний ідентифікатор типу пристрою MCI, а старше слово дополнительо містить порядковий індекс пристрою. Використовуйте цей прапорець разом із прапором MCI_OPEN_TYPE.{Прим. укладача: В оригіналі зазначений елемент lpstrDeviceType, але він строковий і ніякого молодшого і старшого слова в нього ні, тому найближче за змістом - елемент wDeviceID, можливо треба його використовувати.}

Наступні додаткові прапори визначають склад пристроїв:

MCI_OPEN_ELEMENT - Ім'я файлу включається в елемент lpstrElementName.

MCI_OPEN_ELEMENT_ID - Елемент lpstrElementName інтерпретується як DWORD і позначає внутрішньо ID пристрою.

Прапори анімації:

Наступні додаткові прапори використовуються типом пристроїв анімації:

MCI_ANIM_OPEN_NOSTATIC - Пристрій повинний зменшити число статичних(системних) кольорів у палітрі до двох.

MCI_ANIM_OPEN_PARENT - Хенл батьківського вікна встановлюється в елементі hWndParent структури зазначеної в dwParam2. Хенл батьківського окнанеобходим для установки деяких стилів вікна.

MCI_ANIM_OPEN_WS - Стиль вікна визначається в елементі dwStyle структури зазначеної в dwParam2. Елемент dwStyle визначає стиль вікна, що драйвер буде створювати і відображати(дисплей), якщо програма не забезпечив його. Ці параметри такі ж як і в стилях використовувані функцією CreateWindow (наприклад, WS_CHILD, WS_OVERLAPPEDWINDOW, і WS_POPUP) Див. WS_.

Для пристроїв анімації, параметр dwParam2 вказівник на структуру TMCI_Anim_Open_Parms.

Прапори цифрового відео:

Наступні додаткові прапори використовуються типом} пристроїв цифрового відео(digitalvideo):

MCI_DGV_OPEN_NOSTATIC - Пристрій повинний зменшити число статичних(системних) кольорів у палітрі. Це число кольорів доступно для рендеринга(отрисовки) відеопотоком. Цей прапорець відноситися тільки до пристроїв які розділяють(share) палітру з Windows.

MCI_DGV_OPEN_PARENT - Хенл батьківського вікна встановлюється в елементі hWndParent структури зазначеної в dwParam2.

MCI_DGV_OPEN_WS - Стиль вікна визначається в елементі dwStyle структури зазначеної в dwParam2.

Для пристроїв цифрового відео, параметр dwParam2 вказівник на структуру TMCI_Anim_Open_Parms {в оригіналі зазначена структура MCI_DGV_OPEN_PARMS, але тому що вона збігається зі структурою TMCI_Anim_Open_Parms, те розроблювачі Дельфи вирішили піти на оптимізацію коду і забрали зайву структуру}.

Прапори видеооверлея(Video-overlay):

Наступні додаткові прапори використовуються оверлейным пристроєм:

MCI_OVLY_OPEN_PARENT - Хенл батьківського вікна встановлюється в елементі hWndParent структури зазначеної в dwParam2.

MCI_OVLY_OPEN_WS - Стиль вікна визначається в елементі dwStyle структури зазначеної в dwParam2.

Для оверлейных пристроїв, параметр dwParam2 вказівник на структуру TMCI_Ovly_Open_Parms.

Прапори Waveaudio:

Наступний додатковий прапорець використовується типом пристроїв waveaudio:

MCI_WAVE_OPEN_BUFFER - довга буфера вказується в елементі dwBufferSeconds.

Для waveform-звукових пристроїв, параметр dwParam2 вказівник на структуру TMCI_Wave_Open_Parms. Драйвер MCIWAVE вимагає асинхронний waveform-звуковий пристрій.

Група посилань: MCI

MCI_PAUSE модуль MMSystem

Усі повідомлення MCI пересилаються за допомогою функції mciSendCommand.

Повідомлення MCI_PAUSE зупиняється поточне дія. CD АУДИО, відео,MIDI секвенсер, videodisc, VCR, і waveform-аудио пристрою визнають цю команду.

mciId: Ідентифікатор пристрою MCI, що повинне одержувати повідомлення.

dwParam1: Прапори MCI_NOTIFY, MCI_WAIT, чи для цифрового відео і VCR прапорець MCI_TEST.

dwParam2: Вказівник на структуру TMCI_Generic_Parms.

Значення, що повертається

Повертає нуль у випадку чи успіху помилку в противному випадку.

Зауваження

Розходження між MCI_STOP і командами MCI_PAUSE залежить від пристрою. Якщо можливо, MCI_PAUSE затримує операцію пристрою але залишає пристрій готовим продовжити відтворення негайно. З MCICDA, MCISEQ, і драйверами MCIPIONR, повідомлення MCI_PAUSE працює так само як і повідомлення MCI_STOP.

Група посилань: MCI

MCI_PLAY модуль MMSystem

Усі повідомлення MCI пересилаються за допомогою функції mciSendCommand.

Повідомлення MCI_PLAY сигналізує пристрою, щоб починало передавати вихідні дані. CD АУДИО, відео,MIDI секвенсер, videodisc, VCR, і waveform-аудио пристрою визнають цю команду.

mciId: Иденификатор пристрою MCI, для якого необхідно одержати інформацію.

dwParam1: Прапори MCI_NOTIFY, MCI_WAIT, чи для цифрового відео і VCR прапорець MCI_TEST.

dwParam2: Вказівник структури TMCI_Play_Parms. (Пристрою з розширеними командними опціями, можуть замінити цю структуру інший, залежної від пристрою структурою.)

Значення, що повертається

Якщо успішно чи нуль будь-яке інше в противному випадку.

Зауваження

Наступні додаткові прапори відносяться до всіх пристроїв, що підтримують MCI_PLAY:

MCI_FROM - Стартова позиція зазначена в параметр dwFrom структури зазначеної в dwParam2. Модулі асоційовані зі значенням позиції визначені прапором MCI_SET_TIME_FORMAT повідомлення MCI_SET. Якщо MCI_FROM не визначений, стартова позиція встановлюється за замовчуванням у поточну позицію.

MCI_TO - Позиція закінчення зазначена в параметр dwTo структури зазначеної в dwParam2. Модулі асоційовані зі значенням позиції визначені прапором MCI_SET_TIME_FORMAT повідомлення MCI_SET. Якщо MCI_TO не визначений, позиція закінчення встановлюється за замовчуванням у кінець носія.

Наступні додаткові прапори використовуються типом пристрою digitalvideo:

MCI_DGV_PLAY_REPEAT - Зациклити відтворення(Повтор спочатку після досягнення кінця).

MCI_DGV_PLAY_REVERSE - Реверс відтворення.

MCI_MCIAVI_PLAY_WINDOW - Відтворення повинне відбуватися у вікні асчсоциированном з ID пристрою ( за замовчуванням). (Цей прапорець характерний для MCIAVI.DRV.)

MCI_MCIAVI_PLAY_FULLSCREEN - Полноэкранное відтворення. Використовуйте цей прапорець тільки при прогирывании стиснутих чи 8-бітних файлах.

Для відео пристроїв, параметр dwParam2 вказівник на структуру TMCI_VCR_Play_Parms.

{У стандартному хелпе зазначена структура MCI_DGV_PLAY_PARMS, але вона не містить парметр dwAt тому імовірніше всего мова йде про структуру TMCI_VCR_Play_Parms}

Наступні додаткові прапори використані типом пристрою VCR:

MCI_VCR_PLAY_AT - Параметр dwAt структури зазначеної в dwParam2, містить час початку виконання команди, чи якщо пристрій подає сигнал, коли пристрій досягає позиції заданою командою MCI_CUE.

MCI_VCR_PLAY_REVERSE - Відтворення повинне відбуватися в реверсі.

MCI_VCR_PLAY_SCAN - Відтворення повинне йти якнайшвидше поки використовується відеовихід.

Для пристроїв VCR, параметр dwParam2 вказівник на структуру TMCI_VD_Play_Parms.

{У стандартному хелпе зазначена структура TMCI_VCR_Play_Parms, але вона не містить парметр dwSpeed тому імовірніше всего мова йде про структуру TMCI_VD_Play_Parms}

Наступні додаткові прапори використані типом пристрою videodisc:

MCI_VD_PLAY_FAST - Швидкий старт.

MCI_VD_PLAY_REVERSE - Реверсивний старт.

MCI_VD_PLAY_SCAN - Швидке сканування.

MCI_VD_PLAY_SLOW - Повільний старт.

MCI_VD_PLAY_SPEED - Швидкість запуску зазначена в параметрі dwSpeed структури зазначеної в dwParam2.

Увага : У стандартному англомовному хелпе в даному розділі міститься ряд помилок. Зверніть увагу на примітку у фігурних дужках.

Див. Також: MCI_CUE, MCI_SET

Група посилань: MCI

MCI_STATUS модуль MMSystem

Усі повідомлення MCI пересилаються за допомогою функції mciSendCommand.

Повертає інформацію про пристрій MCI. Усі пристрої приймають це повідомлення. Інформація повертається в елемент dwReturn структури зазначеної в dwParam2.

mciId: Иденификатор пристрою MCI, для якого необхідно одержати інформацію.

dwParam1: Прапори MCI_NOTIFY, MCI_WAIT, чи для цифрового відео і VCR прапорець MCI_TEST.

dwParam2: Адреса структури TMCI_Status_Parms. (Пристрою з розширеними командними опціями, можуть замінити цю структуру інший, залежної від пристрою структурою.)

Додаткові Прапори:

Наступні додаткові стандартні і командные-зависимые прапори відносяться до всіх пристроїв підтримуючим MCI_STATUS:

MCI_STATUS_ITEM - Визначає, що елемент dwItem містить константу, що вказує яку інформацію необхідно повернути.Наступні константи визначають яку інформацію повернути в елемент dwReturn:

MCI_STATUS_CURRENT_TRACK - В елемент dwReturn повертається номер поточної доріжки(треку).

MCI_STATUS_LENGTH - В елемент dwReturn повертається загальна довгий(час) носія.

MCI_STATUS_MODE - В елемент dwReturn повертається поточний режим пристрою. Режим включає следуюющее:

-MCI_MODE_NOT_READY

-MCI_MODE_PAUSE

-MCI_MODE_PLAY

-MCI_MODE_STOP

-MCI_MODE_OPEN

-MCI_MODE_RECORD

-MCI_MODE_SEEK

MCI_STATUS_NUMBER_OF_TRACKS - В елемент dwReturn повертається загальне число доріжок які можна програти.

MCI_STATUS_POSITION - В елемент dwReturn повертається поточна позиція.

MCI_STATUS_READY - В елемент dwReturn повертається True якщо пристрій готовий чи False у противному випадку.

MCI_STATUS_TIME_FORMAT - В елемент dwReturn повертається поточний формат часу пристрою. Формати часу включають:

-MCI_FORMAT_BYTES

-MCI_FORMAT_FRAMES

-MCI_FORMAT_HMS

-MCI_FORMAT_MILLISECONDS

-MCI_FORMAT_MSF

-MCI_FORMAT_SAMPLES

-MCI_FORMAT_TMSF

MCI_STATUS_START - В елемент dwReturn повертається початкову позицію носія. Для того, щоб одержати початкову позицію носія, об'єднаєте цей прапорець із прапором MCI_STATUS_ITEM і в елемент dwItem установите MCI_STATUS_POSITION.

MCI_TRACK - Вказує, що статус доріжки включається в елемент dwTrack. Ви повинні використовувати цей прапорець із прапорами MCI_STATUS_POSITION чи MCI_STATUS_LENGTH. Коли використовується з прапором MCI_STATUS_POSITION, MCI_TRACK повертає початкову позицію визначеної доріжки(треку). Коли використовується з прапором MCI_STATUS_LENGTH, MCI_TRACK повертає довжину визначеної доріжки(треку).

Прапори анімації:

Наступні додаткові прапори використовуються типом пристрою анімації. Ці константи використовуються в елементі dwItem структури зазначеної в параметрі dwParam2, коли прапорець MCI_STATUS_ITEM встановлений у dwParam1.

MCI_ANIM_STATUS_FORWARD - В елемент dwReturn повертається True якщо йде прискорене відтворення і False у противному випадку.

MCI_ANIM_STATUS_HPAL - В елемент dwReturn повертається хендл палітри фільму.

MCI_ANIM_STATUS_HWND - В елемент dwReturn повертається хендл вікна відтворення.

MCI_ANIM_STATUS_SPEED - В елемент dwReturn повертається мкорость анімації.

MCI_ANIM_STATUS_STRETCH - В елемент dwReturn повертається True якщо масштабирование можливо і False у противному випадку.

MCI_STATUS_MEDIA_PRESENT - В елемент dwReturn повертається True якщо медиаустройство(файл, диск) включене\відкрито\вставлено в пристрій(окрыто плеером, диск вставлений у CD-ROM).

CD Audio Прапори:

Наступні додаткові прапори використовуються типом пристроїв cdaudio. Ці константи використовуються в елементі dwItem структури зазначеної в параметрі dwParam2, коли прапорець MCI_STATUS_ITEM встановлений у dwParam1.

MCI_CDA_STATUS_TYPE_TRACK - В елемент dwReturn повертається одне з наступних значень:

MCI_CDA_TRACK_AUDIO

MCI_CDA_TRACK_OTHER

Для того, щоб використовувати цей прапорець, прапорець MCI_TRACK повинний бути встановлений, і елемент dwTrack повинний містити правильний номер доріжки(треку).

MCI_STATUS_MEDIA_PRESENT - В елемент dwReturn повертається True якщо медиаустройство(файл, диск) включене\відкрито\вставлено в пристрій(окрыто плеером, диск вставлений у CD-ROM).

Прапори цифрового відео:

Наступні додаткові прапори використовуються типом пристрою digitalvideo:

MCI_DGV_STATUS_DISKSPACE - Елемент lpstrDrive структури зазначеної в параметрі dwParam2, визначає дискове устройсво, чи в деяких реалізаціях, шлях. Повідомлення MCI_STATUS повертає наближений обьем дискового простору яке могло бути отримане повідомленням MCI_RESERVE в елементі dwReturn зазначеної в параметрі dwParam2.

MCI_DGV_STATUS_INPUT - Прапорець визначений елементом dwItem, застосовується до ввід.

MCI_DGV_STATUS_OUTPUT - Прапорець визначений елементом dwItem, застосовується до висновку.

MCI_DGV_STATUS_LEFT - Прапорець визначений елементом dwItem, застосовується до лівого каналу.

MCI_DGV_STATUS_RIGHT - Прапорець визначений елементом dwItem, застосовується до правого каналу.

MCI_DGV_STATUS_NOMINAL - Прапорець визначений елементом dwItem запитує номінальну предпочитает величину, а не поточну.

MCI_DGV_STATUS_RECORD - Значення фреймів (Frame Rate) повернуте для прапора MCI_DGV_STATUS_FRAME_RATE це показник використовуваний для компресії.

MCI_DGV_STATUS_REFERENCE - В елемент dwReturn повертається найближчий ключовий фрейм(key-frame), що передує фрейму зазначеному в елементі dwReference.

Наступні прапори використовуються типом пристрою digitalvideo, коли прапорець MCI_STATUS_ITEM встановлений у парметре dwParam1.

MCI_AVI_STATUS_AUDIO_BREAKS - В елемент dwReturn повертається номер останньої порції аудиоданных перед звуковим перериванням. Система вважає звукові переривання всякий раз, коли вона намагається записати звукові дані в драйвер пристрою і виявляє, що драйвер уже програв усі доступні йому дані. Цей прапорець розпізнається MCIAVI відео драйвером.

MCI_AVI_STATUS_FRAMES_SKIPPED - В елемент dwReturn повертається число невиведених фреймів, при останньому програші AVI. Цей прапорець розпізнається MCIAVI пристроєм цифрового відео.

MCI_AVI_STATUS_LAST_PLAY_SPEED - В елемент dwReturn повертається відношення час програвання останнього AVI до фактичного часу. Число 1000 Вказує що час програвання дорівнює фактичному часу. Число 2000 Вказує що AVI було програно 2 рази. Цей прапорець розпізнається MCIAVI відео драйвером.

MCI_DGV_STATUS_AUDIO - В елемент dwReturn повертається прапорець MCI_ON чи MCI_OFF у залежності від последенй установки прапора MCI_SET_AUDIO для повідомлення MCI_SET. MCI_ON Вказує що один іл обох спікерів\стовпчика (висновку) ключены і MCI_OFF у противному випадку.

MCI_DGV_STATUS_AUDIO_INPUT - В елемент dwReturn повертається рівень звуку аналогового звукового сигналу на виході. Значення більш 1000 позначає що минулого вирізані перекручування. Деякі пристрої можуть визначати це значення тільки під час запису звуку. Це значення не асоційоване з повідомленнями MCI_SET чи MCI_SETAUDIO. значення нормалізується з прапора MCI_WAVE_STATUS_LEVEL.

MCI_DGV_STATUS_AUDIO_RECORD - В елемент dwReturn повертається MCI_ON чи MCI_OFF відбиваючи стан установлене прапором MCI_DGV_SETAUDIO_RECORD повідомлення MCI_SETAUDIO.

MCI_DGV_STATUS_AUDIO_SOURCE - В елемент dwReturn повертається поточний звукове цифрове джерело:

MCI_DGV_SETAUDIO_AVERAGE - Визначає балланс проавлого і лівого каналів.

MCI_DGV_SETAUDIO_LEFT - Визначає лівий звуковий канал.

MCI_DGV_SETAUDIO_RIGHT - Визначає правий звуковий канал.

MCI_DGV_SETAUDIO_STEREO - Визначає стерео.

MCI_DGV_STATUS_AUDIO_STREAM - В елемент dwReturn повертається номер поточного звукового потоку.

MCI_DGV_STATUS_AVGBYTESPERSEC - В елемент dwReturn повертається середнє число байт у секунду для запису.

MCI_DGV_STATUS_BASS - В елемент dwReturn повертається поточний зуковой рівень баса. Використовуйте прапорець MCI_DGV_STATUS_NOMINAL з цим прапором для одержання номінального рівня.

MCI_DGV_STATUS_BITSPERPEL - В елемент dwReturn повертається число біт на пиксель для захоплених чи записаних даних.

MCI_DGV_STATUS_BITSPERSAMPLE - В елемент dwReturn повертається число битов на семпл для пристрою запису. Це відноситься тільки до пристроїв, що підтримують формат PCM.

MCI_DGV_STATUS_BLOCKALIGN - В елемент dwReturn повертається значення вирівнювання блоків відносно початку ввід waveform.

MCI_DGV_STATUS_BRIGHTNESS - В елемент dwReturn повертається поточний рівень яскравості для відео. Використовуйте прапорець MCI_DGV_STATUS_NOMINAL з цим прапором для одержання номінального рівня.

MCI_DGV_STATUS_COLOR - В елемент dwReturn повертається поточний рівень кольоровості. Використовуйте прапорець MCI_DGV_STATUS_NOMINAL з цим прапором для одержання номінального рівня.

MCI_DGV_STATUS_CONTRAST - В елемент dwReturn повертається поточний рівень контрастності. Використовуйте прапорець MCI_DGV_STATUS_NOMINAL з цим прапором для одержання номінального рівня.

MCI_DGV_STATUS_FILEFORMAT - В елемент dwReturn повертається поточний формат файлу для чи запису збереження.

MCI_DGV_STATUS_FILE_MODE - В елемент dwReturn повертається стан файлової операції:

MCI_DGV_FILE_MODE_EDITING - Возращается в плині операції вирізу(cut), копіювання(copy), видалення(delete), вставки(paste), чи скасування(undo).

MCI_DGV_FILE_MODE_IDLE - Повертається, коли файл готовий до наступного операції.

MCI_DGV_FILE_MODE_LOADING - Повертається, коли файл завантажується(відкривається).

MCI_DGV_FILE_MODE_SAVING - Повертається, коли файл зберігається.

MCI_DGV_STATUS_FILE_COMPLETION - В елемент dwReturn повертається передбачуваний відсоток операції завантаження, збереження, захоплення (capture), вирізання (cut), копіювання (copy), видалення (delete), вставки (paste), чи скасування (undo). Програма може використовувати це значення для візуальної вказівки користувачу(наприклад за допомогою ProgressBar). Цей прапорець не підтримується пристроями цифрового відео.

MCI_DGV_STATUS_FORWARD - В елемент dwReturn повертається TRUE якщо пристрій програє чи вперед пристрій не програє.

MCI_DGV_STATUS_FRAME_RATE - Елемент dwReturn повинний використовуватися з прапорами MCI_DGV_STATUS_NOMINAL, MCI_DGV_STATUS_RECORD чи ними обома. Коли використовується MCI_DGV_STATUS_RECORD повертається поточний фреймовий показник для запису. Коли використовується MCI_DGV_STATUS_RECORD разом з MCI_DGV_STATUS_NOMINAL повертається номінальний фреймовий показник зв'язаний із вхідним відеосигналом. Коли використовується MCI_DGV_STATUS_NOMINAL повертається номиналный фреймовий показник зв'язаний з файлом. В усіх випадках, еденица виміру - фрейм у секунду помножений на 1000 { (frame\sec)*1000) }.

MCI_DGV_STATUS_GAMMA - В елемент dwReturn повертається поточна величина гамма-корекції(gamma). Використовуйте MCI_DGV_STATUS_NOMINAL разом з цим прапором для одержання номінального рівня.

MCI_DGV_STATUS_HPAL - В елемент dwReturn повертається десяткове значення ASCII для Хендла поточної палітри. Хендл міститься в молодшому слові величини, що повертається.

MCI_DGV_STATUS_HWND - В елемент dwReturn повертається десяткове значення ASCII для Хендла вікна (поточного чи за замовчуванням) асоційованого з устройсвом керування(драйвером). Хендл содержиться в молодшому слови повернутого значення.

MCI_DGV_STATUS_KEY_COLOR - В елемент dwReturn повертається значення поточного кольору(key-color).

MCI_DGV_STATUS_KEY_INDEX - В елемент dwReturn повертається значення поточного індексу(key-index).

MCI_DGV_STATUS_MONITOR - В елемент dwReturn повертається константа указывающая джерело поточного висновку(відтворення):

MCI_DGV_MONITOR_FILE - Файл.

MCI_DGV_MONITOR_INPUT - Вводу(незрозуміло, що мається на увазі. У стандартному хелпе не уточнюється.).

MCI_DGV_STATUS_MONITOR_METHOD - В елемент dwReturn повертається константа указывающая який метод використовувався для моніторингу ввід:

MCI_DGV_METHOD_DIRECT - Прямої моніторинг вводу.

MCI_DGV_METHOD_POST - Пост-моніторинг вводу.

MCI_DGV_METHOD_PRE - Пре-мониторинг вводу.

MCI_DGV_STATUS_PAUSE_MODE - В елемент dwReturn повертається MCI_MODE_PLAY якщо устройсво зупинялося на паузу під час чи програвання MCI_MODE_RECORD якщо устройсво зупинялося на паузу під час запису. Повертається MCIERR_NONAPPLICABLE_FUNCTION якщо пристрій не зупинявся.

MCI_DGV_STATUS_SAMPLESPERSECOND - В елемент dwReturn повертається кількість семплов у секунду при записі.

MCI_DGV_STATUS_SEEK_EXACTLY - В елемент dwReturn повертається True чи False у завислимости від чи тогу установлений формат точного пошуку(seek). (Установка цього формату виробляється повідомленням MCI_SET із прапором MCI_DGV_SET_SEEK_EXACTLY).

MCI_DGV_STATUS_SHARPNESS - В елемент dwReturn повертається поточний рівень різкості. Використовуйте MCI_DGV_STATUS_NOMINAL з цим прапором для одержання номінального рівня.

MCI_DGV_STATUS_SIZE - В елемент dwReturn повертається наближена тривалість відтворення стиснутих даних для який зарезевированно дивковое простір. Тривалість - у поточному форматі часу. Повертається нуль якщо немає дискового простору.

MCI_DGV_STATUS_SMPTE - В елемент dwReturn повертається код часу SMPTE ссоциированного з поточною позицією в робітнику прсотранстве.

MCI_DGV_STATUS_SPEED - В елемент dwReturn повертається поточна швидкість відтворення.

MCI_DGV_STATUS_STILL_FILEFORMAT - В елемент dwReturn повертається поточний формат файлів для повідомлення MCI_CAPTURE.

MCI_DGV_STATUS_TINT - В елемент dwReturn повертається поточний рівень відтінку. Використовуйте MCI_DGV_STATUS_NOMINAL з цим прапором для одержання номінального рівня.

MCI_DGV_STATUS_TREBLE - В елемент dwReturn повертається поточний звуковий рівень дисканта. Використовуйте MCI_DGV_STATUS_NOMINAL з цим прапором для одержання номінального рівня.

MCI_DGV_STATUS_UNSAVED - В елемент dwReturn повертається True якщо є записані дані в робочій області(буфері) які можуть потерятся в результаті повідомлень MCI_CLOSE, MCI_LOAD, MCI_RECORD, MCI_RESERVE, MCI_CUT, MCI_DELETE, MCI_PASTE. Возвращаеся False у противному випадку.

MCI_DGV_STATUS_VIDEO - В елемент dwReturn повертається MCI_ON якщо показ відео чи здійснимо MCI_OFF у противному випадку.

MCI_DGV_STATUS_VIDEO_RECORD - В елемент dwReturn повертається MCI_ON чи MCI_OFF указуючи стан установленне прапором MCI_DGV_SETVIDEO_RECORD повідомлення MCI_SETVIDEO.

MCI_DGV_STATUS_VIDEO_SOURCE - В елемент dwReturn повертається константа указывающая тип відеоджерела встановлений прапором MCI_DGV_SETVIDEO_SOURCE повідомлення MCI_SETVIDEO.

MCI_DGV_STATUS_VIDEO_SRC_NUM - В елемент dwReturn повертається числдо активний до поточного часу вхідних відеоджерел(у межах свого типу).

MCI_DGV_STATUS_VIDEO_STREAM - В елемент dwReturn повертається номер поточного відеопотоку.

MCI_DGV_STATUS_VOLUME - В елемент dwReturn повертається середня голосність лівого і правого каналу. Використовуйте MCI_DGV_STATUS_NOMINAL з цим прапором для одержання номінального рівня.

MCI_DGV_STATUS_WINDOW_VISIBLE - В елемент dwReturn повертається True якщо вікно не сховане.

MCI_DGV_STATUS_WINDOW_MINIMIZED - В елемент dwReturn повертається True якщо вікно минимизированно.

MCI_DGV_STATUS_WINDOW_MAXIMIZED - В елемент dwReturn повертається True якщо вікно розкрите на весь екран.

MCI_STATUS_MEDIA_PRESENT - В елемент dwReturn повертається True.

Для відео пристроїв параметр dwParam2 вказівник на структуру MCI_DGV_STATUS_PARMS.

Прапори секвенсера:

Наступні додаткові прапори використовуються типом пристрою секвенсер. Наступні прапори використовуються типом пристрою секвенсер, коли прапорець MCI_STATUS_ITEM встановлений у парметре dwParam1.

MCI_SEQ_STATUS_DIVTYPE - В елемент dwReturn повертається одна з наступних констант означаючих поточний тип поділу послідовностей(current division type of a sequence):

MCI_SEQ_DIV_PPQN

MCI_SEQ_DIV_SMPTE_24

MCI_SEQ_DIV_SMPTE_25

MCI_SEQ_DIV_SMPTE_30

MCI_SEQ_DIV_SMPTE_30DROP

MCI_SEQ_STATUS_MASTER - В елемент dwReturn повертається тип синхронізації використаний для основної операції(master operation).

MCI_SEQ_STATUS_OFFSET - В елемент dwReturn повертається поточне зсув для SMPTE-послідовності.

MCI_SEQ_STATUS_PORT - В елемент dwReturn повертається ідентифікатор пристрою MIDI для поточного порту использванного послідовністю(sequence).

MCI_SEQ_STATUS_SLAVE - В елемент dwReturn повертається тип синхронізації для дублюючої операції(slave operation).

MCI_SEQ_STATUS_TEMPO - В елемент dwReturn повертається поточний темп послідовності(sequence) MIDI в ударах у хвилину(удар\хвилина) для файлів PPQN чи фрейми в секунду(фрайм\сек) для файлів SMPTE.

MCI_STATUS_MEDIA_PRESENT - В елемент dwReturn повертається True якщо носій(медиа) знаходиться в чи пристрої False у противному випадку.

Прапори VCR:

Наступні додаткові прапори використовуються типом пристрою VCR. Наступні прапори використовуються типом пристрою VCR, коли прапорець MCI_STATUS_ITEM встановлений у парметре dwParam1.

MCI_STATUS_MEDIA_PRESENT - В елемент dwReturn повертається True якщо носій вставлений у чи пристрої False у противному випадку.

MCI_VCR_STATUS_ASSEMBLE_RECORD - В елемент dwReturn повертається True якщо режим запису збирається(готовий) чи включиться False у противному випадку.

MCI_VCR_STATUS_AUDIO_MONITOR - В елемент dwReturn повертається константа що вказує поточний тип аудио-монитора.

MCI_VCR_STATUS_AUDIO_MONITOR_NUMBER - В елемент dwReturn повертається номер поточного обраного типу аудио-монитора.

MCI_VCR_STATUS_AUDIO_RECORD - В елемент dwReturn повертається True якщо звук буде записыаться при подачі наступного собщения чи запису False у противному випадку. Якщо ви в параметрі dwFlags Встановлюєте MCI_TRACK для цього повідомлення то dwTrack містить доріжку яку цей запит додає.

MCI_VCR_STATUS_AUDIO_SOURCE - В елемент dwReturn повертається константа що вказує поточний тип джерела звуку.

MCI_VCR_STATUS_AUDIO_SOURCE_NUMBER - В елемент dwReturn повертається номер поточного обраного джерела звуку.

MCI_VCR_STATUS_CLOCK - В елемент dwReturn повертається число поточних годин унікально описують використовуваний час.

MCI_VCR_STATUS_CLOCK_ID - В елемент dwReturn повертається номер який однозначно описує використовувані годинник.

MCI_VCR_STATUS_COUNTER_FORMAT - В елемент dwReturn повертається константа що вказує поточний формат лічильника. Для додаткової інформації див. прапорець MCI_SET_TIME_FORMAT повідомлення MCI_SET.

MCI_VCR_STATUS_COUNTER_RESOLUTION - В елемент dwReturn повертається константа описывающая тип лічильника і є одним з наступних значень:

MCI_VCR_COUNTER_RES_FRAMES - У лічильник записуються фрейми.

MCI_VCR_COUNTER_RES_SECONDS -У лічильник записуються секунди.

MCI_VCR_STATUS_COUNTER_VALUE - В елемент dwReturn повертається поточний лічильник стения, у поточному форматі часу.

MCI_VCR_STATUS_FRAME_RATE - В елемент dwReturn повертається поточний натуральний показник фраймов(frame rate) пристрою.

MCI_VCR_STATUS_INDEX - В елемент dwReturn повертається константа що описує поточне зміст екранного дисплея і є одним з наступних значень:

MCI_VCR_INDEX_COUNTER

MCI_VCR_INDEX_DATE

MCI_VCR_INDEX_TIME

MCI_VCR_INDEX_TIMECODE

MCI_VCR_STATUS_INDEX_ON - В елемент dwReturn повертається True якщо екранний дисплей включений чи False у противному випадку.

MCI_VCR_STATUS_MEDIA_TYPE - В елемент dwReturn повертається одне з наступних значень:

MCI_VCR_MEDIA_8MM

MCI_VCR_MEDIA_HI8

MCI_VCR_MEDIA_VHS

MCI_VCR_MEDIA_SVHS

MCI_VCR_MEDIA_BETA

MCI_VCR_MEDIA_EDBETA

MCI_VCR_MEDIA_OTHER

MCI_VCR_STATUS_NUMBER - В елемент dwNumber повертається номер логічного тюнера, коли ыы використовуєте цей прапорець разом із прапором MCI_VCR_STATUS_TUNER_CHANNEL.

MCI_VCR_STATUS_NUMBER_OF_AUDIO_TRACKS - В елемент dwNumber повертається число звукових доріжок.

MCI_VCR_STATUS_NUMBER_OF_VIDEO_TRACKS - В елемент dwNumber повертається число відео доріжок.

MCI_VCR_STATUS_PAUSE_TIMEOUT - В елемент dwNumber повертається максимальна тривалість(у миллисекундах), повідомлення пауузы. Якщо повертається нуль, паузи не буде.

MCI_VCR_STATUS_PLAY_FORMAT - В елемент dwNumber повертаються наступні значення:

MCI_VCR_FORMAT_EP

MCI_VCR_FORMAT_LP

MCI_VCR_FORMAT_OTHER

MCI_VCR_FORMAT_SP

{Переклад цього повідомлення виконаний ще не до кінця, у зв'язку великим обсягом інформації содержащемся в цьому розділі.}

MCI_STEP модуль MMSystem

Усі повідомлення MCI пересилаються за допомогою функції mciSendCommand.

Повідомлення змінює поточне програвання на один чи більш фреймів. Пристрою цифрового відео, VCR, і формат CAV-videodisc приймаю цю команду.

mciId: Ідентифікатор устройсва MCI, що повинний одержати це повідомлення.

dwParam1: Прапори MCI_NOTIFY, MCI_WAIT, чи MCI_TEST.

dwParam2: Адреса структури TMCI_Generic_Parms. (Пристрою з розширеними командними опціями, можуть замінити цю структуру інший, залежної від пристрою структурою.)

Значення, що повертається

У випадку успіху чи нуль помилка в противному випадку.

Зауваження

Повідомлення поддеживают устройсва, що повертаю True, на прапорець MCI_GETDEVCAPS_HAS_VIDEO у повідомленні MCI_GETDEVCAPS.

Наступні додаткові прапори використовуються типом пристроїв цифрового відео, VCR, videodisc (у dwParam2 передається структура TMCI_Seek_Parms):

MCI_VD_STEP_FRAMES - Параметр dwTo структури зазначеної в dwParam2 визначається кількість фреймів для просування програвання.

MCI_VD_STEP_REVERSE - Активує реверс.

Група посилань: MCI

MCI_STOP модуль MMSystem

Усі повідомлення MCI пересилаються за допомогою функції mciSendCommand.

Повідомлення MCI_STOP зупиняє весь запущені на відтворення і запис послідовності, видаляє всі буферы відтворення і припиняє висновок відео. CD АУДИО, відео,MIDI секвенсер, videodisc, VCR, і waveform-аудио пристрою визнають цю команду.

mciId: Ідентифікатор пристрою MCI, що повинне одержувати повідомлення.

dwParam1: Прапори MCI_NOTIFY, MCI_WAIT, чи для цифрового відео і VCR прапорець MCI_TEST.

dwParam2: Вказівник на структуру TMCI_Generic_Parms.

Значення, що повертається

Повертає нуль у випадку чи успіху помилку в противному випадку.

Зауваження

Розходження між MCI_STOP і командами MCI_PAUSE залежить від пристрою. Якщо можливо, MCI_PAUSE затримує операцію пристрою але залишає пристрій готовим продовжити відтворення негайно.

Для аудио пристрою CD, MCI_STOP скидає поточну позицію доріжки в нуль, а MCI_PAUSE запам'ятовує поточну позицію доріжки, припускаючи, що пристрій продовжить відтворення.

Повідомлення вікон SysTreeView32

Зустрічається багато задач, де необхідно використовувати древовидні структури даних. Для представлення інформації в ієрархічному виді існують вікна спеціального класу - SysTreeView32. Цей тип вікон можна побачити в програмі Explorer.exe коли користувач намагається вибрати певний каталог або файл для копіювання. Ці вікна дозволяють також користуватися методом “drag and droр” для вибору каталогу, куди треба скопіювати файл.

Контрол для перегляду дерева можна створити, якщо викликати функцію CreateWindowEx і в параметрі ClassName вказати ім'я класу "SysTreeView32". Для успішної реєстрації стандартних класів вікон необхідно помістити в програму виклик функції InitCommonControls.

Якщо даний контрол належить певному вікну, то це вікно (яке називається батьківським) буде отримувати інформацію про події у дочірньому вікні, яким є контрол. Інформація про події у контролі SysTreeView32, яка надходять у батьківське вікно, надходить у формі повідомлень WM_NOTIFY. Від деяких дочірніх вікон (наприклад, від кнопок) надходять повідомлення WM_COMMAND. Повідомлення WM_NOTIFY має два 4-х байтних параметра. Перший (wparam) містить ідентифікатор контролу, а другий (lparam) – адресу структури даних, яка містить розширену інформацію про подію, що відбулася у контролі.

Стилі вікон SysTreeView32

Tree View Control Window Styles

The following window styles are used when creating tree view controls.

TVS_CHECKBOXES

Version 4.70. Enables check boxes for items in a tree view control. A check box is displayed only if an image is associated with the item. When set to this style, the control effectively uses DrawFrameControl to create and set a state image list containing two images. State image 1 is the unchecked box and state image 2 is the checked box. Setting the state image to zero removes the check box altogether. For more information, see Working with state image indexes.

Version 5.80. Displays a check box even if no image is associated with the item.

Note Once a tree view control is created with this style, the style cannot be removed. To remove this style, you must destroy the control and create a new one in its place. Destroying the tree view control does not destroy the check box state image list. You must destroy it explicitly. Get the handle to the state image list by sending the tree view control a TVM_GETIMAGELIST message. Then destroy the image list with ImageList_Destroy.

TVS_DISABLEDRAGDROP

Prevents the tree view control from sending TVN_BEGINDRAG notification messages.

TVS_EDITLABELS

Allows the user to edit the labels of tree view items.

TVS_FULLROWSELECT

Version 4.71. Enables full-row selection in the tree view. The entire row of the selected item is highlighted, and clicking anywhere on an item's row causes it to be selected. This style cannot be used in conjunction with the TVS_HASLINES style.

TVS_HASBUTTONS

Displays plus (+) and minus (-) buttons next to parent items. The user clicks the buttons to expand or collapse a parent item's list of child items. To include buttons with items at the root of the tree view, TVS_LINESATROOT must also be specified.

TVS_HASLINES

Uses lines to show the hierarchy of items.

TVS_INFOTIP

Version 4.71. The tree view control sends the TVN_GETINFOTIP notification to obtain tooltip information.

TVS_LINESATROOT

Uses lines to link items at the root of the tree view control. This value is ignored if TVS_HASLINES is not also specified.

TVS_NOHSCROLL

Version 5.80. Disables horizontal scrolling in the control. The control will not display any horizontal scroll bars.

TVS_NONEVENHEIGHT

Version 4.71. Sets the height of the items to an odd height with the TVM_SETITEMHEIGHT message. By default, the height of items must be an even value.

TVS_NOSCROLL

Version 4.71. Disables both horizontal and vertical scrolling in the control. The control will not display any scroll bars.

TVS_NOTOOLTIPS

Version 4.70. The tree view control does not support tooltips.

TVS_RTLREADING

Version 4.70. Normal windows display text left-to-right (LTR). Windows can be mirrored to display languages such as Hebrew or Arabic that read right-to-left (RTL). Normally, tree view text is displayed in the same direction as the text in its parent window. If TVS_RTLREADING is set, tree view text reads in the opposite direction from the text in the parent window.

TVS_SHOWSELALWAYS

Causes a selected item to remain selected when the tree view control loses focus.

TVS_SINGLEEXPAND

Version 4.71. When this style is enabled, changing the selection in the tree view automatically causes the item being selected to expand and the item being unselected to collapse. If the mouse is used to single-click the selected item and that item is closed, it will be expanded. If the user holds down the CTRL key while selecting an item, the item being unselected will not be collapsed.

Version 5.80. When this style is enabled, changing the selection automatically causes the item being selected to collapse if it was expanded, or expand if it was collapsed. The unselected item collapses. If the user holds down the CTRL key while selecting an item, the item being unselected will not be collapsed.

TVS_TRACKSELECT

Version 4.70. Enables hot tracking in a tree view control.

-------------------------------------------------------------

Tree View Control Reference

This section contains information about the following new or updated API elements used with tree view controls.

Tree View Control Window Styles

Tree View Control Item States

Messages

TVM_CREATEDRAGIMAGE

TVM_DELETEITEM

TVM_EDITLABEL

TVM_ENDEDITLABELNOW

TVM_ENSUREVISIBLE

TVM_EXPAND

TVM_GETBKCOLOR

TVM_GETCOUNT

TVM_GETEDITCONTROL

TVM_GETIMAGELIST

TVM_GETINDENT

TVM_GETINSERTMARKCOLOR

TVM_GETISEARCHSTRING

TVM_GETITEM

TVM_GETITEMHEIGHT

TVM_GETITEMRECT

TVM_GETITEMSTATE

TVM_GETLINECOLOR

TVM_GETNEXTITEM

TVM_GETSCROLLTIME

TVM_GETTEXTCOLOR

TVM_GETTOOLTIPS

TVM_GETUNICODEFORMAT

TVM_GETVISIBLECOUNT

TVM_HITTEST

TVM_INSERTITEM

TVM_SELECTITEM

TVM_SETBKCOLOR

TVM_SETIMAGELIST

TVM_SETINDENT

TVM_SETINSERTMARK

TVM_SETINSERTMARKCOLOR

TVM_SETITEM

TVM_SETITEMHEIGHT

TVM_SETLINECOLOR

TVM_SETSCROLLTIME

TVM_SETTEXTCOLOR

TVM_SETTOOLTIPS

TVM_SETUNICODEFORMAT

TVM_SORTCHILDREN

TVM_SORTCHILDRENCB

Structures

NMTREEVIEW

NMTVCUSTOMDRAW

NMTVDISPINFO

NMTVGETINFOTIP

NMTVKEYDOWN

TV_DISPINFO

TV_HITTESTINFO

TV_INSERTSTRUCT

TV_ITEM

TV_KEYDOWN

TV_SORTCB

TVHITTESTINFO

TVINSERTSTRUCT

TVITEM

TVITEMEX

TVSORTCB

SUMMARY

This article illustrates how to change the background color of the TreeView control to fit your user interface requirements.

Call SendMessage(TreeView1.hWnd, _

TVM_SETBKCOLOR, _

0, _

ByVal RGB(255, 0, 0)) 'Change the background

'color to red.

' Now reset the style so that the tree lines appear properly

lngStyle = GetWindowLong(TreeView1.hWnd, GWL_STYLE)

Call SetWindowLong(TreeView1.hWnd, _

GWL_STYLE, _

lngStyle - TVS_HASLINES)

Call SetWindowLong(TreeView1.hWnd, GWL_STYLE, lngStyle)

End Sub

On the Run menu, click Start or press the F5 key to start the program.

Click the CommandButton. The TreeView background color changes to red.

REFERENCES

Platform SDK Documentation on the following functions:

SendMessage

GetWindowLong

SetWindowLong

Keywords : kbVBp kbVBp500 kbVBp600

Version :

Platform : WINDOWS

Issue type: kbhowto

Last Reviewed: May 24, 1999

c 1999 Microsoft Corporation. All rights reserved. Terms of Use.

----------------------------------------------------------------------

Tree View Controls

A tree view control is a window that displays a hierarchical list of items, such as the headings in a document, the entries in an index, or the files and directories on a disk. Each item consists of a label and an optional bitmapped image, and each item can have a list of subitems associated with it. By clicking an item, the user can expand or collapse the associated list of subitems.

About Tree View Controls

Using Tree View Controls

Tree View Control Updates in Internet Explorer

Tree View Control Reference

About Tree View Controls

You create a tree view control by using the CreateWindowEx function, specifying the WC_TREEVIEW window class. The class is registered when the common control dynamic-link library (DLL) is loaded. To ensure that this DLL is loaded, include the InitCommonControls function in your application. The following illustration shows a tree view control that displays a table of contents.

After creating a tree view control, you add, remove, arrange, or otherwise manipulate items by sending messages to the control. Each message has one or more corresponding macros that you can use instead of sending the message explicitly.

Tree View Styles

Tree view styles govern aspects of a tree view control's appearance. You set the initial styles when you create the tree view control. You can retrieve and change the styles after creating the tree view control by using the GetWindowLong and SetWindowLong functions.

The TVS_HASLINES style enhances the graphic representation of a tree view control's hierarchy by drawing lines that link child items to their parent item. This style does not link items at the root of the hierarchy. To do so, you need to combine the TVS_HASLINES and TVS_LINESATROOT styles.

The user can expand or collapse a parent item's list of child items by double-clicking the parent item. A tree view control that has the TVS_HASBUTTONS style adds a button to the left side of each parent item. The user can click the button once instead of double-clicking the parent item to expand or collapse the child. TVS_HASBUTTONS does not add buttons to items at the root of the hierarchy. To do so, you must combine TVS_HASLINES, TVS_LINESATROOT, and TVS_HASBUTTONS.

The TVS_EDITLABELS style makes it possible for the user to edit the labels of tree view items. For more information about editing labels, see Tree View Label Editing.

The TVS_SHOWSELALWAYS style causes a selected item to remain selected when the tree view control loses focus.

Parent and Child Items

Any item in a tree view control can have a list of subitems-called child items-associated with it. An item that has one or more child items is called a parent item. A child item is displayed below its parent item and is indented to indicate that it is subordinate to the parent. An item that has no parent appears at the top of the hierarchy and is called a root item.

To add an item to a tree view control, send the TVM_INSERTITEM message to the control. The message returns a handle to the HTREEITEM type, which uniquely identifies the item. When adding an item, you must specify the handle to the new item's parent item. If you specify NULL or the TVI_ROOT value instead of a parent item handle in the TVINSERTSTRUCT structure, the item is added as a root item.

At any given time, the state of a parent item's list of child items can be either expanded or collapsed. When the state is expanded, the child items are displayed below the parent item. When it is collapsed, the child items are not displayed. The list automatically toggles between the expanded and collapsed states when the user double-clicks the parent item or, if the parent has the TVS_HASBUTTONS style, when the user clicks the button associated with the parent item. An application can expand or collapse the child items by using the TVM_EXPAND message.

A tree view control sends the parent window a TVN_ITEMEXPANDING notification message when a parent item's list of child items is about to be expanded or collapsed. The notification gives an application the opportunity to prevent the change or to set any attributes of the parent item that depend on the state of the list of child items. After changing the state of the list, the tree view control sends the parent window a TVN_ITEMEXPANDED notification message.

When a list of child items is expanded, it is indented relative to the parent item. You can set the amount of indentation by using the TVM_SETINDENT message or retrieve the current amount by using the TVM_GETINDENT message.

A tree view control uses memory allocated from the heap of the process that creates the tree view control. The maximum number of items in a tree view is based on the amount of memory available in the heap.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]