Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции / Shchupak_Yu._Win32_API_Razrabotka_prilozheniy_dlya_Windows

.pdf
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
13.15 Mб
Скачать

Добавление к проекту нового файла

581

 

 

папки Source Files в окне Solution Explorer. В появившемся контекстном меню надо выбрать команду Add Add New Item. В результате будет отображено окно Add New Item (рис. П2.8).

Ðèñ. Ï2.8. Îêíî Add New Item

В окне Templates нужно выделить шаблон C++ File или Header File в зависимости от того, какого типа файл нужно присоединить к проекту. Введите имя файла в текстовое поле Name, например, HelloFromMsgBox, и нажмите кнопку Open. После этого в списке файлов Source Files окна Solution Explorer появится обозначение но вого файла, например, HelloFromMsgBox.cpp, а также откроется окно текстового ре дактора.

Рис. П2.9. Окно Visual Studio.NET после ввода текста в файл HelloFromMsgBox.cpp

582

Приложение 2. Интегрированная среда VisualStudio.NET

 

 

Введите текст в окне текстового редактора, например:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

MessageBox(NULL, "Hello, Win32 world!", "Hello from Message Box", MB_OK); return 0;

}

После ввода текста основное окно Visual Studio.NET примет вид, показанный на рис. П2.9.

Сохраните набранный текст с помощью команды меню File Save.

Компиляция, сборка и выполнение

Выберите в меню главного окна команду Build Build Solution (Ctrl+Shift+B). Сообщения о ходе компиляции и сборки будут поступать в окно Output. У нас

ошибок нет, поэтому окно выглядит, как показано на рис. П2.10.

Рис. П2.10. Окно Visual Studio.NET после компиляции и сборки проекта HelloFromMsgBox

Откомпилированное приложение можно запустить на выполнение двумя спо собами.

Выполнение в обычном режиме производится с помощью команды меню

Debug Start Without Debugging (Ctrl+F5).

Запуск в отладочном режиме производится с помощью команды меню Debug Start (F5).

Компиляция, сборка и выполнение

583

 

 

Работа с редакторами ресурсов

Для добавления ресурсов в приложение вместо команды меню Insert Resource, которая применялась в Visual Studio 6.0, здесь используется команда Project Add Resource. После этой команды появляется диалоговое окно Add Resource. Выбор типа добавляемого ресурса делается так же, как в Visual Studio 6.0.

В Visual Studio.NET вместо панели инструментов Controls используется окно Toolbox, вызываемое с помощью команды меню View Toolbox. Это окно располо жено в левой части главного окна Studio.NET.

Необходимый элемент управления в окне Toolbox выбирается щелчком мыши. Затем для размещения элемента управления на форме диалога делается повтор ный щелчок мыши в том месте, где следует расположить элемент.

Окно свойств для элементов управления здесь вызывать не нужно, так как свой ства выбранного элемента управления отображаются в окне Properties, которое находится либо ниже окна Solution Explorer, либо рядом с ним.

Другие действия с проектами осуществляются примерно так же, как и при ра боте в среде Visual Studio 6.0.

584

Приложение 3. Работа с утилитой Spy++

Приложение 3

Работа с утилитой Spy++

В Microsoft Visual Studio 6.0 (а также в Visual Studio.NET) есть инструменталь ное средство под названием Spy++. Эта программа «шпионит» за окном другого приложения, чтобы разработчик мог иметь представление о том, какие сообще ния проходят через это окно.

Вэтом приложении описывается работа с утилитой Spy++ в составе Visual Studio

6.0.Запустить утилиту можно при помощи команды меню Visual Studio Tools Spy++. Окно утилиты Spy++ имеет вид, показанный на рис. П3.1.

Рис. П3.1. Окно утилиты Spy++

Технология шпионского наблюдения за интересующим вас приложением XXX довольно проста. Сначала запустите на выполнение приложение XXX. Затем раз местите на экране окно утилиты Spy и окно приложения XXX так, чтобы они были видны одновременно и не перекрывали друг друга. Выполните команду меню Spy Messages. В результате будет отображено диалоговое окно Message Options (рис. П3.2).

