WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 | 5 |   ...   | 9 |
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ САНКТ-ПЕТЕРБУРГСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ, МЕХАНИКИ И ОПТИКИ В.Н. Блохин, Ю.А. Лабода, А.Г. Зыков СООБЩЕНИЯ И ПРИЛОЖЕНИЯ WINDOWS Учебное пособие Санкт-Петербург 2012 3 В.Н. Блохин, Ю.А. Лабода, А.Г. Зыков СООБЩЕНИЯ И ПРИЛОЖЕНИЯ WINDOWS Учебное пособие Санкт-Петербург 2012 4 1. Основные сообщения Windows В данном пособии дан краткий обзор наиболее часто используемых сообщений Windows, которые могут обрабатываться или посылаться при выполнении приложений Windows. Все сообщения приведены в алфавитном порядке.

Более подробную информацию можно получить в MSDN. Предполагается, что студенты знакомы с основными понятиями Windows: дескриптор окна (HWND), дескриптор контекста устройства (HDC), параметрами сообщений Windows WPARAM и LPARAM, параметрами окон Windows и стандартными органами управления Windows.

1.1. Назначение и обработка сообщений в Win32 application Сообщения Windows являются эффективным способом связи между операционной системой (ОС) и приложением пользователя, а также между окнами приложения. Именно с их помощью ОС информирует соответствующее окно обо всех касающихся его событиях и осуществляется запрос или передача информации конкретному окну.

Все сообщения имеют единый формат.

Передача сообщения окну производится путем вызова соответствующей оконной процедуры, имя которой указывается при регистрации класса окна. При этом сообщения могут приходить окну либо через очередь сообщений приложения, либо минуя ее. Для получения сообщения из очереди необходимо в главной функции приложения (ГФП) организовать соответствующий цикл обработки.

Пример такого простейшего цикла иллюстрирует следующий фрагмент ГФП:

MSG msg;

while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);

DispatchMessage(&msg);

} return (msg.wParam); // Завершение ГФП Здесь:

msg – структура, в которой будет храниться информация о полученном из очереди сообщении;

GetMessage – функция, выбирающая сообщение из очереди и заносящая информацию о нем в msg;

Эта функция вернет 0, когда получит сообщение WM_QUIT, при ошибке она возвращает -1;

TranslateMessage – функция, используемая при обработке сообщений от клавиатуры – при нажатии отображаемого символа будет сгенерировано со общение WM_CHAR( или WM_SYSCHAR для системной клавиши) и виртуальный код символа будет переведен в обычный, что в некоторых случаях существенно облегчает его обработку;

Функция DispatchMessage вызывает соответствующую оконную процедуру для дальнейшей обработки сообщения.

В некоторых случаях ( например при обработке таблицы акселераторов) данный цикл может быть модифицирован.

Очевидно, что этот цикл завершится при выборе из очереди сообщения WM_QUIT. Отправка этого сообщения в очередь производится функцией PostQuitMessage.

Приложение также может послать сообщение какому либо окну, используя функцию PostMessage для постановки его в очередь или SendMessage для передачи его напрямую (минуя очередь сообщений). В первом случае сообщение обработается только после того, как ОС получит управление и сообщение будет выбрано из очереди, а во втором – сразу. Кроме того при использовании SendMessage обеспечивается возможность получения результата обработки данного сообщения соответствующей оконной процедурой, что очень важно при направлении сообщения стандартным органам управления (ОУ) (при этом для удобства может использоваться функция SendDlgItemMessage как подвид SendMessage).

Все сообщения можно разделить на две большие группы: общего назначения (приходят окнам различных классов и имеют префикс WM_) и специализированные (используются ОУ и имеют префикс в зависимости от типа ОУ).

1.2.Основные сообщения общего назначения Это самая большая и наиболее часто используемая группа сообщений. Без их обработки не обходится ни одно приложение. Сообщения могут относиться как к клиентской области (КО) окна (имеют префикс WM_), так и к не клиентской области (НКО) (префикс WM_NC).

Краткий обзор основных сообщений общего назначения приведен в таблице 1.

Таблица 1.

Сообщение Назна- WPARAM LPARAM Воз- Примечение вращае- чание мое значение Прихо- LOWORD Дескрип- При НестанWM_ дит при содержит тор окна, стан- дартная ACTIVATE активи- флаг акти- которое дартной обработка зации визации, а было ак- обработ- при пере или де- HIWORD – тивным ке при- крываю активи- флаг мнии- или неак- ложение щихся ок зации мизации. тивным до дол-жно нах крайокна. этого. вернуть не не же0, иначе лательна.

1.

Анало- Содержит Иденти- Прило- WM_ гично флаг акти- фикатор же-ние ACTVATEAPP для окна визации. потока, дол-жно другого чье окно вернуть прило- было ак- 0.