На вкладке Windows схватите левой кнопкой мыши пиктограмму Finder Tool и, удерживая кнопку, перетащите ее в то окно приложения XXX, за которым вы хоти те наблюдать. После этого отпустите левую кнопку мыши.

Приложение 3. Работа с утилитой Spy++

585

 

 

Ðèñ. Ï3.2. Îêíî Message Options

В группе Selected Object будет отображена следующая информация:

дескриптор окна (Window);

заголовок окна (Text);

имя класса;

стиль;

координаты окна;

дескриптор потока (Thread ID);

дескриптор процесса (Process ID).

Теперь надо нажать кнопку OK, и будет отображено окно Messages (Window…)

(рис. П3.3).

Ðèñ. Ï3.3. Îêíî Messages (Window…)

После этого утилита Spy++ готова фиксировать все сообщения, поступающие в «помеченное» окно. Сообщения фиксируются в окне Messages (Window… ) в сле дующем формате:

Текущий номер

Дескриптор

Код сообщения

Идентификатор

Значения

сообщения

îêíà

 

сообщения

параметров

 

 

 

 

 

586

Приложение 3. Работа с утилитой Spy++

 

 

Код сообщения может иметь одно из значений, приведенных в табл. П3.1.

Таблица П3.1. Возможные коды сообщений

Код Описание

PСообщение было отправлено в очередь сообщений с помощью функции PostMessage

SСообщение было отправлено в очередь сообщений с помощью функции SendMessage

sСообщение было отправлено с помощью SendMessage, но служба безопасности (security) не позволяет получить возвращаемое значение

RКаждой строке с кодом S должна соответствовать строка с кодом R (return), которая содержит значение ответного сообщения. Иногда вызовы сообщений вложены друг в друга, когда обработчик одного сообщения посылает другое сообщение

При первом сеансе использования Spy++ вас, по видимому, поразит количество сообщений, протекающих через окно. Например, при нажатии кнопки закрытия окна в основном окне наблюдается более сорока сообщений.

Можно, однако, фильтровать поток сообщений, фиксируемых в окне Messages (Window … ), чтобы упростить анализ работы приложения. Для фильтрации сооб щений вернитесь в диалоговое окно Message Options и откройте вкладку Messages (рис. П3.4).

Рис. П3.4. Вкладка Messages

Здесь есть два механизма включения/исключения фиксируемых сообщений:

1.В группе Message Groups можно включить или исключить группу сообщений, относящихся либо к некоторому типу элемента управления, либо к некото рому внешнему источнику сообщений. Например, сообщения, поступающие от мыши.

2.В списке Messages to View содержится полный перечень сообщений, и каждое из них можно включить или исключить. По умолчанию все сообщения вклю чены.

Использование утилиты Spy++ помогает иногда понять, почему ваше прило жение работает не так, как вы ожидали.

Приложение 3. Работа с утилитой Spy++

587

Список литературы

1.Петзолд Ч. Программирование для Windows 95. Т. 1. — СПб: BHV — Санкт Петербург, 1997. — 739 с.

2.Мюррей У., Паппас К. Создание переносимых приложений для Windows. — СПб: BHV — Санкт Петербург, 1997. — 816 с.

3.Саймон Р. Microsoft Windows 2000 API. Энциклопедия программиста. — Киев: ДиаСофт, 2001. — 1008 с.

4.Вильямс М. Программирование в Windows 2000. Энциклопедия пользователя. — Киев: ДиаСофт, 2000. — 640 с.

5.Рихтер Дж. Windows для профессионалов: создание эффективных Win32 приложений с учетом специфики 64 разрядной версии Windows. — СПб: Питер, 2001. — 752 с.

6.Юань Фень. Программирование графики для Windows. — СПб: Питер, 2002. — 1072 с.

7.Румянцев П. В. Азбука программирования в Win32 API. — М.: Горячая линия – Телеком, 2001. — 312 с.

8.Касперски К. Техника оптимизации программ. Эффективное использование памяти. — СПб: BHV — Санкт Петербург, 2003. — 464 с.

9.Павловская Т., Щупак Ю. С++. Объектно ориентированное программирование: Практикум. — СПб: Питер, 2004. — 265 с.

588

Приложение 3. Работа с утилитой Spy++

Алфавитный указатель

À

atomic access 459

B

bitmap 59

bitmap stretching mode 182 brush 59

Button 323

D

DDB 175

DDK 19 device space 67 dialog box 304

dialog procedure 304 dialog template units 308 DIB 175

DIB секция 201

E

event 464

F

font 59

font mapping 128

G

GDI 19, 58

GUI 16

H

handle 20 hotkey 273

M

mailslots 470 mapping modes 71 mouse cursor 226 MSMQ 470 mutex 467

P

page file 471 page space 67 palette 59 pen 59

physical device space 67 primary thread 443 Progress bar 423 project workspace 563

R

region 59

ritical section 460

S

scan code 214 SDK 19

security descriptor 442 semaphore 466 shortcut menu 293 Slider 428

sockets 470 Spin 435 status bar 413 swap file 471

T

thread 443

thread context 443 Tooltip 391 TrueType 119 TSC 489

U

UTC время 487

V

Virtual Memory Manager 471

VMM 471

W

Wait функции 462 window procedure 42 world space 67

À

активное окно 18 Анонимный канал 470 атомарный доступ 459

Á

библиотека динамической компоновки 19 Библиотеки динамической компоновки (DLL) 20 бинарные растровые операции 79

Â

векторная графика 174 венгерская нотация 27 Видимый регион 60 Виртуальный код клавиши 216 виртуальный код клавиши 214

Время Windows 486 выключка 134

Ã

главное меню 272 горячая клавиша 273

Ä

двойная буферизация 543 дескриптор 20

Алфавитный указатель

589

 

 

дескриптор защиты 442 дескрипторы

экземпляра приложения 55

диалоговая процедура 304 Диалоговое окно 304 динамическое связывание 20 Диспетчер виртуальной памяти 471

дочернее окно 18

È

Именованный канал 470 Индикатор процесса 423 информационный контекст 66

Ê

каскадное меню 274 квант 444 Кисть 35 кисть 59 класс окна 23 «классы

KDib» 184 KWndEx» 408

классы KDibSection 557 KDocument 146 KTimer 492 KWnd 46 QTimer 502

Клиент 473 Кнопка 323

Комбинированный список 356 Контекст потока 443

Контекст устройства 43, 59 Контекст устройства в памяти 65 Контекстное меню 293 контекстное меню 272 координаты Windows

клиентские 28 оконные 28 экранные 28

Кривая Безье 86 Критическая секция 460 курсор мыши 226

Ë

Латентность 491 Логический шрифт 124

Ì

макросы GetBValue 77 GetGValue 77 GetRValue 77 HIWORD 55 LOWORD 55

MAKEINTRESOURCE 253

PALETTEINDEX 77 PALETTERGB 77 RGB 77

Метафайл 206 Мировая система координат 67

модальные диалоговые окна 304 мультимедийная библиоте ка winmm.lib 266

мьютекс 467

Í

немодальные диалоговые окна 304 немые клавиши 218

Î

Обновляемый регион 60 окно Windows

клиентская область 29 окно верхнего уровня 18 Окно подсказки 391 Окно редактирования 341 окно сообщений 26 оконная процедура 22, 42 оконный класс

регистрация класса 32 стандартный (предопре

деленный) 23 стили 33

описатель 20 Отсечение 112

Ï

«палитра» 159 палитра 59

Панель инструментов 385

первичный поток 443 перо 59, 87 Пиксел 76 Пиктограмма 243 пиктограмма 28

поразрядные флаги 33 Поток 443 поток 17

Примитив синхронизации 459 Пропускная способность 491 Процесс 443 процесс 17

Ð

Рабочая область 563 разрешение системного таймера 487 растеризация шрифта 120 растровая графика 174 Растровая кисть 99 растровая операция 79 растровое изображение 59 Регион 59, 109 Регион отсечения 60 Регулятор 428 редактор. См. См. AppBrowser

режим масштабирования растра 182 режим отображения 71

режим отображения MM_TEXT 72