жения. тивным или неактивным.

Генери- Код клави- Дополни- руется ши. тельная функци- информаWM_CHAR ей ция.

Translate Message для отображаемых символов при нажатии соответствующих клавиш.

Посыла- LOWORD – Дескрипт- -1 или -2 Позволяет ет окно- код симво- ор окна- означа- организо список, ла. списка. ет, что вать работу имею- HIWORD – прило- приложения щее позиция жение при стиль курсора. управля- нажатии ка LBS_W ет всеми кой-либо ANTKE аспекта- клавиши в WM_ YBOAR ми вы- окне-списке CHARTOITEM DI бранноNPUT го элероди- мента и тельско- не трему окну бует при об- дальнейработке ших дейWM_CH ствий. AR. или больше – индекс элемента, для которого окносписок должно выполнить стандартные действия для нажатой клавиши в данном элементе списка.



Прило- Не исполь- Не ис- WM_CLEAR жение зуется пользуетпосыла- (должно ся (должет это быть 0). но быть сообще- 0).

ние для очистки отметки окна редактора или окна COMBO BOX.

Прихо- Не исполь- Не исоль- 0 СтандартWM_CLOSE дит при зуется. зуется. ная функзакры- ция обратии окна ботки вычерез зывает “крест”. DestroyWi ndow.

Три ис- Для органа точника управления WM_ этого – дескрипCOMMAND сообще- тор окна.

ния: Иначе – 0.

пункт меню, акселератор, орган упр-я.

Прило- 0 0 Отсут- Если со жение ствует. общение посыла- посылает ет это ся комби сообще- нированWM_COPY ние ре- ному спидактору ску, то или ком- оно прибиниро- ходит его ванному элементусписку редактору для ко- и не имеет пирова- эффекта, ния от- ели вымечен- ставлен ного флаг участка CBS_DRO текста в PDOWNL Clipboar IST.

d.

При соз- Не исполь- Содержит Для про- дании зуется. адрес должеWM_CREATE окна (до структуры ния созего ото- с характе- дания браже- ристиками окна нания). создавае- до вермого окна. нуть 0, иначе 1.

Прихо- HDC кноп- HWND Деск- Позволяет дит ро- ки. кнопки. рип-тор менять дитель- кисти стандарт скому фона ные цвета окну от кнопки. кнопки.

WM_ кнопки Для CTLCOLOR при ее PUSHBUT BTN перери- TON совке. цвет текста изменить нельзя(будет изменяться цвет фокусной рамки).

Анало- HDC диа- HWND Деск- Позволяет гично лога. диалога. рип-тор менять WM_ для диа- кисти стандартCTLCOLORDL лога. фона ные цвета G диалога. диалога Анало- HDC редак- HWND Деск- Позволяет гично тора редактора рип-тор менять WM_ для ре- кисти стандартCTLCOLORED дактора фона ре- ные IT дактора цвета редактора Анало- HDC спи- HWND Деск- Позволяет гично ска списка риптор менять WM_CTLCOL для спи- кисти стандартORLIST BOX ска фона ные списка цвета списка Анало- HDC поло- HWND Деск- Позволяет гично сы про- полосы риптор менять WM_CTLCOL для по- крутки прокрутки кисти цвета поOR лосы полосы лосы проSCROLLBAR про- про- крутки крутки крутки Анало- HDC окна HWND Деск- Позволяет WM_CTLCOL гично static окна static риптор менять ORSTATIC для ок- кисти стандартна static фона ок- ные на static цвета окна static WM_CUT Удаляет 0 0 текущую отметку в редакторе или комбиниро ванном списке (для поля редактора) и копирует удаленный текст в clipboard Прихо- Идентифи- Адрес TRUE дит ро- катор ОУ. структуры дитель- типа WM_ скому DELETEI DELETEITEM окну от TEMSTR окна- UCT, соредакто- держащей ра или дополникомби- тельную ниро- информаванного цию.

списка при их разрушении, очистке или удаления строки.

При раз- 0 0 WM_ рушении DESTROY окна При Идентифи- Адрес. TRUE Должен собст- катор орга- структу- быть преWM_ венной на управле- ры, со- дусмотрен DRAWITEM отрисов- ния (для держащей Соответке кноп- пункта ме- информа- ствующий ки, спи- ню – 0). цию об флаг.

ска, соотв. ОУ комби- или пункниро- те меню ванного.

списка или пункта меню.