режим пользователя 441 режим рисования 80 режим смешивания фона

OPAQUE 81 TRANSPARENT 81

режим ядра 441 Ресурсы 242 родительское окно 18

Ñ

семафор 466 Сервер 473

Система координат устрой ства 67 системная очередь сообще ний 22

Системное время 487

590

Алфавитный указатель

 

 

 

Скан код 214 скан код 41 Событие 464

совместимый контекст 65 Сокеты 470 сообщение 21 «сообщения

PBM_SETPOS» 424 PBM_SETRANGE» 423 PBM_SETSTEP» 424 PBM_STEPIT» 424 SB_GETRECT» 414 SB_SETMINHEIGHT»

415 SB_SETPARTS» 414 SB_SETTEXT» 414 SB_SIMPLE» 414

TB_ADDSTRING» 390 TB_AUTOSIZE» 391 TBM_GETPOS» 431 TBM_SETLINESIZE» 430 TBM_SETPAGESIZE»

430 TBM_SETRANGE» 430

TBM_SETTICFREQ» 430 UDM_GETPOS» 437 UDM_SETRANGE» 437 WM_CHAR» 218 WM_COMMAND» 284 WM_CONTEXTMENU»

293 WM_CTLCOLOREDIT»

343 WM_CTLCOLORSTATIC»

321 WM_DRAWITEM» 325 WM_HSCROLL»

430, 437 WM_INITDIALOG» 318 WM_INITMENU» 284 WM_KEYDOWN» 216 WM_KEYUP» 216 WM_KILLFOCUS» 221 WM_LBUTTONDBLCLK»

227 WM_LBUTTONDOWN»

227 WM_MENUCHAR» 284 WM_MENUSELECT»

284, 416 WM_MOUSEMOVE» 226

«сообщения (продолжение) WM_MOUSEWHEEL»

227 WM_NOTIFY» 385

WM_SETFOCUS» 221 WM_SETFONT» 321 WM_SYSCOMMAND»

284

WM_VSCROLL» 430, 437 сообщения

WM_CLOSE 45, 51

WM_COMMAND 51 WM_COPYDATA 474 WM_CREATE 51 WM_DESTROY 46, 51 WM_ERASEBKGND 61 WM_HSCROLL 144 WM_INITDIALOG 51 WM_MOVE 51 WM_NCPAINT 61 WM_PAINT 42, 51, 61 WM_QUIT 24, 41 WM_SIZE 51 WM_TIMER 51 WM_VSCROLL 144 очередь сообщений

приложения 22 параметры сообщения 23 синхронные и асинхрон

ные 53 цикл обработки сообще

ний 24, 40 Список 344 сплайн Безье 86 Сплошная кисть 97

статическое связывание 19 Страничная система координат 67 страничный файл 471 Строка состояния 413 «структуры

BITMAP» 193 BITMAPFILEHEADER»

176 BITMAPINFO» 183

BITMAPINFOHEADER»

176 CHOOSECOLOR» 377 CHOOSEFONT» 377 DRAWITEMSTRUCT»

325

«структуры (продолжение) INITCOMMONCONTROLSEX»

381 LOGPALETTE» 171 NMHDR» 392

OPENFILENAME» 377 PALETTEENTRY» 161 RGBQUAD» 180 TBBUTTON» 389 TOOLINFO» 407 TOOLTIPTEXT» 392

структуры COPYDATASTRUCT

474 LOGBRUSH 100 LOGFONT 125 MSG 40 PAINTSTRUCT 61 POINT 40

PROCESS_INFORMATION 448

RECT 44 SCROLLINFO 143 STARTUPINFO 447 SYSTEMTIME 487 TEXTMETRIC 121 WNDCLASSEX 32 XFORM 72

счетчик 435 счетчик меток реального времени 489

Ò

типы данных COLORREF 77 HBRUSH 97 HFONT 124 HGDIOBJ 87 HICON 253 HPEN 87

типы данных Windows 20

Ô

файл подкачки 471 Физическая система координат 67 Фокус ввода 214 фокус ввода 18 «функции

AppendMenu» 281 BitBlt» 197