При из- Определяет 0 WM_ENABLE менении состояния состоя- окна ния окна WM_ Инфор- Флаг за- Причина 0. Смотри ENDSESSION мирует о вершения заверше- описание завер- сеанса ния сеанса WM_QUE шении Windows, Windows RY сеанса совпадает с ENDSESS Windows возвращае- ION. Если и прихо- мым значе- wParam дит по- нием обра- равен 1, сле об- ботки то необработке WM_QUER ходимо резуль- Y завершить тата со- ENDSESSI все дейстобщения ON ) вия, так WM_QU как после ERYEN возврата D приложеSESSIO ние будет N завершено. При этом не надо вызывать функции DestroyWi ndow и PostQuitM essage.

Сигна- Дескриптор 0 Если Именно WM_ лизирует контекста прило- при обраERASEBKGND о разру- устройства. жение ботке шении само от- данного фона ра- рисовы- сообщебочей вает фон ния слеобласти – 1, ина- дует переокна. че 0. рисовыПосыла- вать фон ется при окна, если необхо- он отлидимости чается от функци- указанно ей го при реBeginPai гистрации nt. класса.

Позво- 0 0 Если WM_ ляет по- возвраGETFONT лучить щаемое дескрип- значение тор фон- – NULL, та, ис- то орган поль- управзуемого ления органом испольуправ- зует сисления. темный фонт.

Позво- Тип иконы 0 Деск- WM_GETICON ляет по- (большая риптор лучить или ма- соответдескрип- ленькая). ствуютор ико- щей иконы окна. ны.

Прихо- 0 Адрес 0 Позволяет WM_GETMIN дит при структуры устаноMAXINFO измене- MINMAX вить минии раз- INFO нимальмера или ный и позиции максиокна (в маль-ный том чис- размер ле при окна, укаего соз- зывая дании). требуемые значения в соответствующих полях структуры MINMAX INFO.

Позво- Количество Адрес Количе- WM_ ляет максималь- строки ство GETTEXT скопи- но копи- для копии скопировать руемых текста. ровансвязан- символов. ных ный с симвоокном лов.

текст в буфер.

Опреде- 0 0 Длина WM_ ление текста GETTEXT длины без 0текста, символа.

связанного с окном.

Служит 0 Адрес TRUE WM_HELP для ор- структуры ганиза- HELPINF ции O справки по работе сданным окном.

Приходит окну, связанному с активным пунктом меню либо имеющему в данный момент времени фокус ввода, иначе – активному окну при нажатии клавиши F1.

Гори- LOWORD – Дескрип- WM_HSCROL зонталь- параметр тор окна ная про- прокрутки. (ОУ) про крутка HIWORD – крутки позиция либо прокрутки NULL, ес при исполь- ли прихо зовании дит от по SB_THUM лосы про BPOSITION крутки.

или SB_THUM BTRACK в LOWORD.

WM_ICONERA Прихо- HDC ико- 0 SEBKGND дит ми- ны.





нимизированному окну, если икона определена при регистрации класса окна, и позволяет заполнить фон до отрисовки иконы Прихо- Дескриптор Параметр Если Если возWM_ дит окну окна, кото- инициали- TRUE, вращае INITDIALOG диалога рое получит зации – то фокус мое знапри его фокус ввода содержит ввода – чение – инициа- по умолча- дополни- по FALSE и лизации. нию. тельную умолча- функция информа- нию; SetFoсus цию иначе не использо- пользуетватель ся, то ни устанав- один из ливает ОУ не буего сам с дет иметь помо- фокуса щью ввода.

функции SetFoсus.

Прихо- Дескриптор 0 0 Позволяет WM_ дит при меню. модифиINITMENU инициа- цировать лизации меню до меню. его отображения.

Анало- Дескриптор LOWORD 0 Позволяет WM_INITPOP гично подменю. – позиция модифиUPMENU для под- подменю цировать меню (выпа- меню до или вы- дающего его отопадаю- меню). бражения.

щего HIWORD меню. – флаг меню.

Прихо- Виртуаль- Дополни- WM_ дит при ный код тельная KEYDOWN нажатии клавиши. информаклави- ция.

ши.

Прихо- Виртуаль- Дополни- WM_KEYUP дит при ный код тельная отпуска- клавиши. информании кла- ция виши.

Окно Дескриптор 0 WM_ потеряло окна, полуKILLFOCUS фокус чившего ввода. фокус ввода (может быть 0).

Прихо- Флаг нажа- LOWORD 0 Это сообWM_LBUTTO дит при тых вирту- – x, а щение поN DBLCLK двойном альных кла- HIWORD лучают нажатии виш. – y коор- окна, у левой дината которых клавиши курсора указан “мыши” “мыши”. стиль в рабо- класса чей об- CS_DBLC ласти LKS.

окна.

Прихо- Флаг нажа- LOWORD WM_ дит при тых вирту- – x, а LBUTTONDO нажатии альных кла- HIWORD WN левой виш. – y коорклавиши дината “мыши” курсора в рабо- “мыши”.

чей области окна Прихо- Флаг нажа- LOWORD WM_ дит при тых вирту- – x, а LBUTTONUP отпуска- альных кла- HIWORD нии ле- виш. – y коорвой кла- дината виши курсора “мыши” “мыши”.

в рабочей области окна Прихо- Флаг нажа- LOWORD 0 Это сообWM_MBUTTO дит при тых вирту- – x, а щение поN DBLCLK двойном альных кла- HIWORD лучают нажатии виш – y коор- окна, у средней дината которых клавиши курсора указан “мыши” “мыши”. стиль в рабо- класса чей об- CS_DBLC ласти LKS.

окна.

Прихо- Флаг нажа- LOWORD WM_ дит при тых вирту- – x, а MBUTTONDO нажатии альных кла- HIWORD WN средней виш – y коорклавиши дината “мыши” курсора в рабо- “мыши”.

чей области окна Прихо- Флаг нажа- LOWORD WM_ дит при тых вирту- – x, а MBUTTONUP отпуска- альных кла- HIWORD нии виш – y коор средней дината клавиши курсора “мыши” “мыши”.

в рабочей области окна Прихо- LOWORD – Дескрип- Опреде- НеобхоWM_ дит окну код клави- тор меню ляет же- димо обMENUCHAR с актив- ши, лаемое рабатыным ме- HIWORD – действие вать это ню, ко- флаг меню. системы сообщегда. ние, если пользо- акселераватель тор иснажал пользуетклавишу ся для не свя- пункта занную с меню, коакселе- торый ратором отображаили с ется как мнемо- BITMAP.

ническим кодом.

Прихо- LOWORD – Дескрип- WM_ дит окну идентифи- тор меню.

MENUSELECT при вы- катор пункборе та меню, пункта HIWORD – меню. флаг меню.

Прихо- Флаг, опре- LOWORD WM_ дит окну деляющий – горизонMOUSEMOVE при пе- нажатые тальная ремеще- виртуалькоординии кур- ные клавината сора ши.

курсомыши в ра, рабочей HIWORD области – верокна.

тикальная.

LOWORD Прихо- 0 – гориWM_MOVE дит окну зонпосле тальная его пекоордиремещената ния..

верхнего левого угла рабочей области, HIWORD – вертикальная.

Прихо- 0 Анало- WM_MOVING дит окну гично.

при его перемещении..

Прихо- Новое со- 0 Если WM_ дит окну стояние за- WPARA NCACTIVATE когда головка ок- M – его не на или ико- FALSE, клиент- ны. возврат ская об- TRUE ласть означает нужда- действие ется в по умолизмене- чанию, а нии для FALSE индика- предотции ак- вращает тивного деактиили не- визацию активно- заголовго со- ка окна стояния. или иконы.

Иначе безразлично.

Прихо- 0 Адрес TRUE WM_ дит окну структуры для про NCCREATE перед CREATES должеWM_CR TRUCT ния созEATE дания окна, иначе – FALSE.

Инфор- 0 0 WM_ мирует о NCDESTROY разрушении НКО и приходит после WM_DE STROY.

Старшее 0 LOWORD Детали- WM_ сообще- и зация NCHITTEST ние от HIWORD места мыши. содержит нахожX и Y ко- дения ординаты курсора курсора мыши.

мыши в экранной системе координат.

Двойное Специфи- Структура 0 Должен WM_NCLBUT нажатие цирует зна- типа быть преTONDBLCLK левой чение, по- POINT, дусмотрен клавиши лученное содержа- стиль мыши в при обра- щая коор- CS_DBLC НКО. ботке динаты LKS при WM_NCHI курсора регистраTTEST. мыши в ции класэкранной са окна.

системе координат.

Нажатие Аналогич- Анало- WM_NCLBUT левой но. гично.

TONDOWN клавиши мыши в НКО.

WM_ Отпус- Аналогич- Анало- NCLBUTTON кание но. гично.

UP левой клавиши мыши в НКО.

Двойное Аналогич- Анало- 0 Должен нажатие но. гично. быть WM_NCMBUT средней стиль окTONDBLCLK клавиши на мыши в CS_DBLC НКО. LKS.

Нажатие Аналогич- Анало- WM_NCMBUT средней но. гично.

TONDOWN клавиши мыши в НКО..

Отпус- Аналогич- Анало- WM_ кание но. гично.

NCMBUTTON средней UP клавиши мыши в НКО.

При пе- Аналогич- Анало- WM_NCMOUS ремеще- но. гично.

EMOVE нии курсора мыши в НКО.

Прихо- Дескриптор 0 Контекст WM_NCPAINT дит, если региона пе- устройстНКО рерисовки. ва может нужда- быть поется в лучен чеперери- рез GetDCEx совке.

.

Pages:     || 2 | 3 | 4 | 5 |   ...   | 9 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.