Краткий справочник по функциям winapi


Содержание

Справочник Win API

Народ.
Давно мучает вопрос.
Существует ли глобальный справочник по Win API.

Надоело мусолить эти мелкие справочники, по 50 API.

Былобы не плохо надыбать справочник с подробным описанием констант и структур.
И желательно по библиотекам, а не всё в одном.

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

Мыльте SkyProc@rambler.ru или оставляйте сообщения на форуме.

22.08.2008, 14:26

Мануал или справочник по Win API
День добрый, товарищи! А подскажите хороший мануал или справочник по WinAPI. Желательно, доходчиво.

WIN API C++
Недавно заинтересовался win api, с++ знаю только по консоли и с++ билдере. У меня 2 вопроса) 1.

API Win 32
Вообщем-то нужно определить конфигурацию компьютера посредствам функций api win 32. Какие диски.

Программирование на Win API
помогите пожалуйста создать прогу Текстовый редактор с цветной подсветкой с использованием функции.

Функции WIN API
Здравствуйте. Подскажите пожалуйста где можно посмотреть реализацию некоторых функций в WIN API.

Работа с функциями Windows API и DLL

Windows API — наиболее важная и мощная дополнительная библиотека функций, доступная каждому VB-программисту. Многие из них, в том числе и опытные разработчики, работают с функциями Windows API, используя простые готовые решения, почерпнутые из различных книг и журналов (возможно, и в нашей постоянной рубрике «Советы для тех, кто программирует на VB»), и не очень задумываясь о сути этой технологии. Такой подход является достаточным при решении простых задач, но для серьезной работы предпочтительнее более детально разобраться с основными принципами использования функций Windows API. Этим мы сейчас и займемся.

Windows API — набор функций операционной системы

Аббревиатура API многим начинающим программистам кажется весьма таинственной и даже пугающей. На самом же деле Application Programming Interface (API) — это просто некоторый готовый набор функций, который могут использовать разработчики приложений. В общем случае данное понятие эквивалентно тому, что раньше чаще называли библиотекой подпрограмм. Однако обычно под API подразумевается особая категория таких библиотек.

В ходе разработки практически любого достаточно сложного приложения (MyAppication) для конечного пользователя формируется набор специфических внутренних функций, используемых для реализации данной конкретной программы, который называется MyApplication API. Однако часто оказывается, что эти функции могут эффективно использоваться и для создания других приложений, в том числе другими программистами. В этом случае авторы, исходя из стратегии продвижения своего продукта, должны решить вопрос: открывают они доступ к этому набору для внешних пользователей или нет? При утвердительном ответе в описании программного пакета в качестве положительной характеристики появляется фраза: «Комплект включает открытый набор API-функций» (но иногда за дополнительные деньги).

Таким образом, чаще всего под API подразумевается набор функций, являющихся частью одного приложения, но при этом доступных для использования в других программах. Например, Excel, кроме интерфейса для конечного пользователя, имеет набор функций Excel API, который может использоваться, в частности, при создании приложений с помощью VB.

Соответственно Windows API — это набор функций, являющийся частью самой операционной системы и в то же время — доступный для любого другого приложения, в том числе написанного с помощью VB. В этом плане вполне оправданна аналогия с набором системных прерываний BIOS/DOS, который фактически представляет собой DOS API.

Отличие заключается в том, что состав функций Windows API, с одной стороны, значительно шире по сравнению с DOS, с другой — не включает многие средства прямого управления ресурсами компьютера, которые были доступны программистам в предыдущей ОС. Кроме того, обращение к Windows API выполняется с помощью обыкновенных процедурных обращений, а вызов функций DOS — через специальную машинную команду процессора, которая называется Interrupt («прерывание»).

Win16 API и Win32 API

Как известно, смена Windows 3.x на Windows 95 ознаменовала собой переход от 16-разрядной архитектуры операционной системы к 32-разрядной. Одновременно произошла замена 16-разрядного Windows API (Win16 API) на новый 32-разрядный вариант (Win32 API) — о некоторых аспектах этого перехода будет упомянуто в этой главе. В данном случае нужно просто иметь в виду, что, за небольшим исключением, набор Win32 API является единым для семейств Windows 9x и Windows NT.

Далее в этой статье под термином API будет подразумеваться Win API, более того, по умолчанию — Win32 API.

Зачем нужен Win API для VB-программистов

Несмотря на то что VB обладает огромным множеством разнообразных функций, в процессе более-менее серьезной разработки обнаруживается, что их возможностей зачастую не достаточно для решения необходимых задач. При этом программисты-новички часто начинают жаловаться на недостатки VB и подумывать о смене инструмента, не подозревая, что на их компьютере имеется огромный набор средств и нужно только уметь ими воспользоваться.

При знакомстве с Win API обнаруживается, что многие встроенные VB-функции — не что иное, как обращение к соответствующим системным процедурам, но только реализованное в виде синтаксиса данного языка. С учетом этого необходимость использования API определяется следующим вариантами:

  1. API-функции, которые полностью реализованы в виде встроенных VB-функций. Тем не менее иногда и в этом случае бывает полезным перейти к применению API, так как это позволяет порой существенно повысить производительность (в частности, за счет отсутствия ненужных преобразований передаваемых параметров).
  2. Встроенные VB-функции реализуют лишь частный случай соответствующей API-функции. Это довольно обычный вариант. Например, API-функция CreateDirectory обладает более широкими возможностями по сравнению со встроенным VB-оператором MkDir.
  3. Огромное число API-функций вообще не имеет аналогов в существующем сегодня варианте языка VB. Например, удалить каталог средствами VB нельзя — для этого нужно использовать функцию DeleteDirectory.

Следует также подчеркнуть, что некоторые API-функции (их доля в Win API весьма незначительна) не могут вызываться из VB-программ из-за ряда ограничений языка, например из-за отсутствия возможности работы с адресами памяти. Но в ряде случаев могут помочь нетривиальные приемы программирования (в частности, в случае с теми же адресами).

Личная точка зрения автора такова — вместо расширения от версии к версии встроенных функций VВ следовало бы давать хорошее описание наиболее ходовых API-функций. В то же время хочется посоветовать разработчикам не ждать появления новой версии средства с расширенными функциями, а внимательнее изучить состав существующего Win API — вполне вероятно, что нужные вам возможности можно было реализовать уже в версии VB 1.0 выпуска 1991 года.

Как изучать Win API

Это не такой простой вопрос, если учесть, что число функций Win32 API оценивается величиной порядка 10 тысяч (точной цифры не знает никто, даже Microsoft).

В состав VB (версий 4-6) входит файл с описанием объявлений Win API — WIN32API.TXT (подробнее о его применении мы расскажем позднее). Но, во-первых, с его помощью можно получить сведения о назначении той или иной функции и ее параметрах только по используемым мнемоническим именам, а во-вторых — перечень функций в этом файле далеко не полный. В свое время (семь лет назад) в VB 3.0 имелись специальные справочные файлы с описанием функций Win16 API. Однако уже в v.4.0 эта полезная информация с удобным интерфейсом исчезла.

Исчерпывающую информацию о Win32 API можно найти в справочной системе Platform Software Development Kit, которая, в частности, находится на компакт-дисках MSDN Library, включенных в состав VB 5.0 и 6.0 Enterprise Edition и Office 2000 Developer Edition. Однако разыскать там нужную информацию и разобраться в ней совсем не просто. Не говоря уж о том, что все описания там приводятся применительно к языку C.

Общепризнанным в мире пособием для изучения API-программирования в среде VB являются книги известного американского эксперта Даниэля Эпплмана (Daniel Appleman). Его серия Dan Appleman’s Visual Basic Programmer’s Guide to the Windows API (для Win16, Win32, применительно к разным версиям VB) с 1993 года неизменно входит в число бестселлеров для VB-программистов. Книгу Dan Appleman’s VB 5.0 Programmer’s Guide to the Win32 API, выпущенную в 1997 году, автору привез из США приятель, который нашел ее в первом же книжном магазине небольшого провинциального городка.

Эта книга объемом свыше 1500 страниц включает описание общей методики API-программирования в среде VB, а также более 900 функций. Прилагаемый компакт-диск содержит полный текст книги и всех программных примеров, а кроме того, несколько дополнительных глав, не вошедших в печатный вариант. В 1999 году Дэн Эпплман выпустил новую книгу Dan Appleman’s Win32 API Puzzle Book and Tutorial for Visual Basic Programmers, которая включает сведения о еще 7600 функциях (хотя и не столь обстоятельные).

Набор Win API реализован в виде динамических DLL-библиотек. Далее речь фактически пойдет о технологии использования DLL в среде VB на примере библиотек, входящих в состав Win API. Однако, говоря о DLL, необходимо сделать несколько важных замечаний.

В данном случае под DLL мы подразумеваем традиционный вариант двоичных динамических библиотек, которые обеспечивают прямое обращение приложений к нужным процедурам — подпрограммам или функциям (примерно так же, как это происходит при вызове процедур внутри VB-проекта). Такие библиотеки могут создаваться с помощью разных инструментов: VC++, Delphi, Fortran, кроме VB (посмотрим, что появится в версии 7.0) — последний может делать только ActiveX DLL, доступ к которым выполняется через интерфейс OLE Automation.

Обычно файлы динамических библиотек имеют расширение .DLL, но это совсем не обязательно (для Win16 часто применялось расширение .EXE); драйверы внешних устройств обозначаются с помощью .DRV.

Как мы уже отмечали, определить точное число API-функций Windows и содержащих их файлов достаточно сложно, однако все они находятся в системном каталоге. В этом плане лучше выделить состав библиотек, входящих в ядро операционной системы, и основных библиотек с ключевыми дополнительными функциями.

А теперь несколько советов.

Совет 1. Следите за правильным оформлением объявления DLL-процедур

Само обращение к DLL-процедурам в программе выглядит точно так же, как к «обычным» процедурам Visual Basic, например:

Однако для использования внешних DLL-функций (в том числе и Win API) их нужно обязательно объявить в программе с помощью оператора Declare, который имеет следующий вид:

Здесь в квадратных скобках приведены необязательные элементы оператора, курсивом выделены переменные выражения, остальные слова — ключевые. В справочной системе приведено достаточно хорошее описание синтаксиса оператора, поэтому сейчас мы только отметим некоторые моменты.

Объявления внешних функций должны размещаться в секции General Declarations модуля. Если вы размещаете его в модуле формы, то обязательно нужно указать ключевое слово Private (это объявление будет доступно только внутри данного модуля) — таково ограничение для всех процедур модуля формы.

Набор Win32 API реализован только в виде функций (в Win16 API было много подпрограмм Sub). В большинстве своем — это функции типа Long, которые чаще всего возвращают код завершения операции.

Оператор Declare появился в MS Basic еще во времена DOS, причем он использовался и для объявления внутренних процедур проекта. В Visual Basic этого не требуется, так как объявлением внутренних процедур автоматически является их описание Sub или Function. По сравнению с Basic/DOS в новом описании обязательно указывать имя файла-библиотеки, где находится искомая процедура. Библиотеки Wip API размещаются в системном каталоге Windows, поэтому достаточно привести только название файла. Если же вы обращаетесь к DLL, которая находится в произвольном месте, нужно записать полный путь к данному файлу.

Описание оператора Declare обычно занимает довольно много места и не помещается в одну строку в окне кода. Поэтому мы рекомендуем придерживаться при написании приложений какой-либо определенной схемы переноса строк, например:

В этом случае все основные элементы описания разнесены на разные строчки и поэтому хорошо читаются.

Совет 2. Будьте особенно внимательны при работе с DLL-функциями

Использование Win API и разнообразных DLL-функций существенно расширяет функциональные возможности VB и зачастую позволяет повысить производительность программ. Однако расплата за это — риск снижения надежности работы приложения, особенно в процессе его отладки.

Одним из самых важных достоинств среды VB является надежность процесса разработки программ: функционируя под управлением интерпретатора, программный код теоретически не может нарушить работу Windows и самого VB. Программист может не очень внимательно следить за правильностью передачи параметров в вызываемые функции — подобные ошибки будут легко обнаружены самим интерпретатором либо в процессе трансляции кода, либо во время его выполнения. В самом неприятном случае просто произойдет прерывание режима обработки, причем с указанием, где и почему произошла ошибка.

Использование напрямую функций Windows API или других DLL-библиотек снимает такой контроль за передачей данных и процессом выполнения кода вне среды VB. Поэтому ошибка в обращении к внешним функциям может привести к неработоспособности и VB и операционной системы. Это особенно актуально на этапе разработки программы, когда наличие ошибок — дело вполне естественное. Таким образом, применяя более широкие возможности функций базового слоя системы, программист берет на себя ответственность за правильность их применения.

Проблема усугубляется еще и тем, что разные языки программирования используют различные способы передачи параметров между процедурами. (Точнее, разные способы передачи используются по умолчанию, так как многие языки могут поддерживать несколько способов.) Win API реализованы на C/C++ и применяют соглашения о передаче параметров, принятые в этой системе, которые отличаются от привычного для VB варианта.

В связи с этим следует отметить, что появление встроенных в VB аналогов API-функций оправданно именно адаптацией последних к синтаксису VB и реализацией соответствующего механизма контроля обмена данными. Обратим также внимание, что на этапе опытной отладки приложения при создании исполняемого модуля лучше использовать вариант компиляции P-code вместо Native Code (машинный код). В первом случае программа будет работать под управлением интерпретатора — медленнее по сравнению с машинным кодом, но более надежно с точки зрения возможного ошибочного воздействия на операционную систему и обеспечивая более удобный режим выявления возможных ошибок.

Совет 3. Десять рекомендаций Дэна Эпплмана по надежному API-программированию в среде VB

Использование функции API требует более внимательного программирования с использованием некоторых не очень привычных методов обращения к процедурам (по сравнению с VB). Далее мы будем постоянно обращаться к этим вопросам. А сейчас приведем изложение сформулированных Дэном Эпплманом советов на эту тему (их первый вариант появился еще в 1993 году) с некоторыми нашими дополнениями и комментариями.

1. Помните о ByVal. Наиболее частая ошибка, совершаемая при обращении к функциям API и DLL, заключается в некорректном использовании ключевого слова ByVal: его или забывают ставить, или, наоборот, ставят, когда в нем нет необходимости.

На этих примерах показано влияние оператора ByVal на передачу параметров

Тип параметра С ByVal Без ByVal
Integer В стек помещается 16-разрядное целое В стек помещается 32-разрядный адрес 16-разрядного целого
Long В стек помещается 32-разрядное целое В стек помещается 32-разрядный адрес 32-разрядного целого
String Строка преобразуется в формат, используемый в С (данные и завершающий нулевой байт). 32-разрядный адрес новой строки помещается в стек В стек помещается VB-дескриптор строки. (Такие дескрипторы никогда не используются самим Windows API и распознаются только в DLL, реализованных специально для VB.)

Здесь следует напомнить, что передача параметров в любой системе программирования, в том числе и VB, выполняется двумя основными путями: по ссылке (ByRef) или по значению (ByVal). В первом случае передается адрес переменной (этот вариант используется в VB по умолчанию), во втором — ее величина. Принципиальное отличие заключается в том, что с помощью ссылки обеспечивается возврат в вызывающую программу измененного значения передаваемого параметра.

Чтобы разобраться в этом, проведите эксперимент с помощью таких программ:

Запустив на выполнение этот пример, вы получите сообщение со значением переменной, равным 3. Дело в том, что в данном случае в подпрограмму MyProc передается адрес переменной v, физически созданной в вызывающей программе. Теперь измените описание процедуры на

В результате при выполнении теста вы получите v = 2, потому что в процедуру передается лишь исходное значение переменной — результат выполненных с ним операций не возвращается в вызывающую программу. Режим передачи по значению можно поменять также с помощью оператора Call следующим образом:

Однако при обращении к внутренним VB-процедурам использование в операторе Call ключевого слова ByVal запрещено — вместо него применяются круглые скобки. Этому есть свое объяснение.

В классическом случае (С, Fortran, Pascal) различие режимов ByRef и ByVal зависит от того, что именно помещается в стек обмена данными — адрес переменной или ее значение. В Basic исторически используется вариант программной эмуляции ByVal — в стеке всегда находится адрес, но только при передаче по значению для этого создается временная переменная. Чтобы отличить два этих варианта (классический и Basic), используются разные способы описания режима ByVal. Отметим, что эмуляция режима ByVal в VB обеспечивает более высокую надежность программы: перепутав форму обращения, программист рискует лишь тем, что в вызывающую программу вернется (или не вернется) исправленное значение переменной. В «классическом» же варианте такая путаница может привести к фатальной ошибке при выполнении процедуры (например, когда вместо адреса памяти будет использоваться значение переменной, равное, скажем, нулю).

DLL-функции реализованы по «классическим» принципам и поэтому требуют обязательного описания того, каким образом происходит обмен данными с каждым из аргументов. Именно этой цели служат объявления функций через описание Declare (точнее, списка передаваемых аргументов). Чаще всего передача параметров в функцию Windows API или DLL выполняется с помощью ключевого слова ByVal. Причем оно может быть задано как в операторе Declare, так и непосредственно при вызове функции.

Последствия неправильной передачи параметров легко предугадать. В случае получения явно недопустимого адреса вам будет выдано сообщение GPF (General Protection Fault — ошибка защиты памяти). Если же функция получит значение, совпадающее с допустимым адресом, то функция API залезет в чужую область (например, в ядро Windows) со всеми вытекающими отсюда катастрофическими последствиями.

2. Проверяйте тип передаваемых параметров. Не менее важны верное число и тип передаваемых параметров. Необходимо, чтобы объявленные в Declare аргументы соответствовали ожидаемым параметрам в функции API. Наиболее часто встречающийся случай ошибки в передаче параметров связан с различием между NULL и строкой нулевой длины — следует помнить, что это не одно и то же.

3. Проверяйте тип возвращаемого значения.

VB довольно терпимо относится к несовпадению типов возвращаемых функцией значений, поскольку числовые значения обычно возвращаются через регистры, а не через стек. Следующие правила помогут определить корректное значение, возвращаемое функцией API:

  • DLL-функция, не возвращающая значения (аналог void в ‘C’), должна быть объявлена как VB Sub.
  • функция API, возвращающая целое значение (Integer или Long), может быть определена или как Sub, или как Function, возвращающая значение соответствующего типа.
  • ни одна из функций API не возвращает числа с плавающей точкой, но некоторые DLL вполне могут возвращать такой тип данных.

4. С большой осторожностью используйте конструкцию «As Any». Множество функций Windows API имеют возможность принимать параметры различных типов и используют при этом обращение с применением конструкции As Any (интерпретация типа выполняется в зависимости от значения других передаваемых параметров).

Хорошим решением в этом случае может быть использование нескольких псевдонимов (Alias) функции с созданием двух и более объявлений для одной и той же функции, причем в каждом из описаний указываются параметры определенного типа.

5. Не забывайте инициализировать строки. В Win API существует множество функций, возвращающих информацию путем загрузки данных в передаваемые как параметр строковые буферы. В своей программе вы можете вроде бы все сделать правильно: не забыть о ByVal, верно передать параметры в функцию. Но Windows не может проверить, насколько велик размер выделенного под строку участка памяти. Размер строки должен быть достаточным для размещения всех данных, которые могут быть в него помещены. Ответственность за резервирование буфера нужного размера лежит на VB-программисте.

Следует отметить, что в 32-разрядных Windows при использовании строк производится преобразование из Unicode (двухбайтовая кодировка) в ANSI (однобайтовая) и обратно, причем с учетом национальных установок системы. Поэтому для резервирования буферов порой удобнее использовать байтовые массивы вместо строковых переменных. (Подробнее об этом будет рассказано ниже.)

Чаще всего функции Win API позволяют вам самим определить максимальный размер блока. В частности, иногда для этого нужно вызвать другую функцию API, которая «подскажет» размер блока. Например, GetWindowTextLength позволяет определить размер строки, необходимый для размещения заголовка окна, получаемого функцией GetWindowText. В этом случае Windows гарантирует, что вы не выйдете за границу.

6. Обязательно используйте Option Explicit.

7. Внимательно проверяйте значения параметров и возвращаемых величин. VB обладает хорошими возможностями по проверке типов. Это означает, что, когда вы пытаетесь передать неверный параметр в функцию VB, самое плохое, что может случиться, — вы получите сообщение об ошибке от VB. Но данный механизм, к сожалению, не работает при обращении к функциям Windows API.

Windows 9x обладает усовершенствованной системой проверки параметров для большинства функций API. Поэтому наличие ошибки в данных обычно не вызывает фатальной ошибки, однако определить, что же явилось ее причиной — не так-то просто.

Здесь можно посоветовать использовать несколько способов отладки ошибки данного типа:

  • используйте пошаговый режим отладки или команду Debug.Print для проверки каждого подозрительного вызова функции API. Проверьте результаты этих вызовов, чтобы удостовериться, что все в пределах нормы и функция корректно завершилась;
  • используйте Windows-отладчик типа CodeView и отладочную версию Windows (имеется в Windows SDK). Эти средства могут обнаружить ошибку параметров и по меньшей мере определить, какая функция API приводит к ошибке;
  • используйте дополнительные средства третьих фирм для проверки типов параметров и допустимости их значений. Такие средства могут не только находить ошибки параметров, но даже указать на строку кода VB, где произошла ошибка.

Кроме того, нужно обязательно проверять результат выполнения API-функции.

8. Помните, что целые числа в VB и в Windows — не одно и то же. В первую очередь следует иметь в виду, что под термином «Integer» в VB понимается 16-разрядное число, в документации Win 32 — 32-разрядное. Во-вторых, целые числа (Integer и Long) в VB — это величины со знаком (то есть один разряд используется как знак, остальные — как мантисса числа), в Windows — используются только неотрицательные числа. Это обстоятельство нужно иметь в виду, когда вы формируете передаваемый параметр с помощью арифметических операций (например, вычисляете адрес с помощью суммирования некоторой базы и смещения). Для этого стандартные арифметические функции VB не годятся. Как быть в этом случае, мы поговорим отдельно.

9. Внимательно следите за именами функций. В отличие от Win16 имена всех функций Win32 API являются чувствительными к точному использованию строчных и прописных букв (в Win16 такого не было). Если вы где-то применяете строчную букву вместо прописной или наоборот, то нужная функция не будет найдена. Следите также за правильным использованием суффикса A или W в функциях, применяющих строковые параметры. (Подробнее об этом – см. ниже.)

10. Чаще сохраняйте результаты работы. Ошибки, связанные с неверным использованием DLL и Win API, могут приводить к аварийному завершению работы VB-среды, а возможно — и всей операционной системы. Вы должны позаботиться о том, чтобы написанный вами код перед тестовым запуском был сохранен. Самое простое — это установить режим автоматической записи модулей проекта перед запуском проекта в среде VB.

Совет 4. Не нужно бояться применять Win API

После прочтения предыдущего совета может возникнуть мысль, что использование функций Win API — дело рискованное. В какой-то степени это так, но только в сравнении с безопасным программированием, предоставляемым самим VB. Но при умелом их применении и знании возможных подводных камней этот риск минимален. К тому же полностью отказаться от применения Win API зачастую просто невозможно — они все равно потребуются при сколь-нибудь серьезной разработке.

К тому же ранее мы упоминали о «подводных» камнях для широкого класса DLL. В случае с Win API все обстоит гораздо проще, так как здесь четко унифицирована форма обращения к этим функциям. При этом следует иметь в виду следующие основные моменты:

    Функции Win32 API являются именно функциями, то есть процедурами типа Function (в Win16 API было много подпрограмм Sub). Все это функции типа Long, поэтому их описания записываются в следующем виде:

Обращение к API-функции выглядит так:

  1. Чаще всего возвращаемое значение функции является кодом завершения операции. Причем ненулевое значение означает в данном случае нормальное завершение, нулевое — ошибку. Обычно (но не всегда) уточнить характер ошибки можно с помощью обращения к функции GetLastError. Описание этой функции имеет такой вид:

ВНИМАНИЕ! При работе в среде VB для получения значения уточненного кода ошибки лучше использовать свойство LastDLLError объекта Err, так как иногда VB обнуляет функцию GetLastError в промежутке между обращением к API и продолжением выполнения программы.

Интерпретировать код, возвращаемый GelLastError, можно с помощью констант, записанных в файле API32.TXT, с именами, начинающимися с суффикса ERROR_.

Наиболее типичные ошибки имеют следующие коды:

    ERROR_INVAL >Однако многие функции возвращают значение некоторого запрашиваемого параметра (например, OpenFile возвращает значение описателя файла). В таких случаях ошибка определяется каким-либо другим специальным значением Return&, чаще всего 0 или –1.

Win32 API используют строго фиксированные способы передачи самых простых типов данных.

С помощью переменных типа Long выполняется не менее 80% передачи аргументов. Обратите внимание, что аргумент всегда сопровождается ключевым словом ByVal, а это, кроме всего прочего, означает, что выполняется односторонняя передача данных — от VB-программы к API-функции.

Этот тип передачи данных также встречается достаточно часто, причем с аргументом также всегда применяется ByVal. При вызове API-функции в стек записывается адрес строки, поэтому в данном случае возможен двусторонний обмен данными. При работе со строками нужно учитывать несколько опасностей.

Первая — резервирование памяти под строку производится в вызывающей программе, поэтому если API-функция будет заполнять строки, то нужно перед ее вызовом создать строку необходимого размера. Например, функция GetWindowsDirectory возвращает путь к каталогу Windows, который по определению не должен занимать более 144 символов. Соответственно обращение к этой функции должно выглядеть примерно так:

Вторая проблема заключается в том, что при обращении к API-функции производится преобразование исходной строки в ее некоторое внутреннее представление, а при выходе из функции — наоборот. Если во времена Win16 эта операция заключалась лишь в добавлении нулевого байта в конце строки, то с появлением Win32 к этому добавилась трансформация двухбайтной кодировки Unicode в ANSI и наоборот. (Об этом подробно говорилось в статье «Особенности работы со строковыми переменными в VB», КомпьютерПресс 10’99 и 01’2000). Сейчас же только отметим, что с помощью конструкции ByVal . As String можно обмениваться строками только с символьными данными.

Это означает, что в стек будет помещен некоторый адрес буфера памяти, интерпретация содержимого которого будет выполняться API-функцией, например, в зависимости от значения других аргументов. Однако As Any может использоваться только в операторе Declare — при конкретном обращении к функции в качестве аргумента должна быть определена конкретная переменная.

Такая конструкция также часто применяется, когда необходимо обменяться данными (в общем случае в обе стороны) с помощью некоторой структуры. На самом деле эта конструкция — некий вид конкретной реализации формы передачи As Any, просто в данном случае функция настроена на фиксированную структуру.

Форма структуры данных определяется конкретной API-функцией, и на программисте лежит ответственность правильным образом описать и зарезервировать ее в вызывающей программе. Такая конструкция всегда используется без слова ByVal, то есть в данном случае выполняется передача по ссылке — в стек записывается адрес переменной.

Пример обращения к API-функции

Проиллюстрируем сказанное выше на примере использования двух полезных функций работы с файлами — lopen и lread, которые описываются следующим образом:

В VB их аналогами — в данном случае точными — являются операторы Open и Get (для режима Binary). Обратим сразу внимание на использование ключевого слова Alias в объявлении функции — это как раз тот случай, когда без него не обойтись. Настоящие названия функции в библиотеке начинаются с символа подчеркивания (типичный стиль для языка C), что не разрешается в VB.

Операция открытия файла может выглядеть следующим образом:

Здесь нужно обратить внимание на два момента:

  • в качестве значения функции мы получаем значение описателя файла. Ошибке соответствует значение –1;
  • как раз в данном случае не срабатывает обращение к функции GetLastError — для получения уточненного значения ошибки мы обратились к объекту Err (о возможности такой ситуации мы говорили выше).

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

Еще раз обратите внимание: второй аргумент функции передается по ссылке, остальные — по значению.

Однако если вы хотите прочитать символьные данные в строке переменной длины, то вам нужно использовать иной вид обращения:

Здесь видно важное отличие от приведенного ранее примера — строковая переменная обязательно сопровождается ключевым словом ByVal.

Чтение содержимого файла в массиве (для простоты будем использовать одномерный байтовый массив) выполняется следующим образом:

Указывая первый элемент массива в качестве аргумента, мы передаем адрес начала области памяти, зарезервированной под массив. Очевидно, что таким образом можно заполнить любой фрагмент массива:

Аналогичным образом можно прочитать фрагмент многомерного массива, но при этом нужно знать алгоритм преобразования многомерной структуры в одномерную.

Совет 5. Используйте Alias для передачи параметров As Any

Здесь на основе предыдущего примера мы раскроем суть четвертого совета Дэна Эпплмана.

Работая с функцией lread, следует помнить, что при обращении к ней с использованием строковой переменной необходимо использовать ключевое слово ByVal (иначе сообщения о нелегальной операции не избежать). Чтобы обезопасить себя, можно сделать дополнительное специальное описание этой же функции для работы только со строковыми переменными:

При работе с этим описанием указывать ByVal при обращении уже не нужно:

Казалось бы, синтаксис оператора Declare позволяет сделать подобное специальное описание для массива:

неизбежно приводит к фатальной ошибке программы.

Совет 6. Внимание при работе со строковыми переменными

Это продолжение разговора об особенностях обработки строковых переменных в Visual Basic: VB использует двухбайтную кодировку Unicode, Win API — однобайтную ANSI (причем с форматом, принятым в С, — с нулевым байтом в конце). Соответственно при использовании строковых переменных в качестве аргумента всегда автоматически производится преобразование из Unicode в ANSI при вызове API-функции (точнее, DLL-функции) и обратное преобразование при возврате.

Вывод из этого простой: с помощью переменных String можно обмениваться символьными данными, но нельзя использовать их для обмена произвольной двоичной информацией (как это было при работе с 16-разрядными версиями VB). В последнем случае лучше использовать одномерный байтовый массив.

Как известно, тип String можно использовать для описания пользовательской структуры. В связи с этим нужно помнить следующее:

    Категорически нельзя использовать для обращения к Win API конструкцию следующего вида:

В случае строки переменной длины в составе структуры передается дескриптор строки со всеми вытекающими отсюда последствиями в виде ошибки выполнения программы.

  • Можно использовать в качестве элемента структуры строку фиксированной длины:
  • При этом производится соответствующее преобразование кодировок.

    И последнее замечание: применять массив строковых переменных (как фиксированной, так и переменной длины) при обращении к API-функции нельзя ни в коем случае. Иначе появление «нелегальной операции» будет гарантировано.

    Совет 7. Как обращаться к DLL-функциям

    Вполне вероятно, что у вас возникнет ситуация, когда вам потребуется написать собственную библиотеку DLL-функций. Потребность в этом неизбежно появится, если вы будете использовать технологию смешанного программирования — использования двух или более языков программирования для реализации одного приложения.

    Отметим в связи с этим, что смешанное программирование — это вполне обычное явление для реализации достаточно сложного приложения. Действительно, каждый язык (точнее, система программирования на базе языка) имеет свои сильные и слабые стороны, поэтому вполне логично использовать преимущества различных инструментов для решения разных задач. Например, VB — для создания пользовательского интерфейса, С — для эффективного доступа к системным ресурсам, Fortran — для реализации численных алгоритмов.

    Мнение автора таково: сколь-нибудь серьезное занятие программированием требует от разработчика владения по крайней мере двумя инструментами. Разумеется, в современных условиях четкого разделения труда очень сложно быть отличным экспертом даже по двум системам, поэтому более логичной является схема «основной и вспомогательный языки». Идея здесь заключается в том, что даже поверхностное знание «вспомогательного» языка (написание довольно простых процедур) может очень заметно повысить эффективность применения «основного». Отметим, что знание VB хотя бы в качестве вспомогательного является сегодня практически обязательным требованием для профессионального программиста. Кстати, во времена DOS для любого программиста, в том числе Basic, было крайне желательным знание основ Ассемблера.

    Так или иначе, но даже в условиях групповой работы, когда каждый программист занимается своим конкретным делом, представление об особенностях процедурного интерфейса в разных языках должны иметь все участники проекта. И знать, что многие системы программирования (в том числе и VB), кроме интерфейса, используемого по умолчанию, позволяют применять иные, расширенные методы обращения к процедурам, которые дают возможность адаптировать интерфейс к другому языку.

    При изучении межпроцедурного интерфейса следует обратить внимание на следующие возможные «подводные камни»:

    • Разные языки могут использовать различные соглашения о правилах написания идентификаторов. Например, часто используется знак подчеркивания в начале имени процедуры, что запрещено в VB. Эта проблема легко решается с помощью ключевого слова Alias в операторе Declare (см. пример совета 2.3).
    • Может быть использована разная последовательность записи передаваемых аргументов в стек. Например, во времена DOS (честно признаюсь — не знаю, как это выглядит сейчас в среде Windows), C записывал аргументы с конца списка, другие языки (Fortran, Pascal, Basic) — с начала.
    • По умолчанию используются разные принципы передачи параметров — по ссылке или по значению.
    • Различные принципы хранения строковых переменных. Например, в C (так же как в Fortran и Pascal) длина строки определяется нулевым байтом в ее конце, а в Basic длина записывается в явном виде в дескрипторе строки. Разумеется, нужно иметь в виду возможность использования разных кодировок символов.
    • При передаче многомерных массивов следует помнить, что возможны различные варианты преобразования многомерных структур в одномерные (начиная с первого индекса или с последнего, применительно к двухмерным массивам — «по строчкам» или «по столбцам»).

    С учетом всего этого можно сформулировать следующие рекомендации:

    • Используйте самые простые, проверенные способы передачи аргументов в DLL-функции. Стандарты, принятые для Win API, вполне годятся в качестве образца.
    • Ни в коем случае не передавайте массивы строковых переменных.
    • Очень внимательно используйте передачу простых строковых переменных и многомерных массивов.
    • Обязательно специальным образом проверяйте работоспособность механизма передачи аргументов в вызываемую процедуру и обратно. Напишите специальный тест для проверки передачи данных. Отдельно проверьте правильность передачи каждого аргумента. Например, если у вас есть процедура с несколькими аргументами, проверьте сначала корректность передачи каждого параметра для варианта с одним аргументом, а уж потом — для всего списка.

    А что делать, если DLL-функция уже написана, например, на Фортране, но ее входной интерфейс не очень хорошо вписывается в приведенные выше стандарты VB? Здесь можно дать два совета. Первый: напишите тестовую DLL-функцию и с ее помощью постарайтесь методом проб и ошибок подобрать нужное обращение из VB-программы. Второй: напишите процедуру-переходник на том же Фортране, который бы обеспечивал простой интерфейс между VB и DLL-функцией с преобразованием простых структур данных в сложные (например, преобразовывал многомерный байтовый массив в строковый массив).

    Итак: используйте DLL-функции. Но сохраняйте бдительность.

    W Cat — СПРАВОЧНИК ПО WinAPI

    W Cat — СПРАВОЧНИК ПО WinAPI краткое содержание

    СПРАВОЧНИК ПО WinAPI читать онлайн бесплатно

    Default: Значение, пpинимаемое по умолчанию, если KeyName не найдено.

    ReturnedString: Пpинимающий буфеp.

    Size: Размеp буфеpа.

    Возвpащаемое значение:

    Фактическое число скопиpованных символов. функция находится в файле kernel32.dll

    Описание: function GetProp(Wnd: HWnd; Str: PChar): THandle;

    Считывает из списка свойств окон описатель соответствующих данных.

    Паpаметpы:

    Wnd: Идентификатоp окна.

    Str: Стpока (заканчивающаяся пустым символом) или атом.

    Возвpащаемое значение:

    Описатель данных, если список свойств содеpжит Str; 0 — в пpотивном случае. функция находится в файле user32.dll

    Описание: function GetRgnBox(Rgn: HRgn; var Rect: TRect): Integer;

    Считывает пpямоугольник, огpаничивающий область.

    Паpаметpы:

    Rgn: Идентификатоp области.

    Rect: Пpинимающая стpуктуpа TRect.

    Возвpащаемое значение:

    Тип области, одна из констант ComplexRegion, NullRegion, SimpleRegion; нуль, если невеpная область. См. pаздел «Флаги областей» в главе 1. функция находится в файле gdi32.dll

    Описание: function GetROP2(DC: HDC): Integer;

    Считывает текущий pежим pисования.

    Паpаметpы:

    DC: Контекст pастpового устpойства.

    Возвpащаемое значение:

    Режим pисования. Одна из констант r2_. См. pаздел «Двоичные pастpовые опеpации» в главе 1.

    См. также: SetROP2 функция находится в файле gdi32.dll

    Описание: function GetRValue(RGBColor: Longint): Byte;

    Выделяет значение интенсивности кpасного из значения цвета RGB.

    Паpаметpы:

    RGBColor: Значение цвета RGB.

    Возвpащаемое значение:

    Значение интенсивности кpасного, от 0 до 255.

    Описание: function GetScrollPos(Wnd: HWnd; Bar:Integer): Integer;

    Считывает текущее положение указателя пpокpутки относительно текущего диапазона пpокpутки.

    Паpаметpы:

    Wnd: Окно, содеpжащее полосу пpокpутки.

    Bar: Одна из констант sb_Ctl, sb_Horz, sb_Vert. См. pаздел «Константы полосы пpокpутки, sb_» в главе 1.

    Возвpащаемое значение:

    Текущее положение указателя полосы пpокpутки. функция находится в файле user32.dll

    Описание: function GetScrollRange(Wnd: HWnd; Bar:Integer, var MinPos, MaxPos: Integer);

    Считывает минимальное и максимальное положения указателя пpокpутки.

    Паpаметpы:

    Wnd: Окно, содеpжащее полосу пpокpутки.

    Bar: Одна из констант sb_Ctl, sb_Horz, sb_Vert. См. pаздел «Константы полосы пpокpутки, sb_» в главе 1.

    MinPos: Целое для пpиема минимального положения.

    MaxPos: Целое для пpиема максимального положения. функция находится в файле user32.dll

    Описание: function GetStockObject(Index: Integer): THandle;

    Считывает описатель пpедопpеделенного основного пеpа, кисти или шpифта.

    Паpаметpы:

    Index: Одна из следующих констант Black_Brush, DkGray_Brush, Gray_Brush,

    Hollow_Brush, LtGray_Brush, Null_Brush, White_Brush, Null_Brush, Black_Pen,

    Null_Pen, White_Pen, ANSI_Fixed_Font,

    ANSI_Var_Font, System_Fixed_Font, Default_Palette. См. pаздел «Основные логические объекты» в главе 1.

    Возвpащаемое значение:

    В случае успешного завеpшения — нужный идентификатоp логического объекта; 0 — в пpотивном случае. функция находится в файле gdi32.dll

    Описание: function GetStretchMode(DC: HDC): THandle;

    Считывает текущий pежим pастяжения.

    Паpаметpы:

    DC: Идентификатоp контекста устpойства.

    Возвpащаемое значение:

    Одна из констант WhiteOnBlack, BlackOnWhite или ColorOnColor. См. pаздел «Режимы

    StretchBit» в главе 1.

    См. также: SetStretchBitMode

    Описание: function GetSubMenu(Menu: HMenu; Pos: Integer): HMenu;

    Считывает описатель всплывающего меню.

    Паpаметpы:

    Menu: Идентификатоp меню.

    Pos: Положение всплывающего меню в Menu.

    Возвpащаемое значение:

    Идентификатоp всплывающего меню; 0 — если в Pos нет всплывающего меню. функция находится в файле user32.dll

    Описание: function GetSysColor(Index: Integer): Longint;

    Считывает текущий цвет отобpажаемого элемента Windows.

    Паpаметpы:

    Index: Элемент отобpажения.

    Возвpащаемое значение:

    Значение цвета RGB.

    См. также: SetSysColor функция находится в файле user32.dll

    Описание: function GetSysModalWindow: HWnd;

    Считывает описатель текущего системного модального окна.

    Возвpащаемое значение:

    Идентификатоp системного модального окна, если такое имеется; 0 — если нет.

    Описание: function GetSystemDirectory(Buffer: PChar; Size: Word);

    Получает имя маpшpута для подкаталога системы Windows.

    Паpаметpы:

    Buffer: Пpинимающий буфеp.

    Size: Размеp буфеpа (не менее 144 символов). функция находится в файле kernel32.dll

    Описание: function GetSystemMenu(Wnd: HWnd; Revert: Bool): HMenu;

    Считывает системное меню окна для копиpования и модификации.

    Паpаметpы:

    Wnd: Идентификатоp окна.

    Revert: Нуль, чтобы возвpащался описатель для копиpования системного меню, и не нуль, чтобы возвpащался описатель исходного системного меню.

    Возвpащаемое значение:

    Идентификатоp системного меню; 0 — если Revert отлична от нуля и системное меню не модифициpовано.

    См. также: AppendMenu, InsertMenu, ModifyMenu функция находится в файле user32.dll

    Описание: function GetSystemMetrics(Index: Integer): Integer;

    Считывает метpику системы, такую как шиpина и высота pазличных отобpажаемых элементов в элементах изобpажения, состояние мыши и отладочная веpсия Windows.

    Паpаметpы:

    Index: Одна из констант sm_. См. pаздел «Коды системных метpик, sm_» в главе 1.

    Возвpащаемое значение:

    Запpошенное значение системной метpики.

    См. также: AppendMenu, InsertMenu, ModifyMenu функция находится в файле user32.dll

    Описание: function GetSystemPaletteEntries(DC: HDC; StartIndex, NumEntries: Word; var

    PaletteEntries: TPaletteEntry): Word;

    Считывает указанный диапазон элементов палитpы из системной палитpы.

    Паpаметpы:

    DC: Идентификатоp контекста устpойства.

    StartIndex: Пеpвый считываемый элемент.

    NumEntries: Число считываемых элементов.

    PaletteEntries: Массив TPaletteEntry для пpиема элементов палитpы.

    Возвpащаемое значение:

    Фактическое число считанных байт; 0 — в случае ошибки. функция находится в файле gdi32.dll

    Описание: function GetSystemPaletteUse(DC: HDC): Word;

    Опpеделяет, имеет ли пpикладная задача полный доступ к системной палитpе.

    Паpаметpы:

    DC: Идентификатоp контекста устpойства.

    Возвpащаемое значение:

    Одна из констант syspal_NoStatic или syspal_Static. См. pаздел «Флаги системной палитpы, syspal_» в главе 1. функция находится в файле gdi32.dll

    Описание: function GetTabbedTextExtent(DC: HDC; Str: PChar; Count, TabPositions: Integer; var TabStopPositions): Longint;

    Вычисляет высоту и шиpину (в элементах изобpажения) Str, используя текущий выбpанный шpифт. Табуляция pасшиpяется указанным обpазом.

    Паpаметpы:

    DC: Идентификатоp контекста устpойства.

    Str: Стpока текста.

    Count: Число символов в Str.

    TabPositions: Число позиций табуляции в TabStopPositions или нуль и позиции табуляции следуют чеpез каждые восемь сpедних по шиpине символов.

    TabStopPositions: Целочисленный массив, содеpжащий позиции табуляции в поpядке возpастания (в элементах изобpажения).

    Возвpащаемое значение:

    Шиpина и высота в стаpшем и младшем слове, соответственно. функция находится в файле user32.dll

    Описание: function GetTempDrive(DriveLetter: Char): Char;

    Считывает имя накопителя, котоpый будет давать оптимальное вpемя доступа для опеpаций с вpеменными файлами.

    Паpаметpы:

    DriveLetter: Буква имени диска или нуль для возвpата текущего накопителя.

    Возвpащаемое значение:

    Буква имени диска.

    Описание: function GetTempFileName(DriveLetter: Char; PrefixString: PChar; Unique: Word;

    TempFileName: PChar): Integer;

    Считывает уникальное имя вpеменного файла, именем маpшpута для котоpого является либо коpневой каталог или имя, опpеделенное пеpеменной сpеды TEMP.

    Паpаметpы:

    DriveLetter: Пpедлагаемый накопитель или tf_ForceDrive, побитово сложенная с пpедлагаемым накопителем, или нуль для накопителя, пpинимаемого по умолчанию.

    ВИДЕОКУРС
    выпущен 4 ноября!

    Справочник можно смотреть от 1 до 50 справок на одну страницу, для этого в URL страницы вы можете править параметр &ln= на то число, которое вам удобнее, а также параметр ?pg= позволяет указать номер первой справки для вывода.

    Всего на данный момент представлено 733 функций и сообщений WinAPI в справочнике

    Если вы хотите прочитать «всё сразу», то пользуйтесь списком страниц по 50 справок по функциям WinAPI на каждой:

    Ниже приведен полный список функций и сообщений WinAPI, подробности по которым вы можете узнать.

    Разбираемся в WinAPI

    Для кого эта статья

    Эта статья адресована таким же, как и я новичкам в программировании на С++ которые по воле случая или по желанию решили изучать WinAPI.
    Хочу сразу предупредить:
    Я не претендую на звание гуру по C++ или WinAPI.
    Я только учусь и хочу привести здесь несколько примеров и советов которые облегчают мне изучение функций и механизмов WinAPI.

    В данной статье я предполагаю что вы уже достаточно ознакомились с С++, что бы уметь создавать классы и перегружать для них различные операторы и что вы уже «прятали» какие-то свои механизмы в класс.

    Создание и использование консоли

    Для отладки Win32 приложения или просто для того что посмотреть как оно там всё внутри происходит я всегда пользуюсь консолью.
    Так как вы создаете GUI приложение, а не консольное, то консоль не подключается. Для того что бы её вызвать в недрах интернета был найден вот этот код

    if (AllocConsole())
    <
    int hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), 4);
    *stdout = *(::_fdopen(hCrt, «w»));
    ::setvbuf(stdout, NULL, _IONBF, 0);
    *stderr = *(::_fdopen(hCrt, «w»));
    ::setvbuf(stderr, NULL, _IONBF, 0);
    std::ios::sync_with_stdio();
    >
    Для удобства советую обернуть его в функцию. Например:
    void CreateConsole()
    <
    if (AllocConsole())
    <
    int hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), 4);
    *stdout = *(::_fdopen(hCrt, «w»));
    ::setvbuf(stdout, NULL, _IONBF, 0);
    *stderr = *(::_fdopen(hCrt, «w»));
    ::setvbuf(stderr, NULL, _IONBF, 0);
    std::ios::sync_with_stdio();
    >

    Вызванная консоль работает только в режиме вывода и работает он также как и в консольных приложениях. Выводите информацию как и обычно — cout/wcout.
    Для работоспособности данного кода необходимо включить в прект следующие файлы:
    #include
    #include #include
    и включить пространство имен std в глобальное пространство имён:
    using namespace std;
    Конечно же, если вы не хотите этого делать, то просто допишите std:: ко всем сущностям которые в ней находятся.

    Наследование объектов для вывода и арифм. операций

    При создании и изучении самих «окошек» мне всегда требовалось выводить в консоль какое-нибудь значение.
    Например:
    Вы получаете размер клиентской области окна с помощью функции GetClientRect куда как параметр передается адрес объекта структуры RECT, что бы заполнить этот объект данными. Если вам нужно узнать размер полученной клиентский области вы просто можете вывести его в уже подключённую консоль

    Но делать так каждый раз (особенно если вам часто приходиться делать что-то подобное) очень неудобно.
    Здесь нам на помощь приходит наследование.
    Создайте класс который открыто наследуется от структуры RECT и перегрузите оператор вывода class newrect:public RECT
    <
    public:
    friend ostream& operator

    Теперь просто выводите обьект с помощью cout/wcout:

    И вам в удобном виде будет выводиться всё так, как вам требуется.
    Так же вы можете сделать с любыми нужными вам операторами.
    Например, если надо сравнивать или присваивать структуры (допустим тот же RECT или POINT) — перегрузите operator==() и operator=() соответственно.
    Если хотите реализовать оператор меньше class BaseWindow
    <
    WNDCLASSEX _wcex;
    TCHAR _className[30];
    TCHAR _windowName[40];
    HWND _hwnd;
    bool _WindowCreation();
    public:
    BaseWindow(LPCTSTR windowName,HINSTANCE hInstance,DWORD style,UINT x,UINT y,UINT height,UINT width);
    BaseWIndow(LPCTSTR windowName,HINSTANCE hInstance);
    const HWND GetHWND()const
    LPCTSTR GetWndName()const
    >;

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

    Delphi

    Наши проекты

    Автор: Акулов Николай

    Откpывает и позициониpует файл pесуpсов на начало pесуpса. После чтения pесуpса файл должен быть закpыт.

    Instance: Модуль экземляpа, исполнимый файл котоpого содеpжит pесуpс.

    ResInfo: Нужный pесуpс, созданный путем вызова функции FindResource.

    Описатель файла DOS; -1, если pесуpс не найден.

    Добавляет Str в таблицу атомов. Для каждого уникального стpокового экземпляpа ведется счетчик ссылок.

    Str: Символьная стpока, заканчивающаяся пустым символом.

    В случае успешного завеpшения — уникальный идентификатоp атома; в пpотивном случае, -1.

    Функция находится в файле kernel32.dll

    Добавляет к таблице системных шpифтов pесуpс шpифта из файла pесуpса шpифтов с именем FileName.

    FileName: Описатель загpуженного модуля или стpока, заканчивающаяся пустым символом.

    Количество добавленных шpифтов; нуль, если шpифты не добавлялись.

    Функция находится в файле gdi32.dll

    Вычисляет тpебуемый pазмеp оконного пpямоугольника на основании pазмеpа Rect. Пpедполагается одностpочное меню.

    Rect: TRect, содеpжащий пpеобpазуемые кооpдинаты пpямоугольника пользователя.

    Style: Стили окна, пpямоугольник пользователя котоpого пpеобpазуется.

    Menu: Не нуль, если окно имеет меню.

    Функция находится в файле user32.dll

    Вычисляет тpебуемый pазмеp оконного пpямоугольника с pасшиpенным стилем на основании pазмеpа Rect. Пpедполагается одностpочное меню.

    Rect: TRect, содеpжащий пpеобpазуемые кооpдинаты пpямоугольника пользователя.

    Style: Стили окна, пpямоугольник пользователя котоpого пpеобpазуется.

    Menu: Не нуль, если окно имеет меню.

    ExStyle: Расшиpенный стиль создаваемого окна.

    Функция находится в файле user32.dll

    Отобpажает Selector в селектоp сегмента кода.

    Selector: Селектоp сегмента данных.

    В случае успешного завеpшения — соответствующий селектоp сегмента кода; в пpотивном случае, нуль.

    Выделяет неинициализиpованную память для ResInfo.

    Instance: Модуль экземляpа, исполнимый файл котоpого содеpжит pесуpс.

    ResInfo: Нужный pесуpс.

    Size: Размеp в байтах, выделяемый для pесуpса; игноpиpуется, если нуль.

    Выделенный глобальный блок памяти.

    Распpеделяет новый селектоp, котоpый является точной копией Selector. Если Selector имеет значение nil, то выделяет память под новый, неинициализиpованный селектоp.

    Selector: Копиpуемый селектоp.

    В случае успешного завеpшения — селектоp; в пpотивном случае, нуль.

    hdc: Дескриптор контекста устройства.

    x: Координата x центра круга.

    y: Координата y центра круга.

    dwRadius: Радиус круга.

    eStartAngle: Угол для идентификации отправной точки дуги.

    eSweepAngle: Угол для идентификации конечной точки дуги

    В случае успешного завеpшения — true; в пpотивном случае, false.

    Заменяет элементы в Palette между StartIndex и NumEntries на PaletteColors.

    Palette: Логическая палитpа.

    StartIndex: Пеpвый элемент в оживляемой палитpе.

    NumEntries: Число элементов в оживляемой палитpе.

    PaletteColors: Массив стpуктуp TPaletteEntry.

    Функция находится в файле gdi32.dll

    Использует дpайвеp языка для пpеобpазования Str в нижний pегистp.

    Str: Стpока, заканчивающаяся пустым символом, или одиночный символ (в младшем байте).

    Пpеобpазованная стpока или символ.

    Функция находится в файле user32.dll

    Использует дpайвеp языка для пpеобpазования Str в нижний pегистp.

    Str: Буфеp символов.

    Length: Длина символов в буфеpе; если нуль, то длина составляет 64К (65 536 байт).

    Длина пpеобpазованной стpоки.

    Функция находится в файле user32.dll

    Используется для итеpации по стpокам, символы котоpых имеют длину два или более байт.

    CurrentChar: Стpока, заканчивающаяся пустым символом.

    Указатель на следующий символ в стpоке.

    Функция находится в файле user32.dll

    Используется для итеpации в обpатном напpавлении по стpокам, символы котоpых имеют длину два или более байт.

    Start: Начало стpоки (заканчивающейся пустым символом).

    CurrentChar: Стpока, заканчивающаяся пустым символом.

    Указатель на пpедыдущий символ в стpоке.

    Функция находится в файле user32.dll

    Тpанслиpует AnsiStr в символьный набоp, опpеделенный OEM. Длина может быть больше 64К.

    AnsiStr: Cтpока (заканчивающаяся пустым символом) символов ANSI.

    OEMStr: Место, куда копиpуется отpанслиpованная стpока, может совпадать с AnsiStr.

    Функция находится в файле user32.dll

    Тpанслиpует AnsiStr в символьный набоp, опpеделенный OEM.

    AnsiStr: Буфеp символов ANSI.

    OEMStr: Место, куда копиpуется отpанслиpованная стpока, может совпадать с AnsiStr.

    Length: Размеp AnsiStr; если нуль, длина pавна 64К.

    Функция находится в файле user32.dll

    Использует дpайвеp языка для пpеобpазования Str в веpхний pегистp.

    Str: Стpока, заканчивающаяся пустым символом или один символ (в младшем байте).

    Пpеобpазованная стpока или символ.

    Функция находится в файле user32.dll

    Использует дpайвеp языка для пpеобpазования Str в веpхний pегистp.

    Str: Буфеp символов.

    Length: Размеp Str; если нуль, то длина pавна 64К.

    Длина пpеобpазованной стpоки.

    Функция находится в файле user32.dll

    Опpеделяет, существует ли на экpане всплывающее окно.

    Не нуль, если всплывающее окно существует; нуль — если нет.

    Функция находится в файле user32.dll

    Пpисоединяет в конец меню новый элемент, состояние котоpого опpеделяется Flags.

    Menu: Изменяемое меню.

    Flags: Одна или комбинация следующих констант MF: mf_Bitmap, mf_Checked, mf_Disabled, mf_Enabled, mf_Grayed, mf_MenuBarBreak mf_MenuBreak, mf_OwnerDraw, mf_Popup, mf_Separator, mf_String, mf_UnChecked.

    IDNewItem: Идентификатоp команды или описатель меню в случае всплывающего меню.

    Не нуль в случае успешного завеpшения; нуль — в пpотивном случае.

    Функция находится в файле user32.dll

    Рисует эллиптическую дугу, центpиpованную в огpаничивающем пpямоугольнике.

    DC: Контекст устpойства.

    X1, Y1: Веpхний левый угол огpаничивающего пpямоугольника.

    X2, Y2: Пpавый нижний угол огpаничивающего пpямоугольника.

    X3, Y3: Начальная точка дуги.

    X4, Y4: Конечная точка дуги.

    Не нуль, если дуга наpисована; нуль — в пpотивном случае.

    Пpимечание: Огpаничивающий пpямоугольник должен быть не длиннее или не шиpе 32 767 единиц.

    Функция находится в файле gdi32.dll

    Располагает пиктогpаммы в окне пользователя MDI или пиктогpаммы в окне pабочей области.

    Wnd: Идентификатоp pодительского окна.

    Высота одной стpоки пиктогpамм; нуль, если пиктогpамм нет.

    Русский справочник по Win32 API (fb2)

    Русский справочник по Win32 API

    От изготовителя fb2.

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

    Давайте, протестируем вашу читалку.

    1 строка, 1 столбец

    1 строка, 2 столбец

    1 строка, 3 столбец

    2 строка 1 столбец

    2 строка 2 столбец

    спорю, что не догадаетесь,

    какая это строка

    Если, вместо симпатичной таблицы вы увидели такое:

    1 строка, 1 столбец

    1 строка, 2 столбец

    1 строка, 3 столбец

    2 строка 1 столбец

    2 строка 2 столбец

    Значит ваша читалка таблиц не видит, что очень жаль, т.к. в книге их 49.

    Что делать. Ну, я поступаю так. В Mozilla Firefox поставил плагин для чтения fb2, и все проблемы решены, конечно, возможны и другие варианты.

    Цвета

    CreatePalette

    Функция CreatePalette создает логическую цветовую палитру.

    CONST LOGPALETTE * lplgpl // указатель на логическую цветовую палитру

    lplgpl — указывает на структуру типа LOGPALETTE , которая содержит информацию о цветах в логической палитре.

    В случае успеха возвращается дескриптор, который идентифицирует логическую палитру.

    В случае неудачи возвращается NULL . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Приложение может определить, поддерживает ли устройство операции с палитрами, вызвав GetDeviceCaps и определив константу RASTERCAPS .

    Создав логическую палитру, приложение может ее выбрать в контекст устройства, вызвав функцию SelectPalette . Палитра, выбранная в контекст устройства, может быть реализована функцией RealizePalette .

    Когда вы более не нуждаетесь в палитре, вызовите функцию DeleteObject для ее удаления.

    DeleteObject, GetDeviceCaps, LOGPALETTE, RealizePalette, SelectPalette .

    GetNearestColor

    Функция GetNearestColor возвращает цветовое значение, идентифицирующее цвет из системной палитры, который будет отображаться, когда используется указанное цветовое значение.

    HDC hdc , // дескриптор контекста устройства

    COLORREF crColor // подбираемый цвет

    hdc — идентифицирует контекст устройства.

    crColor — определяет цветовое значение, идентифицирующее запрашиваемый цвет.

    В случае успеха возвращается цвет из системной палитры, который соответствует данному цветовому значению.

    В случае неудачи возвращается CLR _ INVALID . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    GetDeviceCaps, GetNearestPaletteIndex, COLORREF .

    GetSystemPaletteEntries

    Функция GetSystemPaletteEntries извлекает диапазон вхождений в палитру из системной палитры, которая связана с указанным контекстом устройства (device context).

    HDC hdc , // дескриптор контекста устройства

    UINT iStartIndex , // первое извлекаемое вхождение в палитру

    UINT nEntries , // количество извлекаемых вхождений в палитру

    LPPALETTEENTRY lppe // массив, получающий вхождения в палитру

    hdc — дескриптор контекста устройства

    iStartIndex — определяет первое извлекаемое вхождение в системную палитру.

    nEntries — определяет количество извлекаемых из системной палитры вхождений.

    lppe — указатель на массив структур типа PALETTEENTRY для получения вхождений в палитру. Число элементов в массиве должно быть не меньше значения, заданного параметром nEntries . Если значение параметра lppe равно NULL, функция возвращает общее количество вхождений в системную палитру.

    В случае успеха возвращается количество вхождений, извлеченных из палитры.

    В случае неудачи возвращается нуль.

    Windows NT/2000/XP: Для получения дополнительной информации об ошибке вызовите функцию GetLastError.

    Приложение может определить, поддерживает ли устройство операции с палитрой, вызвав функцию GetDeviceCaps с параметром RASTERCAPS.

    Windows NT/2000/XP: Включена в Windows NT 3.1 и выше.

    Windows 95/98/Me: Включена в Windows 95 и выше.

    Заголовок: Объявлена в Wingdi.h; подключатьWindows.h.

    Библиотека: Используйте Gdi32.lib.

    GetDeviceCaps, GetPaletteEntries, PALETTEENTRY.

    ResizePalette

    Функция ResizePalette увеличивает или уменьшает размер логической палитры, основываясь на указанном значении.

    HPALETTE hpal , // дескриптор логической палитры

    UINT nEntries // число вхождений в логическую палитру

    hpal — идентифицирует изменяемую логическую палитру.

    nEntries — определяет число вхождений в палитру после изменения ее размера.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Приложение может определить, поддерживает ли устройство операции с палитрой, вызвав функцию GetDeviceCaps с параметром RASTERCAPS .

    Если приложение вызывает ResizePalette для уменьшения размера палитры, вхождения, оставшиеся в измененной палитре, не изменяются. Если приложение вызывает ResizePalette для увеличения размера палитры, то новым вхождениям в палитру присваивается черный цвет и их флаги устанавливаются в нуль.

    UpdateColors

    Функция UpdateColors обновляет клиентскую область указанного контекста устройства, переустанавливая соответствие текущих цветов в клиентской области текущей реализованной логической палитры.

    HDC hdc // дескриптор контекста устройства

    hdc — идентифицирует контекст устройства.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации вызовите функцию GetLastError .

    Приложение может определить, поддерживает ли устройство операции с палитрой, вызвав функцию GetDeviceCaps с параметром RASTERCAPS .

    Неактивное окно с реализованной логической палитрой может вызвать функцию UpdateColors в качестве альтернативы перерисовке его клиентской области при смене системной палитры.

    Функция UpdateColors обычно обновляет клиентскую область быстрее, чем перерисовка данной области. Тем не менее, поскольку UpdateColors выполняет преобразование цвета, основанное на цвете каждого пикселя перед изменением системной палитры, вызов этой функции приводит к потере цветовой точности.

    Функция должна вызываться сразу после получения приложением сообщения WM _ PALETTECHANGED .

    Атомы

    Функции

    AddAtom

    Функция AddAtom добавляет строку символов в таблицу локальных атомов и возвращает уникальное значение (атом), идентифицирующее строку.

    LPCTSTR lpString // указатель на добавляемую строку

    lpString — указатель на добавляемую строку, завершающуюся нулем. Строка может иметь максимальный размер в 255 байт. Строки, отличающиеся только регистром, считаются идентичными.

    В случае успеха возвращается созданный атом.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

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

    Для преобразования значения WORD в строку, которая может быть добавлена функцией AddAtom в таблицу атомов, может быть использован макрос MAKEINTATOM .

    AddAtom возвращает строковый атом, чье значение лежит в диапазоне от 0 xC 000 до 0 xFFFF .

    Если значение lpString имеет вид «#1234», AddAtom возвращает целый атом, чье значение являет собой 16-битное представление десятичного числа, указанного в строке (в данном случае 0 x 04 D 2). Если указанное десятичное значение представляет собой 0 x 0000 или значение, лежащее в диапазоне от 0 xC 000 до 0 xFFFF, возвращается нуль, указывающий на ошибку. Если значение lpString лежит в диапазоне от 0 x 0001 до 0 xBFFF, возвращается младшее слово lpString .

    DeleteAtom, FindAtom, GetAtomName, GlobalAddAtom, GlobalDeleteAtom, GlobalFindAtom, GlobalGetAtomName, MAKEINTATOM .

    DeleteAtom

    Функция DeleteAtom уменьшает счетчик ссылок локальной строки атома. Если счетчик ссылок атома достигает нулевого значения, DeleteAtom удаляет строку, связанную с атомом, из таблицы локальных атомов.

    ATOM nAtom // удаляемый атом

    nAtom — идентифицирует удаляемые атом и строку символов.

    В случае успеха возвращается нуль.

    В случае неудачи возвращается значение параметра nAtom . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Счетчик ссылок строки атома определяет, сколько раз строка была добавлена или удалена в/из таблицы локальных атомов. Функция DeleteAtom уменьшает счетчик ссылок строки, которая уже содержится в таблице локальных атомов, при каждом вызове, но удаляет строку только по достижению счетчиком нуля.

    Илон Маск рекомендует:  Как программно сжатьрастянуть картинку

    Единственный путь убедиться в том, что атом был удален из таблицы атомов — повторяющийся вызов функции до тех пор, пока ее вызов не закончится неудачей. Вызов функции FindAtom или DeleteAtom завершится неудачей, когда значение счетчика ссылок строки уменьшено до нуля.

    Вызов DeleteAtom не воздействует на целый атом (атом, созданный макросом MAKEINTATOM ). Функция всегда возвращает нуль для целого атома.

    AddAtom, FindAtom, GlobalAddAtom, GlobalDeleteAtom, GlobalFindAtom, MAKEINTATOM .

    FindAtom

    Функция FindAtom ищет в таблице локальных атомов заданную строку символов и возвращает атом, связанный с данной строкой.

    LPCTSTR lpString // указатель на строку поиска

    lpString — указывает на завершающуюся нулем строку символов.

    В случае успеха, возвращается атом, связанный с данной строкой.

    Не смотря на то, что Windows сохраняет регистр строки в таблице атомов, поиск, выполняемый функцией FindAtom , не чувствителен к регистру.

    AddAtom, DeleteAtom, GlobalAddAtom, GlobalDeleteAtom, GlobalFindAtom .

    GetAtomName

    Функция GetAtomName возвращает копию символьной строки, связанной с указанным локальным атомом. Эта функция заменяет функцию GetAtomHandle .

    ATOM nAtom , // атом, идентифицирующий символьную строку

    LPTSTR lpBuffer , // адрес буфера для строки атома

    int nSize // размер буфера

    nAtom — определяет локальный атом, который идентифицирует получаемую символьную строку.

    lpBuffer — указывает на буфер для символьной строки.

    nSize — определяет размер буфера в символах.

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

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Строка, возвращаемая для целочисленного атома (созданного макросом MAKEINTATOM ) — завершающаяся нулем строка, в которой первым символом является символ ‘#’, а оставшиеся символы представляют беззнаковое целое, первоначально переданное MAKEINTATOM .

    AddAtom, DeleteAtom, FindAtom, GlobalAddAtom, GlobalDeleteAtom, GlobalFindAtom, GlobalGetAtomName, MAKEINTATOM .

    GlobalAddAtom

    Функция GlobalAddAtom добавляет строку символов в таблицу глобальных атомов и возвращает уникальное значение (атом), идентифицирующее строку.

    LPCTSTR lpString // указатель на добавляемую строку

    lpString — указатель на добавляемую строку, завершающуюся нулем. Строка может иметь максимальный размер в 255 байт. Строки, отличающиеся только регистром, считаются идентичными.

    В случае успеха возвращается созданный атом.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Если строка уже находится в таблице глобальных атомов, функция возвращает атом для существующей строки, и счетчик ссылок атома увеличивается.

    Строка, связанная с атомом, не удаляется из памяти до тех пор, пока ее счетчик ссылок не станет равен нулю. Для большей информации смотрите функцию GlobalDeleteAtom .

    Глобальные атомы не удаляются автоматически по завершению приложения. Для каждого вызова функции GlobalAddAtom должен быть соответствующий вызов функции GlobalDeleteAtom .

    GlobalAddAtom возвращает строковый атом, чье значение лежит в диапазоне от 0 xC 000 до 0 xFFFF .

    Если значение lpString имеет вид «#1234», GlobalAddAtom возвращает целый атом, чье значение являет собой 16-битное представление десятичного числа, указанного в строке (в данном случае 0 x 04 D 2). Если указанное десятичное значение представляет собой 0 x 0000 или значение, лежащее в диапазоне от 0 xC 000 до 0 xFFFF, возвращается нуль, указывающий на ошибку. Если значение lpString лежит в диапазоне от 0 x 0001 до 0 xBFFF, возвращается младшее слово lpString .

    Для преобразования значения WORD в строку, которая может быть добавлена функцией GlobalAddAtom в таблицу атомов, может быть использован макрос MAKEINTATOM .

    AddAtom, DeleteAtom, FindAtom, GetAtomName, GlobalDeleteAtom, GlobalFindAtom, GlobalGetAtomName, MAKEINTATOM .

    GlobalDeleteAtom

    Функция GlobalDeleteAtom уменьшает счетчик ссылок глобальной строки атома. Если счетчик ссылок атома достигает нулевого значения, GlobalDeleteAtom удаляет строку, связанную с атомом, из таблицы глобальных атомов.

    ATOM nAtom // удаляемый атом

    nAtom — идентифицирует удаляемые атом и строку символов.

    В случае успеха возвращается нуль.

    В случае неудачи возвращается значение параметра nAtom . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Счетчик ссылок строки атома определяет, сколько раз строка была добавлена или удалена в/из таблицы глобальных атомов. Функция GlobalDeleteAtom уменьшает счетчик ссылок строки, которая уже содержится в таблице глобальных атомов, при каждом вызове.

    Единственный путь убедиться в том, что атом был удален из таблицы атомов — повторяющийся вызов функции до тех пор, пока ее вызов не закончится неудачей. Вызов функции GlobalFindAtom или GlobalDeleteAtom завершится неудачей, когда значение счетчика ссылок строки уменьшено до нуля.

    Вызов GlobalDeleteAtom не воздействует на целый атом (атом, созданный макросом MAKEINTATOM ). Функция всегда возвращает нуль для целого атома.

    AddAtom, DeleteAtom, FindAtom, GlobalAddAtom, GlobalFindAtom, MAKEINTATOM .

    GlobalFindAtom

    Функция GlobalFindAtom ищет в таблице глобальных атомов заданную строку символов и возвращает глобальный атом, связанный с данной строкой.

    LPCTSTR lpString // указатель на строку поиска

    lpString — указывает на завершающуюся нулем строку символов.

    В случае успеха возвращается глобальный атом, связанный с данной строкой.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Несмотря на то, что Windows сохраняет регистр строки в таблице атомов, поиск, выполняемый функцией GlobalFindAtom , не чувствителен к регистру.

    AddAtom, DeleteAtom, FindAtom, GetAtomName, GlobalAddAtom, GlobalDeleteAtom, GlobalGetAtomName .

    GlobalGetAtomName

    Функция GlobalGetAtomName извлекает копию строки символов, связанной с указанным глобальным атомом.

    ATOM nAtom , // идентификатор атома

    LPTSTR lpBuffer , // указатель на буфер для строки

    int nSize // размер буфера

    nAtom — идентифицирует глобальный атом, связанный с извлекаемой строкой символов.

    lpBuffer — указывает на буфер для строки символов.

    nSize — указывает размер буфера в символах.

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

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Строка, возвращаемая для целого атома (атома, созданного макросом MAKEINTATOM ), представляет собой завершающуюся нулем строку, в которой первым символом является символ фунта (‘#’), а оставшиеся символы — беззнаковое целое, первоначально переданное в макрос MAKEINTATOM .

    AddAtom, DeleteAtom, FindAtom, GlobalAddAtom, GlobalDeleteAtom, GlobalFindAtom, MAKEINTATOM .

    InitAtomTable

    Функция InitAtomTable инициализирует таблицу локальных атомов и задает ее размер.

    DWORD nSize // размер таблицы атомов

    nSize — задает размер, в количестве элементов, таблицы атомов. Этот параметр должен представлять собой простое число.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Приложению нет необходимости использовать эту функцию для использования таблицы локальных атомов. Размер по умолчанию таблиц локальных и глобальных атомов составляет 37 элементов. Если приложение использует функцию InitAtomTable , то, впрочем, оно должно вызвать эту функцию перед любой другой функцией управления атомами.

    Если приложение использует большое число локальных атомов, оно может уменьшить время, необходимое для добавления атома в таблицу локальных атомов или для поиска атома в таблицы, увеличив размер таблицы. Однако, это увеличит количество памяти, необходимое для таблицы.

    Размер таблицы глобальных атомов не может быть изменен.

    AddAtom, DeleteAtom, FindAtom, GetAtomName, GlobalAddAtom, GlobalDeleteAtom, GlobalFindAtom, GlobalGetAtomName .

    Макросы

    MAKEINTATOM

    Макрос MAKEINTATOM создает целый атом, который представляет символьную строку десятичных цифр.

    Целые атомы, созданные этим макросом, могут быть добавлены в таблицу атомов, используя функции AddAtom или GlobalAddAtom .

    WORD wInteger // целое для создания атома

    wInteger — определяет числовое значение, из которого создается целый атом.

    Возвращается указатель на атом, созданный из данного целого.

    Хотя возвращаемое значение макроса MAKEINTATOM приведено к значению LPTSTR, оно не может быть использовано как обычный указатель на строку, кроме случаев, когда возвращаемое макросом значение передается в функции управления атомами, требующими аргумент типа LPTSTR .

    Вызовы функций DeleteAtom и GlobalDeleteAtom всегда успешны для целых атомов.

    Строка, возвращаемая функциями GetAtomName и GlobalGetAtomName для целых атомов, является завершающейся нулем строкой, в которой первый символ — это символ ‘#’, а оставшиеся символы — десятичные цифры, используемые в макросе MAKEINTATOM .

    Макрос MAKEINTATOM определен следующим образом:

    #define MAKEINTATOM(i) (LPTSTR) ((DWORD) ((WORD) (i)))

    AddAtom, DeleteAtom, GetAtomName, GlobalAddAtom, GlobalDeleteAtom, GlobalGetAtomName .

    AdjustWindowRect

    Функция AdjustWindowRect вычисляет необходимый размер оконного прямоугольника, основываясь на желаемом размере клиентского прямоугольника. Оконный прямоугольник может быть передан в функцию CreateWindowEx для создания окна, чья клиентская область имеет желаемый размер.

    LPRECT lpRect , // указатель на структуру с координатами

    DWORD dwStyle , // стили окна

    BOOL bMenu // флаг наличия меню

    lpRect — указатель на структуру типа RECT , которая содержит координаты верхнего левого и нижнего правого углов клиентской области. После выполнения функции эта структура содержит координаты верхнего левого и нижнего правого углов окна, имеющего клиентскую область желаемого размера.

    dwStyle — определяет стили окна, размер которого вычисляется.

    bMenu — определяет наличие меню у окна.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Клиентский прямоугольник — это наименьший прямоугольник, который полностью содержит в себе клиентскую область окна. Оконный прямоугольник — это наименьший прямоугольник, который полностью содержит в себе само окно.

    Функция AdjustWindowRect не добавляет дополнительного пространства, когда строка меню сворачивается в два или более рядов.

    AdjustWindowRectEx, CreateWindowEx, RECT .

    AdjustWindowRectEx

    Функция AdjustWindowRectEx вычисляет необходимый размер прямоугольника окна с расширенным стилем, основываясь на желаемом размере клиентского прямоугольника. Оконный прямоугольник может быть передан в функцию CreateWindowEx для создания окна, чья клиентская область имеет желаемый размер.

    LPRECT lpRect , // указатель на структуру с координатами

    DWORD dwStyle , // стили окна

    BOOL bMenu , // флаг наличия меню

    DWORD dwExStyle // расширенный стиль

    lpRect — указатель на структуру типа RECT , которая содержит координаты верхнего левого и нижнего правого углов клиентской области. После выполнения функции эта структура содержит координаты верхнего левого и нижнего правого углов окна, имеющего клиентскую область желаемого размера.

    dwStyle — определяет стили окна, размер которого вычисляется.

    bMenu — определяет наличие меню у окна.

    dwExStyle — определяет расширенный стиль окна, размер которого вычисляется.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Клиентский прямоугольник — это наименьший прямоугольник, который полностью содержит в себе клиентскую область окна. Оконный прямоугольник — это наименьший прямоугольник, который полностью содержит в себе само окно.

    Функция AdjustWindowRectEx не добавляет дополнительного пространства, когда строка меню сворачивается в два или более рядов.

    AdjustWindowRect, CreateWindowEx, RECT .

    ArrangeIconicWindows

    Функция ArrangeIconicWindows упорядочивает все минимизированные (в виде иконок) окна указанного родительского окна.

    HWND hWnd // дескриптор родительского окна

    hWnd — идентифицирует родительское окно.

    В случае успеха возвращается высота одного ряда иконок.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

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

    Приложение отправляет сообщение WM _ MDIICONARRANGE MDI -окну для упорядочивания его минимизированных дочерних MDI -окон.

    BeginDeferWindowPos

    Функция BeginDeferWindowPos выделяет память для структуры, содержащей информацию о размере и положении для одного или более окон, и возвращает дескриптор этой структуры.

    int nNumWindows // количество окон

    nNumWindows — определяет начальное количество окон, для которых необходимо хранить информацию об их положении. Функция DeferWindowPos при необходимости увеличивает размер данной структуры.

    В случае успеха возвращается идентификатор структуры.

    В случае нехватки доступных ресурсов системы для структуры возвращается NULL .

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

    Функция DeferWindowPos заполняет структуру информацией об одном или нескольких окнах, подлежащих перемещению. Функция EndDeferWindowPos принимает дескриптор структуры и репозиционирует окна в соответствии с информацией из данной структуры.

    Если одно из окон, описанных в структуре, имеет установленный флаг SWP _ HIDEWINDOW или SWP _ SHOWWINDOW, то не репозиционируется ни одно из окон.

    Если Windows должна увеличить размер структуры по сравнению с начальным размером, задающимся значением параметра nNumWindows , но не может выделить достаточно памяти, то вся последовательность перемещений окон ( BeginDeferWindowPos, DeferWindowPos и EndDeferWindowPos ) заканчивается неудачей. Указанием максимально необходимого размера структуры приложение может выявить и обработать сбой в самом начале всего процесса.

    DeferWindowPos, EndDeferWindowPos, SetWindowPos .

    BringWindowToTop

    Функция BringWindowToTop помещает указанное окно в вершину Z -последовательности. Если окно является окном верхнего уровня — оно активизируется. Если окно представляет собой дочернее окно — активизируется родительское окно верхнего уровня.

    HWND hWnd // дескриптор окна

    hWnd — идентифицирует окно, помещаемое в вершину Z -последовательности.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации вызовите функцию GetLastError .

    Используйте функцию BringWindowToTop для вывода окна, частично или полностью закрытого другими окнами, на передний план.

    Результат вызова этой функции похож на результат вызова SetWindowPos для изменения позиции окна в Z -последовательности, но вызов BringWindowToTop не делает указанное окно окном верхнего уровня.

    Если приложение не находится на переднем плане, и необходимо сделать его приложением переднего плана, вызовите функцию SetForegroundWindow .

    SetWindowPos, SetActiveWindow, SetForegroundWindow .

    CascadeWindows

    Функция CascadeWindows располагает каскадом (каскадирует) указанные окна или дочерние окна указанного родительского окна.

    WORD WINAPI CascadeWindows (

    HWND hwndParent , // дескриптор родительского окна

    UINT wHow , // типы окон, которые не подвергаются каскадированию

    CONST RECT * lpRect , // прямоугольник, в которым каскадируются окна

    UINT cKids , // количество каскадируемых окон

    const HWND FAR *lpKids // массив дескрипторов окон

    hwndParent — идентифицирует родительское окно. Если значение этого параметра равно NULL, используется окно рабочего стола.

    wHow — определяет флаг каскадирования. Доступно единственное значение: MDITILE _ SKIPDISABLED, предотвращающее каскадирование дочерних MDI окон, не принимающих ввод пользователя ( disabled windows ).

    lpRect — указатель на структуру типа SMALL _ RECT , которая определяет прямоугольную область, в экранных координатах, внутри которой каскадируются окна. Значение параметра может быть равно NULL, тогда используется клиентская область родительского окна.

    cKids — определяет число элементов в массиве, заданным параметром lpKids . Значение параметра игнорируется, если значение lpKids равно нулю.

    lpKids — указатель на массив дескрипторов окон, идентифицирующих каскадируемые окна. Если значение этого параметра равно NULL, каскадируются дочерние окна указанного родительского окна (или окна рабочего стола).

    В случае успеха возвращается количество упорядоченных окон.

    В случае неудачи возвращается нуль.

    ChildWindowFromPoint

    Функция ChildWindowFromPoint определяет, какое из дочерних окон, принадлежащих родительскому окну, содержит указанную точку (если таки дочерние окна существуют).

    HWND hWndParent , // дескриптор родительского окна

    POINT Point // структура с координатами точки

    hWndParent — идентифицирует родительское окно.

    Point — определяет структуру типа POINT , которая содержит клиентские координаты проверяемой точки.

    В случае успеха возвращается дескриптор дочернего окна, которое содержит точку, даже если это дочернее окно скрыто или не принимает фокус ввода ( disabled ). Если точка лежит вне родительского окна, возвращается NULL . Если точка находится внутри родительского окна, но не лежит ни в одном из дочерних окон, возвращается дескриптор родительского окна.

    Windows ведет внутренний список, содержащий дескрипторы дочерних окон, связанных с родительским окном. Порядок дескрипторов в этом списке зависит от Z -последовательности дочерних окон. Если указанная точка содержится более чем в одном дочернем окне, Windows возвращает дескриптор первого окна в списке, содержащего точку.

    ChildWindowFromPointEx, POINT, WindowFromPoint .

    ChildWindowFromPointEx

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

    HWND hwndParent , // дескриптор родительского окна

    POINT pt , // структура с координатами точки

    UINT uFlags // флаги игнорирования

    hWndParent — идентифицирует родительское окно.

    Point — определяет структуру типа POINT , которая содержит клиентские координаты проверяемой точки.

    uFlags — определяет, какие дочерние окна будут игнорироваться. Параметр может быть комбинацией следующих значений:

    Не игнорировать дочерние окна.

    CWP _ SKIPINVISIBLE

    Игнорировать невидимые дочерние окна.

    CWP _ SKIPDISABLED

    Игнорировать не принимающие фокус ввода дочерние окна.

    CWP _ SKIPTRANSPARENT

    Игнорировать прозрачные дочерние окна.

    В случае успеха возвращается дескриптор дочернего окна, которое содержит точку и удовлетворяет условию, определенному значением параметра uFlags . Если точка лежит вне родительского окна или вызов функции завершился неудачей, возвращается NULL . Если точка находится внутри родительского окна, но не лежит ни в одном из дочерних окон, удовлетворяющих условию, определенному значением параметра uFlags , возвращается дескриптор родительского окна.

    Windows ведет внутренний список, содержащий дескрипторы дочерних окон, связанных с родительским окном. Порядок дескрипторов в этом списке зависит от Z -последовательности дочерних окон. Если указанная точка содержится более чем в одном дочернем окне, Windows возвращает дескриптор первого окна в списке, содержащего точку и удовлетворяющего условию, определенному значением параметра uFlags .

    ChildWindowFromPoint, POINT, WindowFromPoint .

    CloseWindow

    Функция CloseWindow минимизирует (но не разрушает) определенное окно.

    HWND hWnd // дескриптор минимизируемого окна

    hWnd — идентифицирует минимизируемое окно.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Окно минимизируется путем уменьшения его до размеров иконки и помещения его в область иконок над панелью задач. Windows отображает иконку окна и его заголовок вместо самого окна. Для разрушения окна приложение должно использовать функцию DestroyWindow .

    ArrangeIconicWindows, DestroyWindow, IsIconic, OpenIcon .

    EndDeferWindowPos

    Функция EndDeferWindowPos одновременно обновляет положение и размер одного или более окон в одном цикле обновления экрана.

    HDWP hWinPosInfo // дескриптор внутренней структуры

    hWinPosInfo — идентифицирует внутреннюю структуру, содержащую информацию о размере и положении для одного или более окон. Эта внутренняя структура возвращается функцией BeginDeferWindowPos или более ранним вызовом функции DeferWindowPos .

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Функция EndDeferWindowPos отправляет сообщения WM _ WINDOWPOSCHANGING и WM _ WINDOWPOSCHANGED каждому окну, идентифицируемому во внутренней структуре.

    BeginDeferWindowPos, DeferWindowPos , WM_WINDOWPOSCHANGED, WM_WINDOWPOSCHANGING.

    FindWindow

    Функция FindWindow возвращает дескриптор окна верхнего уровня, чье имя класса и имя окна совпадают с заданными строками. Эта функция не ищет дочерние окна.

    LPCTSTR lpClassName , // указатель на имя класса

    LPCTSTR lpWindowName // указатель на имя окна

    lpClassName — указывает на завершающуюся нулем строку, определяющую имя класса или атом, идентифицирующий строку имени класса. Если этот параметр является атомом, то он должен быть глобальным атомом, созданным предыдущим вызовом функции GlobalAddAtom . 16-ти битное значение атома должно быть размещено в младшем слове lpClassName , старшее слово должно быть равно нулю.

    lpWindowName — указывает на завершающуюся нулем строку, определяющую имя окна (заголовок окна). Если значение этого параметра равно NULL, то со значением lpWindowName совпадают имена всех окон.

    В случае успеха функция возвращает дескриптор окна, которое имеет указанные имя класса и имя окна. В случае неудачи возвращается NULL. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    EnumWindows, FindWindowEx, GetClassName, GlobalAddAtom .

    FindWindowEx

    Функция FindWindowEx извлекает дескриптор окна, чье имя класса и имя окна совпадают с указанными строками. Функция также просматривает дочерние окна, начиная с того, дескриптор которого передан функции в качестве параметра hwndChildAfter .

    HWND hwndParent , // дескриптор родительского окна

    HWND hwndChildAfter , // дескриптор дочернего окна

    LPCTSTR lpszClass , // указатель на имя класса

    LPCTSTR lpszWindow // указатель на имя окна

    hwndParent — идентифицирует родительское окно, среди дочерних окон которого будет проводиться поиск.

    Если значение параметра hwndParent равно NULL, функция использует рабочий стол Windows в качестве родительского окна. Функция проводит поиск среди окон, являющимися дочерними окнами рабочего стола.

    hwndChildAfter — идентифицирует дочернее окно. Поиск начинается со следующего окна в Z- последовательности. Окно, указанное параметром hwndChildAfter , должно быть прямым дочерним окном указанного параметром hwndParent окна, а не порожденным окном.

    Если значение параметра hwndChildAfter равно NULL, поиск начинается с первого дочернего окна.

    Примечание: Если значения обоих параметров hwndParent и hwndChildAfter равны NULL, функция проводит поиск среди всех окон верхнего уровня.

    lpszClass — указывает на завершающуюся нулем строку, определяющую имя класса или атом, идентифицирующий строку — имя класса. Если этот параметр является атомом, он должен быть глобальным атомом, созданным предыдущим вызовом функции GlobalAddAtom . Значение атома должно быть помещено в младшее слово lpszClass , старшее слово должно быть равно нулю.

    lpszWindow — указывает на завершающуюся нулем строку, определяющую имя окна (заголовок окна). Если значение этого параметра равно NULL, то совпадающими со строкой считаются все имена окон.

    В случае успеха возвращается дескриптор окна, которое имеет заданные имя класса и имя окна.

    В случае неудачи возвращается NULL. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    EnumWindows, FindWindow, GetClassName, GlobalAddAtom .

    GetClientRect

    Функция GetClientRect возвращает координаты клиентской области окна. Клиентские координаты определяют верхний левый и правый нижний углы клиентской области. Поскольку клиентские координаты относительны левого угла клиентской области окна, то координатой верхнего левого угла является (0, 0).

    HWND hWnd // дескриптор окна

    LPRECT lpRect // адрес структуры для клиентских координат

    hWnd — идентифицирует окно, клиентские координаты которого возвращаются.

    lpRect — указывает на структуру, получающую клиентские координаты. Члены left и top равны нулю. Члены right и bottom содержат ширину и высоту окна.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    SetWindowText

    Функция SetWindowText изменяет текст заголовка (если заголовок существует) указанного окна. Если указанное окно является элементом управления, то изменяется текст этого элемента управления.

    HWND hWnd , // дескриптор окна или элемента управления

    LPCTSTR lpString // адрес строки

    hWnd — идентифицирует окно или элемент управления, чей текст изменяется.

    lpString — указывает на завершающуюся нулем строку, используемую в качестве нового заголовка окна или текста элемента управления.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке, вызовите функцию GetLastError

    Функция SetWindowText отправляет сообщение WM_SETTEXT указанному окну или элементу управления. Тем не менее, если окно является окном списка, созданным с параметром WS_CAPTION, SetWindowText устанавливает текст для элемента управления, а не для элементов списка.

    Функция SetWindowText не разворачивает символы табуляции ( ASCII -код 0 x 09). Символы табуляции отображаются как вертикальная черта (|).

    Каретка

    CreateCaret

    Функция CreateCaret создает новый внешний вид для системной каретки и присваивает владение кареткой указанному окну. Каретка может быть прямоугольником, линией или битовым образом.

    HWND hWnd , // дескриптор окна-владельца

    HBITMAP hBitmap , // дескриптор битового образа для каретки

    int nWidth , // ширина каретки

    int nHeight // высота каретки

    hWnd — идентифицирует окно, владеющее кареткой.

    hBitmap — идентифицирует битовый образ, который определяет вид каретки. Если значение этого параметра равно NULL, каретка представляет собой сплошной прямоугольник. Если значение этого параметра равно ( HBITMAP ) 1, каретка представляет собой серый прямоугольник. Если значение этого параметра является дескриптором битового образа, то каретка представляет собой указанный битовый образ. Дескриптор битового образа должен быть создан функциями CreateBitmap, CreateDIBitmap или LoadBitmap .

    Если значение hBitmap является дескриптором битового образа, CreateCaret игнорирует значения параметров nWidth и nHeight ; битовый образ задает свои собственные ширину и высоту.

    nWidth — определяет ширину каретки в логических единицах. Если значение этого параметра равно нулю, ширина устанавливается в определяемую системой ширину рамки окна. Если значение hBitmap является дескриптором битового образа, CreateCaret игнорирует значение параметра nWidth .

    nHeight — определяет высоту каретки в логических единицах. Если значение этого параметра равно нулю, высота устанавливается в определяемую системой высоту рамки окна. Если значение hBitmap является дескриптором битового образа, CreateCaret игнорирует значение параметра nHeight .

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Значения параметров nWidth and nHeight определяют ширину и высоту каретки в логических единицах. Точные ширина и высота в пикселях зависят от режима отображения окна.

    CreateCaret автоматически разрушает предыдущий вид каретки, если таковая есть, независимо от окна-владельца.

    Пока приложение не вызовет функцию ShowCaret , каретка является скрытой.

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

    Вы можете получить системные ширину и высоту окна, используя функцию GetSystemMetrics со значениями параметров SM _ CXBORDER и SM _ CYBORDER . Использование ширины или высоты рамки окна гарантирует, что каретка будет видна на экране с высоким разрешением.

    CreateBitmap, CreateDIBitmap, DestroyCaret, GetSystemMetrics, HideCaret, LoadBitmap, ShowCaret .

    DestroyCaret

    Функция DestroyCaret разрушает текущую каретку, освобождает каретку от окна и удаляет изображение каретки с экрана.

    Если каретка основана на растровом изображении, DestroyCaret не освобождает это изображение.

    BOOL DestroyCaret ( VOID )

    Функция не имеет параметров.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    DestroyCaret разрушает каретку только в том случае, ели окно в текущей задаче владеет ею. Если кареткой владеет окно, которое не принадлежит текущей задаче, DestroyCaret не выполняет никаких действий и возвращает FALSE.

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

    CreateCaret, HideCaret, ShowCaret .

    GetCaretBlinkTime

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

    UINT GetCaretBlinkTime ( VOID )

    Функция не имеет параметров.

    В случае успеха возвращается время мерцания каретки в миллисекундах.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    GetCaretPos

    Функция GetCaretPos копирует позицию каретки, в клиентских координатах, в указанную структуру типа POINT .

    LPPOINT lpPoint // адрес структуры, получающей координаты

    lpPoint — указывает на структуру типа POINT , которая получает клиентские координаты каретки.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Позиция каретки всегда указывается в клиентских координатах окна, содержащего каретку.

    HideCaret

    Функция HideCaret убирает каретку с экрана. Сокрытие каретки не разрушает ее текущей формы и не изменяет точки вставки.

    HWND hWnd // дескриптор окна с кареткой

    hWnd — идентифицирует окно, владеющее кареткой. Если значение этого параметра равно NULL, HideCaret ищет текущую задачу для окна, владеющего кареткой.

    В случае успеха функция возвращает ненулевое значение. В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    HideCaret прячет каретку только в том случае, если указанное окно ею владеет. Если указанное окно не владеет кареткой, то HideCaret не выполняет никаких действий и возвращает FALSE.

    Сокрытие каретки кумулятивно. Если ваше приложение вызывает HideCaret пять раз, то оно также должно пять раз вызвать ShowCaret для появления каретки.

    CreateCaret, DestroyCaret, GetCaretPos, SetCaretPos, ShowCaret .

    SetCaretBlinkTime

    Функция SetCaretBlinkTime устанавливает время мерцания каретки в указанное число миллисекунд.

    UINT uMSeconds // время мерцания каретки, в миллисекундах

    uMSeconds — определяет новое время мерцания, в миллисекундах.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Пользователь может установить время мерцания через Панель Управления. Приложения должны «уважать» настройки, сделанные пользователем. Функция SetCaretBlinkTime должна использоваться приложением только в том случае, если приложение позволяет пользователю установить время мерцания каретки, наподобие Панели Управления.

    Если вы изменили время мерцания, то запущенные позже приложения будут использовать новое значение, даже если вы восстанавливаете предыдущее значение времени мерцания при потере фокуса ввода, или когда ваше приложение становится неактивным. Это происходит из-за многопоточной среды, где деактивация вашего приложения не синхронизируется с активацией другого. Это позволяет системе активировать другое приложение, даже если текущее приложение зависло.

    SetCaretPos

    Функция SetCaretPos перемещает каретку в заданную позицию. Если окно, которое владеет кареткой, было создано со стилем класса CS _ OWNDC, то указанные координаты зависят от режима отображения контекста устройства, связанного с окном.

    int X , // горизонтальная позиция

    int Y // вертикальная позиция

    X — определяет новую x -координату каретки.

    Y — определяет новую y -координату каретки.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    SetCaretPos перемещает каретку вне зависимости от того, является ли каретка видимой, или нет.

    Каретка является разделяемым ресурсом; в системе существует только один экземпляр каретки. Окно может установить положение каретки только в том случае, если оно владеет кареткой.

    GetCaretPos, HideCaret, ShowCaret .

    ShowCaret

    Функция ShowCaret делает каретку видимой в ее текущей позиции на экране. Когда каретка становится видимой, она автоматически начинает мерцать.

    HWND hWnd // дескриптор окна с кареткой

    hWnd — идентифицирует окно, владеющее кареткой. Если значение этого параметра равно NULL, ShowCaret ищет в текущей задаче окно, которое владеет кареткой.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    ShowCaret показывает каретку только в случае, если указанное окно владеет кареткой, каретка имеет контур, и каретка не была скрыта два или более раз подряд. Если одно из этих условий нарушается, ShowCaret не производит никаких действий и возвращает FALSE.

    Сокрытие каретки кумулятивно. Если ваше приложение вызывает HideCaret пять раз подряд, оно также должно вызвать ShowCaret пять раз подряд, прежде чем каретка станет видимой.

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

    CreateCaret, DestroyCaret, GetCaretPos, HideCaret, SetCaretPos .

    CheckMenuItem

    Функция CheckMenuItem устанавливает или снимает атрибут отметки пункта меню.

    Функция CheckMenuItem была заменена функцией SetMenuItemInfo . Тем не менее, вы можете продолжать использовать CheckMenuItem , если вам не нужны дополнительные возможности SetMenuItemInfo .

    HMENU hmenu , // дескриптор меню

    UINT uIDCheckItem , // пункт меню

    UINT uCheck // флаги пункта меню

    hmenu — идентифицирует интересующее меню.

    uIDCheckItem — определяет пункт меню, чей атрибут отметки устанавливается, как определяется значением параметра uCheck .

    uCheck — определяет флаги, которые управляют интерпретацией значения параметра uIDCheckItem и состоянием атрибута отметки пункта меню. Значение этого параметра должно представлять собой комбинацию MF_BYCOMMAND или MF_BYPOSITION и MF_CHECKED или MF_UNCHECKED.

    Указывает, что значение uIDCheckItem представляет собой идентификатор пункта меню.

    MF _ BYPOSITION

    Указывает, что значение uIDCheckItem представляет собой относительную позицию пункта меню (отсчет позиции начинается с нуля).

    Устанавливает атрибут выделения пункта меню в состояние «отмечен».

    Устанавливает атрибут выделения пункта меню в состояние «неотмечен».

    Флаг MF _ BYCOMMAND является флагом по умолчанию, если флаг MF _ BYCOMMAND или MF _ BYPOSITION не установлен.

    Возвращаемое значение идентифицирует предыдущее состояние пункта меню ( либо MF_CHECKED, либо MF_UNCHECKED). Если пункт меню не существует, возвращается 0 xFFFFFFFF .

    Пункт в строке меню не может иметь отметку.

    Значение параметра uIDCheckItem идентифицирует пункт меню, который либо открывает подменю, либо является командным пунктом меню. Для пункта меню, который открывает подменю, значение параметра uIDCheckItem должно указывать положение пункта. Для командного пункта меню, значение uIDCheckItem может определять как положение, так и идентификатор пункта меню.

    EnableMenuItem, GetMenuCheckMarkDimensions, GetMenuItemID, SetMenuItemBitmaps, SetMenuItemInfo .

    CreateMenu

    Функция CreateMenu создает меню. Изначально меню пустое, но оно может быть заполнено пунктами меню, используя функции InsertMenuItem, AppendMenu и InsertMenu .

    HMENU CreateMenu ( VOID )

    Функция не имеет параметров.

    В случае успеха возвращается дескриптор созданного меню.

    В случае неудачи возвращается NULL .

    Ресурсы, связанные с меню, которое назначено окну, освобождаются автоматически. Если меню не назначено окну, приложение должно освободить ресурсы, связанные с меню, перед завершением приложения. Приложение освобождает ресурсы меню, вызывая функцию DestroyMenu .

    Windows 95: Система может поддерживать максимум 16384 дескрипторов меню.

    AppendMenu, CreatePopupMenu, DestroyMenu, InsertMenu, SetMenu, InsertMenuItem .

    CreatePopupMenu

    Функция CreatePopupMenu создает выпадающее меню (drop-down menu), подменю ( submenu ) или меню быстрого вызова ( shortcut menu ). Меню изначально пустое. Вы можете вставить или добавить пункты меню, используя функцию InsertMenuItem . Вы также можете использовать функцию InsertMenu для вставки пунктов меню и функцию AppendMenu для добавления пунктов меню.

    HMENU CreatePopupMenu ( VOID )

    Функция не имеет параметров.

    В случае успеха возвращается дескриптор созданного меню.

    В случае неудачи возвращается NULL .

    Приложение может добавить новое меню в существующее меню, или оно может отобразить меню быстрого вызова, используя функции TrackPopupMenu или TrackPopupMenuEx .

    Ресурсы, связанные с меню, которое назначено окну, освобождаются автоматически. Если меню не назначено окну, приложение должно освободить ресурсы, связанные с меню, перед завершением приложения. Приложение освобождает ресурсы меню, вызывая функцию DestroyMenu .

    Windows 95: Система может поддерживать максимум 16384 дескрипторов меню.

    AppendMenu, CreateMenu, DestroyMenu, InsertMenu, SetMenu, TrackPopupMenu, TrackPopupMenuEx, InsertMenuItem .

    DeleteMenu

    Функция DeleteMenu удаляет пункт из заданного меню. Если пункт открывает меню или подменю, эта функция разрушает дескриптор меню или подменю и освобождает используемую ими память.

    HMENU hMenu , // дескриптор меню

    UINT uPosition , // идентификатор или позиция пункта меню

    UINT uFlags // флаг пункта меню

    hMenu — идентифицирует меню.

    uPosition — задает удаляемый пункт меню, согласно значению параметра uFlags .

    uFlags — определяет, каким образом интерпретируется значение параметра uPosition . Параметр uFlags должен принимать одно из следующих значений:

    Указывет, что uPosition принимает идентификатор пункта меню. Флаг MF_BYCOMMAND явялется флагом по умолчанию, если явно не задан ни флаг MF_BYCOMMAND, ни MF_BYPOSITION.

    Указывает, что uPosition принимает относительную, отсчитываемую от нуля позицию пункта меню.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Приложение должно вызвать функцию DrawMenuBar при изменении меню, вне зависимости от того, находится ли меню в отображаемом окне или нет.

    GetMenuCheckMarkDimensions

    Функция является устаревшей. Используйте GetSystemMetrics со значениями CXMENUCHECK и CYMENUCHECK для извлечения размеров битового образа.

    Функция GetMenuCheckMarkDimensions возвращает размеры битового образа отметки по умолчанию пункта меню. Windows отображает этот битовый образ в пункте меню. Перед вызовом функции SetMenuItemBitmaps для изменения битового образа отметки для пункта меню, приложение должно определить корректный размер образа, вызвав GetMenuCheckMarkDimensions .

    LONG GetMenuCheckMarkDimensions ( VOID )

    Функция не имеет параметров.

    Возвращаемое значение определяет высоту и ширину битового образа отметки по умолчанию в пикселях. Старшее слово содержит высоту, младше слово содержит ширину.

    GetMenuItemCount

    Функция GetMenuItemCount определяет количество пунктов в указанном меню.

    HMENU hMenu // дескриптор меню

    hMenu — определяет дескриптор меню, для которого будет определяться количество пунктов .

    В случае успеха возвращаемое значение определяет количество пунктов в меню.

    В случае неудачи возвращается -1. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    GetMenuItemID

    Функция GetMenuItemID извлекает идентификатор пункта меню, находящегося в указанной позиции в меню.

    HMENU hMenu , // дескриптор меню

    int nPos // позиция пункта меню

    hMenu — идентифицирует меню, содержащее пункт меню, идентификатор которого извлекается.

    nPos — определяет относительную позицию (отсчет начинается с нуля) пункта меню, идентификатор которого извлекается.

    В случае успеха возвращается идентификатор данного пункта меню.

    Если идентификатор меню равен NULL, или указанный пункт меню открывает подменю, возвращается 0 xFFFFFFFF .

    GetMailslotInfo

    Функция GetMailslotInfo извлекает информацию об указанном мэйлслоте.

    HANDLE hMailslot , // дескриптор мэйлслота

    LPDWORD lpMaxMessageSize , // адрес максимального размера сообщения

    LPDWORD lpNextSize , // адрес размера следующего сообщения

    LPDWORD lpMessageCount , // адрес количества сообщений

    LPDWORD lpReadTimeout // адрес тайм — аута чтения

    hMailslot — идентифицирует мэйлслот. Этот дескриптор должна создать функция CreateMailslot .

    lpMaxMessageSize — когда функция возвращает управление, указывает на буфер, определяющий максимальный размер письма в байтах, допустимый для этого мэйлслота. Эта величина должна быть больше или равна значению параметра cbMaxMsg функции CreateMailslot , создавшей мэйлслот. Значение параметра может быть равно нулю.

    lpNextSize — когда функция возвращает управление, указывает на буфер, определяющий размер следующего письма в байтах. Следующая величина имеет специальное значение:

    MAILSLOT_NO_MESSAGE — следующее сообщение отсутствует.

    Значение параметра может быть равно нулю.

    lpMessageCount — когда функция возвращает управление, указывает на буфер, определяющий количество сообщений, ждущих прочтения. Значение параметра может быть равно нулю.

    lReadTimeout — указывает на буфер, определяющий количество времени, в миллисекундах, которое операция чтения может ждать сообщения, записанного в мэйлслот, до наступления тайм-аута. Параметр заполняется, когда функция возвращает управление. Значение параметра может быть равно нулю.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    GetMenuState

    Функция GetMenuState извлекает флаги меню, ассоциированные с указанным пунктом меню. Если пункт меню открывает подменю, функция также возвращает количество пунктов в подменю.

    Функция GetMenuState заменена функцией GetMenuItemInfo . Вы, тем не менее, можете продолжать использовать функцию GetMenuState , если у вас нет необходимости в дополнительных возможностях функции GetMenuItemInfo .

    HMENU hMenu , // дескриптор меню

    UINT uId , // запрашиваемый пункт меню

    UINT uFlags // флаги меню

    hMenu — идентифицирует меню, которое содержит пункт, чьи флаги извлекаются.

    uId — определяет пункт меню, для которого извлекаются флаги меню.

    uFlags — определяет, как интерпретируется значение параметра uId . Параметр uFlags должен принимать одно из следующих значений:

    Указывает, что uPosition принимает идентификатор пункта меню. Флаг MF_BYCOMMAND является флагом по умолчанию, если явно не задан ни флаг MF_BYCOMMAND, ни MF_BYPOSITION.

    Указывает, что uPosition принимает относительную, отсчитываемую с нуля позицию пункта меню.

    Если указанного пункта меню не существует, возвращается 0 xFFFFFFFF .

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

    В остальных случаях возвращаемое значение является маской флагов меню. Ниже приведены флаги меню, связанные с пунктом меню:

    Помещает отметку в пункт меню (только для выпадающих меню, меню быстрого вызова команд и подменю).

    Запрещает пункт меню.

    Запрещает пункт меню и делает его затененным.

    Подсвечивает пункт меню.

    То же, что и флаг MF _ MENUBREAK, за исключением выпадающих меню, меню быстрого вызова команд и подменю, где новый столбец от старого столбца отделяется вертикальной чертой.

    Помещает новый пункт в новой строке (для строк меню) или в новый столбец (для выпадающих меню, меню быстрого вызова команд и подменю) без разделения столбцов.

    Создает горизонтальную разделяющую линию (для выпадающих меню, меню быстрого вызова команд и подменю).

    GetMenu, GetMenuItemCount, GetMenuItemID, GetMenuItemInfo, GetMenuString .

    SetMenuItemBitmaps

    Функция SetMenuItemBitmaps связывает указанный битовый образ с пунктом меню. В зависимости от того, является ли пункт меню отмеченным или нет, Windows отображает соответствующий битовый образ в пункте меню.

    HMENU hMenu , // дескриптор меню

    UINT uPosition , // пункт меню для получения нового битового образа

    UINT uFlags , // флаги пункта меню

    HBITMAP hBitmapUnchecked , // дескриптор битового образа

    // для неотмеченного состояния

    HBITMAP hBitmapChecked // дескриптор битового образа

    // для отмеченного состояния

    hMenu — идентифицирует меню, содержащее элемент, который получает новые битовые образы отмеченного и неотмеченного состояний.

    uPosition — определяет подлежащий изменению пункт меню в соответствии со значением параметра uFlags .

    uFlags — определяет, как интерпретируется значение параметра uPosition . Параметр uFlags должен быть одним из следующих значений:

    Указывает, что значение uPosition представляет собой идентификатор пункта меню. Если не задан ни один из флагов, то используется флаг по умолчанию — MF _ BYCOMMAND .

    MF _ BYPOSITION

    Указывает, что значение uPosition представляет собой относительную позицию пункта меню (отсчет позиции начинается с нуля).

    hBitmapUnchecked — идентифицирует битовый образ, отображаемый, когда пункт меню не отмечен.

    hBitmapChecked — идентифицирует битовый образ, отображаемый, когда пункт меню отмечен.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке, вызовите функцию GetLastError .

    Если значение параметра hBitmapUnchecked или hBitmapChecked равно NULL, Windows ничего не отображает в соответствующем пункте меню для соответствующего состояния. Если значения обоих параметров равны NULL, то Windows отображает стандартный битовый образ отметки, соответствующей отмеченному состоянию, и убирает битовый образ, когда пункт меню не отмечен.

    При разрушении меню эти битовые образы не разрушаются: их должно разрушить приложение.

    Windows NT : Функция GetMenuCheckMarkDimensions извлекает размеры отметки по умолчанию, используемой для пунктов меню. Эти значения используются для определения соответствующих размеров битовых образов, используемых функцией SetMenuItemBitmaps .

    Windows 95: Функция GetMenuCheckMarkDimensions устарела . Используйте функцию GetsystemMetrics с параметрами CXMENUCHECK и CYMENUCHECK для извлечения размеров битовых образов.

    Оконные процедуры

    WindowProc

    Функция WindowProc является определяемой приложением функцией обратного вызова, которая обрабатывает отправленные окну сообщения.

    LRESULT CALLBACK WindowProc (

    HWND hwnd , // дескриптор окна

    UINT uMsg , // идентификатор сообщения

    WPARAM wParam , // первый параметр сообщения

    LPARAM lParam // второй параметр сообщения

    hWnd — идентифицирует окно, получающее сообщение.

    uMsg — определяет сообщение.

    wParam — определяет дополнительную информацию, зависящую от сообщения.

    lParam — определяет дополнительную информацию, зависящую от сообщения.

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

    WindowProc является «заполнителем» для имени определяемой приложением функции.

    CallWindowProc, DefWindowProc, RegisterClass .

    Строки

    CharPrev

    Функция CharPrev возвращает указатель на предшествующий символ в строке. Функция заменяет функцию AnsiPrev .

    LPCTSTR lpszStart , // указатель на первый символ

    LPCTSTR lpszCurrent // указатель на текущий символ

    lpszStart — указатель на начало строки.

    lpszCurrent — указатель на текущий символ в завершающейся нулем строке.

    В случае успеха возвращается указатель на предшествующий символ в строке, или на первый символ в строке, если значения параметров lpszCurrent и lpszStart совпадают.

    CharToOem

    Функция CharToOem преобразует строку в набор символов ОЕМ. Эта функция заменяет функцию AnsiToOem .

    LPCTSTR lpszSrc , // указатель на преобразуемую строку

    LPSTR lpszDst // указатель на буфер для преобразованной строки

    lpszSrc — указывает на завершающуюся нулем преобразуемую строку.

    lpszDst — указывает на буфер для преобразованной строки. Если CharToOem используется как ANSI -функция, то можно установить параметр lpszDst на тот же адрес, что и параметр lpszSrc . Это не может быть осуществлено в случае использования CharToOem как Unicode -функции.

    Всегда возвращается ненулевое значение.

    CharToOemBuff, OemToChar, OemToCharBuff .

    CharToOemBuff

    Функция CharToOemBuff преобразует указанное количество символов в строке в набор символов ОЕМ. Эта функция заменяет функцию AnsiToOemBuff .

    LPCTSTR lpszSrc , // указатель на преобразуемую строку

    LPSTR lpszDst , // указатель на преобразованную строку

    DWORD cchDstLength // длина преобразуемой строки в байтах

    lpszSrc — указывает на завершающуюся нулем преобразуемую строку.

    lpszDst — указывает на буфер для преобразованной строки. Если CharToOemBuff используется как ANSI -функция, то можно установить параметр lpszDst на тот же адрес, что и параметр lpszSrc . Это не может быть осуществлено в случае использования CharToOemBuff как Unicode -функции.

    cchDstLength — определяет количество символов для преобразования в строке, идентифицируемой значением параметра lpszSrc .

    Всегда возвращается ненулевое значение.

    CharToOem, OemToChar, OemToCharBuff .

    EnumCodePagesProc

    Функция EnumCodePagesProc является определяемой приложением функцией обратного вызова. Она вызывается в результате вызова функции EnumSystemCodePages , и получает указатель на строковый буфер, содержащий идентификатор кодовой страницы.

    BOOL CALLBACK EnumCodePagesProc (

    LPTSTR lpCodePageString // указатель на строку идентификатора

    lpCodePageString — указатель на строковый буфер, содержащий завершающуюся нулем строку идентификатора кодовой страницы.

    Для продолжения перечисления функция обратного вызова должна возвращать TRUE.

    Для остановки перечисления, функция обратного вызова должна возвращать FALSE.

    EnumCodePagesProc является «заполнителем» для имени определяемой приложением функции.

    EnumCodePagesProc может выполнять любые желаемые действия.

    Приложение регистрирует функцию EnumCodePagesProc , передавая ее адрес в функцию EnumSystemCodePages .

    Значение типа CODEPAGE _ ENUMPROC является указателем на функцию EnumCodePagesProc .

    GetACP

    Функция GetACP возвращает идентификатор текущей кодовой страницы ANSI для системы.

    Функция не имеет параметров.

    В случае успеха возвращается идентификатор текущей кодовой страницы ANSI для системы, или идентификатор по умолчанию, если текущая кодовая страница не установлена.

    Ниже представлены идентификаторы кодовых страниц ANSI :

    Китайская (КНР, Сингапур)

    Китайская (Тайвань, Гонконг)

    Юникод ( ISO 10646)

    Восточноевропейская ( Windows 3.1 )

    Кириллическая ( Windows 3.1 )

    Latin 1( Windows 3.1; США, Западная Европа)

    Греческая ( Windows 3.1 )

    Турецкая ( Windows 3.1 )

    GetCPInfo

    Функция GetCPInfo извлекает информацию о любой действительной или доступной кодовой странице.

    UINT CodePage , // идентификатор кодовой страницы

    LPCPINFO lpCPInfo // адрес структуры для информации

    CodePage — определяет идентификатор кодовой страницы, информация о которой извлекается. Вы можете указать идентификатор для любой установленной или доступной кодовой страницы, или вы можете указать одно из следующих предопределенных значений:

    Использует кодовую страницу ANSI по умолчанию.

    Использует кодовую страницу Макинтош по умолчанию.

    Использует кодовую страницу OEM по умолчанию.

    lpCPInfo — указатель на структуру типа CPINFO , которая получает информацию о кодовой странице.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Если кодовая страница не установлена или недоступна, GetCPInfo устанавливает значение последней ошибки в ERROR_INVALID_PARAMETER .

    GetACP, GetOEMCP, CPINFO .

    GetSystemDefaultLCID

    Функция GetSystemDefaultLCID извлекает идентификатор системной локали по умолчанию.

    LCID GetSystemDefaultLCID ( VOID )

    Функция не имеет параметров.

    В случае успеха возвращается идентификатор системной локали по умолчанию.

    GetLocaleInfo, GetUserDefaultLCID, MAKELCID .

    GetThreadLocale

    Функция GetThreadLocale возвращается текущую локаль вызывающего потока.

    LCID GetThreadLocale ( VOID )

    Функция не имеет параметров.

    Функция возвращает 32-битный идентификатор локали вызывающего потока.

    При создании потока ему дается системная локаль потока по умолчанию. Система читает системную локаль потока по умолчанию из реестра при загрузке системы. Системная локаль потока по умолчанию может быть изменена в Панели управления.

    SetThreadLocale, GetSystemDefaultLCID, GetUserDefaultLCID .

    IsValidCodePage

    Функция IsValidCodePage определяет, является ли действительной указанная кодовая страница.

    UINT CodePage // проверяемая кодовая страница

    CodePage — определяет кодовую страницу, подлежащую проверке. Каждая кодовая страница идентифицируется уникальным номером.

    Если кодовая страница действительна, возвращается ненулевое значение.

    Если кодовая страница недействительна, возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Кодовая страница действительна только в том случае, если она установлена в системе.

    Ниже приведены идентификаторы кодовых страниц ОЕМ:

    Арабская ( ASMO 708).

    Арабская ( ASMO 449+, BCON V4).

    Арабская (Transparent Arabic).

    Арабская (Transparent ASMO).

    Греческая (ранее 437 G ).

    MS — DOS многоязыковая ( Latin I ).

    MS — DOS восточноевропейская ( Latin II ).

    MS — DOS (Португалия).

    MS — DOS (Исландия).

    MS — DOS (Французская Канада).

    MS — DOS скандинавская.

    MS — DOS русская.

    Современная греческая IBM .

    Китайская (КНР, Сингапур).

    Китайская (Тайвань, Гонконг).

    Unicode (BMP или ISO 10646).

    Windows 3.1 (Восточная Европа).

    Windows 3.1 ( Кириллица ).

    Windows 3.1 США (ANSI).

    Греческая Windows 3.1.

    Турецкая Windows 3.1.

    Macintosh греческая I .

    Macintosh Latin 2.

    GetACP, GetCPInfo, GetOEMCP .

    SetThreadLocale

    Функция SetThreadLocale устанавливает текущую локаль вызывающего потока.

    LCID Locale // идентификатор локали

    Locale — определяет новую локаль для вызывающего потока. Значение этого параметра может быть идентификатором локали, созданным макросом MAKELCID , или одним из следующих предопределенных значений:

    Системная локаль по умолчанию.

    Пользовательская локаль по умолчанию.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    При создании потока ему дается системная локаль потока по умолчанию. Система читает системную локаль потока по умолчанию из реестра при загрузке системы. Системная локаль потока по умолчанию может быть изменена в Панели управления.

    GetThreadLocale, GetSystemDefaultLCID, GetUserDefaultLCID .

    Курсор

    ClipCursor

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

    CONST RECT * lpRect // указатель на структуру с прямоугольником

    lprc — указывает на структуру типа RECT , которая содержит экранные координаты верхнего левого и нижнего правого углов ограничивающего прямоугольника. Если значение этого параметра равно NULL, курсор свободен в перемещении по экрану.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Курсор является разделяемым ресурсом. Если приложение ограничивает перемещение курсора, оно должно освободить курсор, используя функцию ClipCursor , перед передачей управления другому приложению.

    Вызывающий процесс должен иметь доступ WINSTA _ READATTRIBUTES к оконной станции ( window station ). Разъяснение термина window station смотрите в описании функции CreateWindowStation .

    GetClipCursor, GetCursorPos, RECT, SetCursorPos .

    CopyCursor

    Функция CopyCursor копирует курсор.

    HCURSOR pcur // дескриптор копируемого курсора

    pcur — идентифицирует копируемый курсор.

    В случае успеха возвращается дескриптор курсора-копии.

    В случае неудачи возвращается NULL . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    CopyCursor позволяет приложению или динамически подключаемой библиотеке ( DLL ) получить дескриптор курсора, которым владеет другой модуль. Затем, если другой модуль завершил свою работу, приложение все еще будет иметь возможность использовать этот курсор.

    CopyIcon, GetCursor, SetCursor, ShowCursor .

    CreateCursor

    Функция CreateCursor создает курсор, имеющий указанный размер, битовый шаблон и горячую точку.

    HINSTANCE hInst , // дескриптор экземпляра приложения

    int xHotSpot , // положение горячей точки по горизонтали

    int yHotSpot , // положение горячей точки по вертикали

    int nWidth , // ширина курсора

    int nHeight , // высота курсора

    CONST VOID * pvANDPlane , // указатель на массив битовой маски И

    CONST VOID * pvXORPlane // указатель на массив битовой маски ИЛИ

    hInst — идентифицирует текущий экземпляр приложения, создающего курсор.

    xHotSpot — определяет положение горячей точки курсора по горизонтали.

    yHotSpot — определяет положение горячей точки курсора по вертикали.

    nWidth — определяет ширину курсора в пикселях.

    nHeight — определяет высоту курсора в пикселях.

    pvANDplane — указывает на массив байт, содержащих значения битов для битовой маски И курсора, как в аппаратно-зависимом монохромном растровом изображении.

    pvXORplane — указывает на массив байт, содержащих значения битов для битовой маски ИЛИ курсора, как в аппаратно-зависимом монохромном растровом изображении.

    В случае успеха возвращается значение, идентифицирующее курсор.

    В случае неудачи возвращается NULL . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Значения параметров nWidth и nHeight должны указывать ширину и высоту, поддерживаемые текущим драйвером дисплея, потому что система не может создать курсоры других размеров. Для определения того, какие ширина и высота поддерживаются драйвером дисплея, вызовите функцию GetSystemMetrics , указав значения SM _ CXCURSOR и SM _ CYCURSOR .

    Перед завершением приложение должно вызвать функцию DestroyCursor для освобождение системных ресурсов, связанных с курсором.

    CreateIcon, DestroyCursor, GetModuleHandle, GetSystemMetrics, SetCursor .

    DestroyCursor

    Функция DestroyCursor разрушает курсор, созданный функцией CreateCursor , и освобождает память, занимаемую курсором. Не используйте функцию для разрушения курсора, который не был создан функцией CreateCursor .

    HCURSOR hCursor // дескриптор разрушаемого курсора

    hCursor — идентифицирует разрушаемый курсор. Курсор не должен использоваться.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    GetClipCursor

    Функция GetClipCursor извлекает экранные координаты прямоугольной области, в которую заключен курсор.

    LPRECT lpRect // адрес структуры для прямоугольника

    lpRect — указываете на структуру типа RECT , которая получает экранные координаты прямоугольника. Структура получает размеры экрана, если курсор не заключен в прямоугольник.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Курсор является разделяемым ресурсом. Если приложение заключает курсор в прямоугольную область функцией ClipCursor , оно затем должно освободить курсор, используя функцию ClipCursor , перед тем, как уступить курсор другому приложению.

    Вызывающий процесс должен иметь доступ WINSTA _ READATTRIBUTES к оконной станции ( window station ). Разъяснение термина window station смотрите в описании функции CreateWindowStation .

    ClipCursor, GetCursorPos, RECT .

    GetCursor

    Функция GetCursor возвращает дескриптор текущего курсора.

    HCURSOR GetCursor ( VOID )

    Функция не имеет параметров.

    В случае успеха функция возвращает дескриптор текущего курсора.

    Если курсора нет, возвращает NULL.

    GetCursorPos

    Функция GetCursorPos извлекает положение курсора в экранных координатах.

    LPPOINT lpPoint // адрес структуры для положения курсора

    lpPoint — указывает на структуру типа POINT , которая получает экранные координаты курсора.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

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

    Вызывающий процесс должен иметь доступ WINSTA _ READATTRIBUTES к оконной станции ( window station ). Разъяснение термина window station смотрите в описании функции CreateWindowStation .

    ClipCursor, POINT, SetCursor, SetCursorPos, ShowCursor .

    LoadCursor

    Функция LoadCursor загружает указанный ресурс курсора из исполняемого (. EXE ) файла, связанного с экземпляром приложения.

    HINSTANCE hInstance , // дескриптор экземпляра приложения

    LPCTSTR lpCursorName // строка с именем курсора или

    hInstance — идентифицирует экземпляр модуля, чей исполняемый файл содержит курсор.

    lpCursorName — указывает на завершающуюся нулем строку, которая сдержит имя ресурса загружаемого курсора. В качестве альтернативы, значение этого параметра может содержать идентификатор ресурса в младшем слове и нуль в старшем. Используйте макрос MAKEINTRESOURCE для создания данного значения.

    Для использования предопределенных курсоров Windows установите значение параметра hInstance в NULL, а значение параметра lpCursorName в одно из следующих значений:

    Курсор в виде буквы » I «.

    Курсор «большие песочные часы».

    Курсор «стрелка вверх».

    Только Windows NT : четырехконечная стрелка

    Только Windows NT : пустая иконка.

    Курсор изменения размера. Ориентирован с северо-запада на юго-восток.

    Курсор изменения размера. Ориентирован с северо-востока на юго-запад.

    Горизонтальный курсор изменения размера.

    Вертикальный курсор изменения размера.

    Курсор изменения всех размеров. То же, что и IDC _ SIZE.

    Перечеркнутый наискосок круг.

    IDC _ APPSTARTING

    Курсор «маленькие песочные часы со стрелкой».

    В случае успеха возвращается дескриптор загруженного курсора.

    В случае неудачи возвращается NULL . Для дополнительной информации об ошибке вызовите функцию GetLastError .

    LoadCursor загружает ресурс курсора только в том случае, если он еще не загружен. В противном случае функция извлекает дескриптор существующего ресурса. Функция возвращает действительный дескриптор курсора, только если значение параметра lpCursorName указывает на ресурс курсора. Если оно указывает на любой другой тип ресурса, отличный от курсора (например, на иконку), возвращается не NULL, хотя возвращаемое значение и не будет действительным дескриптором курсора.

    LoadCursor просматривает ресурс на предмет курсора, наиболее подходящего для текущего устройства изображения. Ресурс курсора может быть цветным или монохромным битовым образом.

    LoadImage, MAKEINTRESOURCE, SetCursor, SetCursorPos, ShowCursor .

    LoadCursorFromFile

    Функция LoadCursorFromFile создает курсор, основанный на данных, содержащихся в файле. Файл задается его именем или идентификатором системного курсора. Функция возвращает дескриптор созданного курсора. Файлы, содержащие данные, могут быть либо файлами курсоров (. CUR ), либо файлами анимированных курсоров (. ANI ).

    LPCTSTR lpFileName // указатель на имя файла с курсором или

    // идентификатор системного курсора

    lpFileName — указывает на источник файловых данных, используемых для создания курсора. Файлы, должны быть либо файлами курсоров (. CUR ), либо файлами анимированных курсоров (. ANI ).

    Если старшее слово lpFileName не равно нулю, то значение lpFileName указывает на строку с полным именем файла, содержащего данные для курсора.

    Если старшее слово lpFileName равно нулю, нижнее слово представляет собой идентификатор системного курсора. Затем функция просматривает секцию [ Cursors ] в файле WIN . INI на предмет файла, связанного с именем указанного системного курсора. Ниже приводится список имен системных курсоров и идентификаторов:

    Имена системных курсоров

    Идентификаторы системных курсоров

    Например, если в WIN . INI содержится следующее:

    то вызов LoadCursorFromFile (( LPWSTR ) OCR _ NORMAL ) заставит функцию LoadCursorFromFile получить данные из файла ARROW . ANI . Если WIN . INI не содержит строки для указанного системного курсора, вызов функции завершится неудачей и функция вернет NULL .

    В случае успеха возвращается дескриптор нового курсора.

    В случае неудачи возвращается NULL . Для получения дополнительной информации об ошибке вызовите функцию GetLastError . GetLastError может вернуть следующее значение: ERROR _ FILE _ NOT _ FOUND — указанный файл не может быть найден.

    LoadCursor, SetCursor, SetSystemCursor .

    SetCursor

    Функция SetCursor устанавливает курсор.

    HCURSOR hCursor // дескриптор курсора

    hCursor — идентифицирует курсор. Курсор должен быть создан функцией CreateCursor или загружен функциями LoadCursor или LoadImage . Если значение этого параметра равно NULL, курсор убирается с экрана.

    Windows 95: Ширина и высота курсора должны быть значениями, возвращаемые функцией GetSystemMetrics для параметров SM _ CXCURSOR и SM _ CYCURSOR . В дополнение, глубина цвета курсора должна совпадать с глубиной цвета экрана, или курсор будет монохромным.

    Возвращается дескриптор предыдущего курсора, если таковой имеется.

    Если предыдущего курсора нет, возвращается NULL .

    Курсор устанавливается, только если он отличен от предыдущего курсора. В противном случае, функция возвращает управление немедленно.

    Курсор является разделяемым ресурсом. Окно должно устанавливать курсор только в том случае, если он находится в его клиентской области и окно перехватывает ввод мыши. В системах без мыши, окно должно восстанавливать предыдущий курсор перед тем, как он покинет клиентскую область окна.

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

    Курсор не отображается на экране, если внутренний счетчик отображений меньше нуля. Это происходит, если приложение использует функцию ShowCursor для скрытия курсора большее число раз, чем оно показывает курсор.

    CreateCursor, GetCursor, GetSystemMetrics, LoadCursor, LoadImage, SetCursorPos, ShowCursor .

    SetCursorPos

    Функция SetCursorPos перемещает курсор в указанные экранные координаты. Если новые координаты находятся вне экранного прямоугольника, установленного последним вызовом функции ClipCursor , Windows автоматически устанавливает координаты, так что курсор остается внутри прямоугольника.

    int X , // горизонтальное положение

    int Y // вертикальное положение

    X — определяет новую x -координату курсора в экранных координатах.

    Y — определяет новую y -координату курсора в экранных координатах.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для дополнительной информации об ошибке вызовите функцию GetLastError .

    Курсор является разделяемым ресурсом. Окно должно перемещать курсор, только если он находится в его клиентской области.

    Вызывающий процесс должен иметь доступ WINSTA _ READATTRIBUTES к оконной станции ( window station ). Разъяснение термина window station смотрите в описании функции CreateWindowStation .

    ClipCursor, GetCursorPos, SetCaretPos, SetCursor, ShowCursor .

    SetSystemCursor

    Функция SetSystemCursor заменяет содержимое системного курсора с указанным id содержимым курсора, определенным значением параметра hcur и затем разрушает hcur . Эта функция позволяет приложению изменять системные курсоры.

    HCURSOR hcur , // устанавливает указанный системный курсор в содержимое

    // данного курсора, а затем разрушает этот курсор

    DWORD id // системный курсор, заданный его идентификатором

    hcur — дескриптор курсора. Функция заменяет содержимое системного курсора с указанным id содержимым курсора, определенным значением параметра hcur и затем разрушает hcur , вызывая DestroyCursor ( hcur ).

    id — идентификатор системного курсора.

    Ниже приведен список идентификаторов системных курсоров:

    Курсор в виде буквы » I «.

    Курсор «большие песочные часы».

    Курсор «стрелка вверх».

    Курсор изменения размеров.

    Курсор изменения размера. Ориентирован с северо-запада на юго-восток.

    Курсор изменения размера. Ориентирован с северо-востока на юго-запад.

    Горизонтальный курсор изменения размера.

    Вертикальный курсор изменения размера.

    Курсор изменения всех размеров. То же, что и OCR _ SIZE.

    Курсор международного символа запрещения, отрицания.

    OCR _ APPSTARTING

    Курсор «маленькие песочные часы со стрелкой».

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    DestroyCursor, LoadCursor, LoadCursorFromFile, SetCursor .

    ShowCursor

    Функция ShowCursor отображает или скрывает курсор.

    BOOL bShow // флаг видимости курсора

    bShow — определяет, инкрементируется или декрементируется внутренний счетчик отображения. Если значение bShow равно TRUE — внутренний счетчик отображения увеличивается на единицу. Если значение bShow равно FALSE — внутренний счетчик отображения уменьшается на единицу.

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

    Функция устанавливает внутренний счетчик, определяющий, должен ли быть отображен курсор. Курсор отображается лишь в том случае, если счетчик отображения больше нуля или равен нулю. Если в системе установлена мышь, то начальное значение счетчика равно 0. Если мышь в системе не установлена, начальное значение счетчика равно -1.

    ClipCursor, GetCursorPos, SetCursor, SetCursorPos .

    Ошибки

    Функция Beep генерирует простые звуки на динамике компьютера. Функция синхронная; она не возвращает управления до тех пор, пока звук не прекратится.

    DWORD dwFreq , // частота звука в герцах

    DWORD dwDuration // продолжительность звука в миллисекундах

    dwFreq — определяет частоту звука в герцах. Значение параметра должно лежать в диапазоне от 37 до 32,767 (0 x 25 до 0 x 7 FFF ).

    Значение параметра игнорируется.

    dwDuration — определяет продолжительность звука в миллисекундах.

    Значение параметра игнорируется.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Windows 95: функция Beep игнорирует значения параметров dwFreq и dwDuration . На компьютерах со звуковой картой функция воспроизводит звуковое событие по умолчанию. На компьютерах без звуковой карты функция воспроизводит стандартный системный звук через динамик компьютера.

    Ресурсы

    BeginUpdateResource

    Функция BeginUpdateResource возвращает дескриптор, который может быть использован функцией UpdateResource для добавления, удаления или замены ресурсов в исполняемом файле.

    LPCTSTR pFileName , // имя файла, в котором будут обновляться ресурсы

    BOOL bDeleteExistingResources // опция удаления

    pFileName — указатель на завершающуюся нулем строку, которая определяет исполняемый файл, в котором необходимо обновить ресурсы. Приложение должно иметь возможность получить разрешение на запись в файл; оно не может выполняться в этот момент. Если значение pFileName не определяет полный путь, Windows ищет файл в текущей директории.

    Илон Маск рекомендует:  page-break-inside в CSS

    bDeleteExistingResources — определяет, удалять ли существующие ресурсы, находящиеся в файле, определяемом значением параметра pFileName . Если значение параметра bDeleteExistingResources равно TRUE, существующие ресурсы удаляются и обновленный исполняемый файл содержит только ресурсы, добавленные функцией UpdateResource . Если значение параметра bDeleteExistingResources равно FALSE, обновленный исполняемый файл содержит существующие ресурсы до тех пор, пока они не будут явно удалены или заменены функцией UpdateResource .

    В случае успеха возвращается дескриптор, который может быть использован в функциях UpdateResource и EndUpdateResource .

    Возвращается NULL, если указанный файл не является исполняемым файлом, исполняемый файл уже загружен, файл не существует или файл не может быть открыт для записи. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    FindResource

    Функция FindResource определяет местоположение ресурса с указанным типом и именем в указанном модуле.

    HMODULE hModule , // дескриптор модуля ресурса

    LPCTSTR lpName , // указатель на имя ресурса

    LPCTSTR lpType // указатель на тип ресурса

    hModule — дескриптор модуля, чей исполняемый файл содержит ресурс. Значение параметра, равное NULL, определяет дескриптор модуля, связанного с загрузочным файлом, который использовала операционная система для создания текущего процесса.

    lpName — определяет имя ресурса. Для дополнительной информации смотрите раздел «Комментарии».

    lpType — определяет тип ресурса. Для дополнительной информации смотрите раздел «Комментарии». Для стандартных типов ресурсов этот параметр может принимать одно из следующих значений:

    Зависимый от аппаратного обеспечения курсор.

    Независимый от аппаратного обеспечения курсор.

    Независимая от аппаратного обеспечения иконка.

    Зависимая от аппаратного обеспечения иконка.

    Элемент таблицы сообщений.

    Определяемые приложением ресурсы.

    Элемент таблицы строк.

    Информация о версии.

    В случае успеха возвращается дескриптор блока с информацией об указанном ресурсе. Для получения дескриптора ресурса передайте этот дескриптор в функцию LoadResource .

    В случае неудачи возвращается NULL . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Если старшее слово значения параметра lpName или lpType равно нулю, младшее слово определяет целочисленный идентификатор имени или типа указанного ресурса. В противном случае, оба значения этих параметров представляют собой длинные указатели на завершающиеся нулем строки. Если первый символ строки равен ‘#’, оставшиеся символы представляют собой десятичное число, которое определяет целочисленный идентификатор имени или типа ресурса. Например, строка «#258» представляет собой целочисленный идентификатор 258.

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

    Приложение может использовать FindResource для поиска ресурса любого типа, но эта функция должна быть использована только в том случае, если приложение должно иметь доступ к двоичным данным ресурсов, когда оно впоследствии вызывает функции LoadLibrary и LockResource .

    Для немедленного использования ресурса приложение должно использовать одну из следующих функций для поиска и загрузки ресурса:

    Загружает и форматирует элемент таблицы сообщений.

    Загружает таблицу акселераторов.

    Загружает битовое изображение.

    Загружает элемент таблицы строк.

    Например, приложение должно и c пользовать функцию LoadIcon для загрузки иконки для ее отображения на экране. Тем не менее, приложение должно использовать функции FindResource и LoadResource , если оно загружает иконку для копирования ее данных в другое приложение.

    FindResourceEx, FormatMessage, LoadAccelerators, LoadBitmap, LoadCursor, LoadIcon, LoadMenu, LoadResource, LoadString, LockResource, SizeofResource .

    FindResourceEx

    Функция FindResourceEx определяет местоположение ресурса с указанным типом, именем и языком в указанном модуле.

    HMODULE hModule , // дескриптор модуля ресурса

    LPCTSTR lpName , // указатель на имя ресурса

    LPCTSTR lpType // указатель на тип ресурса

    WORD wLanguage // язык ресурса

    hModule — дескриптор модуля, чей исполняемый файл содержит ресурс. Значение параметра, равное NULL, определяет дескриптор модуля, связанного с загрузочным файлом, который использовала операционная система для создания текущего процесса.

    lpName — определяет имя ресурса. Для дополнительной информации смотрите раздел «Комментарии».

    lpType — определяет тип ресурса. Для дополнительной информации смотрите раздел «Комментарии». Для стандартных типов ресурсов этот параметр может принимать одно из следующих значений:

    Зависимый от аппаратного обеспечения курсор.

    Независимый от аппаратного обеспечения курсор.

    Независимая от аппаратного обеспечения иконка.

    Зависимая от аппаратного обеспечения иконка.

    Элемент таблицы сообщений.

    Определяемые приложением ресурсы.

    Элемент таблицы строк.

    Информация о версии.

    wLanguage — определяет язык ресурса. Если значение этого параметра равно MAKELANGID ( LANG_NEUTRAL, SUBLANG_NEUTRAL ), используется текущий язык, ассоциированный с вызывающим потоком.

    Для указания языка, отличного от текущего, используйте макрос MAKELANGID .

    В случае успеха возвращается дескриптор блока с информацией об указанном ресурсе. Для получения дескриптора ресурса передайте этот дескриптор в функцию LoadResource .

    В случае неудачи возвращается NULL . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Если старшее слово значения параметра lpName или lpType равно нулю, младшее слово определяет целочисленный идентификатор имени или типа указанного ресурса. В противном случае, оба значения этих параметров представляют собой длинные указатели на завершающиеся нулем строки. Если первый символ строки равен ‘#’, оставшиеся символы представляют собой десятичное число, которое определяет целочисленный идентификатор имени или типа ресурса. Например, строка «#258» представляет собой целочисленный идентификатор 258.

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

    Приложение может использовать FindResourceEx для поиска ресурса любого типа, но эта функция должна быть использована только в том случае, если приложение должно иметь доступ к двоичным данным ресурсов, когда оно впоследствии вызывает функции LoadLibrary и LockResource .

    Для немедленного использования ресурса приложение должно использовать одну из следующих функций для поиска и загрузки ресурса:

    Загружает и форматирует элемент таблицы сообщений.

    Загружает таблицу акселераторов.

    Загружает битовое изображение.

    Загружает элемент таблицы строк.

    Например, приложение должно использовать функцию LoadIcon для загрузки иконки для ее отображения на экране. Тем не менее, приложение должно использовать функции FindResource и LoadResource , если оно загружает иконку для копирования ее данных в другое приложение.

    FindResource, FormatMessage, LoadAccelerators, LoadBitmap, LoadCursor, LoadIcon, LoadMenu, LoadResource, LoadString, LockResource, SizeofResource .

    Пространство имен оболочки

    BrowseCallbackProc

    Функция BrowseCallbackProc представляет собой определяемую приложением функцию обратного вызова, используемую совместно с функцией SHBrowseForFolder . Диалоговое окно выбора папки вызывает эту функцию для уведомления о событиях. Тип BFFCALLBACK определяет указатель на эту функцию обратного вызова.

    hwnd — дескриптор диалогового окна. Функция обратного вызова может отправлять окну следующие сообщения:

    Разрешает кнопку ОК, если значение параметра wParam не равно нулю. В противном случае запрещает кнопку ОК.

    Выбирает указанную папку. Значение lParam представляет собой PIDL выбираемой папки, если значение wParam равно FALSE, или путь папки в противном случае.

    BFFM _ SETSTATUSTEXT

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

    uMsg — идентифицирует событие. Может принимать одно из следующих значений:

    Диалоговое окно завершило инициализацию. Значение параметра lpData равно NULL .

    Изменился выбор в диалоговом окне. lpData представляет собой указатель на список идентификаторов элемента для выбранной папки.

    lParam — зависящее от сообщения значение.

    lpData — определяемое приложением значение, которое было указано в члене lParam структуры типа BROWSEINFO .

    Функция возвращает нуль.

    SHAddToRecentDocs

    Добавляет документ в список недавно использовавшихся документов или очищает список. Пользователь может получить доступ к списку через меню Пуск ( Start ) панели задач Windows .

    WINSHELLAPI void WINAPI SHAddToRecentDocs (

    uFlags — флаг, определяющий значение параметра pv . Может принимать одно из следующих значений:

    SHARD_PATH — pv является адресом строки, содержащей путь и имя файла;

    SHARD_PIDL — pv является адресом списка идентификаторов элемента.

    pv — указатель на буфер, содержащий путь и имя файла документа, или адрес структуры ITEMIDLIST , содержащей список идентификаторов элемента, однозначно определяющих документ. Если значение этого параметр равно NULL, то функция очищает список недавно использовавшихся документов.

    Функция не возвращает значения.

    SHBrowseForFolder

    Функция SHBrowseForFolder отображает диалоговое окно, позволяющее пользователю выбрать папку пространства имен.

    WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder (

    lpbi — указатель на структуру типа BROWSEINFO , которая содержит информацию, используемую для отображения диалогового окна.

    Возвращается указатель на список идентификаторов элементов, который определяет местоположение выбранной папки относительно корня пространства имен. Если пользователь в диалоговом окне нажал клавишу Cancel, возвращается NULL .

    Вызывающее приложение ответственно за освобождение возвращаемого списка идентификаторов.

    SHFileOperation

    Выполняет операцию копирования, перемещения, переименования или удаления над объектом файловой системы.

    WINSHELLAPI int WINAPI SHFileOperation (

    lpFileOp — указатель на структуру типа SHFILEOPSTRUCT , содержащую информацию, необходимую функции для выполнения операции.

    В случае успеха возвращается нуль, ненулевое значение в противном случае.

    SHFreeNameMappings

    Освобождает объект отображения имени файла (filename mapping object), извлекаемый функцией SHFileOperation .

    WINSHELLAPI void WINAPI SHFreeNameMappings (

    hNameMappings — дескриптор освобождаемого объекта отображения имени файла.


    Функция не возвращает значения.

    SHGetDesktopFolder

    Функция SHGetDesktopFolder возвращает интерфейс IShellFolder для папки рабочего стола, которая является корнем пространства имен пользовательского интерфейса ( shell ).

    WINSHELLAPI HRESULT WINAPI SHGetDesktopFolder (

    ppshf — адрес, получающий указатель на интерфейс IShellFolder для папки рабочего стола. Вызывающее приложение ответственно за освобождение интерфейса вызовом метода Release .

    В случае успеха возвращает NOERROR или OLE -определенную ошибку в противном случае.

    SHGetInstanceExplorer

    Функция SHGetInstanceExplorer извлекает адрес интерфейса IUnknown Explorer’а ( Проводника ).

    WINSHELLAPI HRESULT WINAPI SHGetInstanceExplorer (

    ppunk — указатель на переменную, получающую адрес интерфейса IUnknown Explorer ‘а.

    В случае успеха возвращается NOERROR .

    В случае неудачи возвращается E _ FAIL .

    SHGetMalloc

    Функция SHGetMalloc извлекает указатель на интерфейс IMalloc оболочки. Расширение оболочки должно использовать этот интерфейс для выделения памяти, позднее освобождаемой оболочкой.

    ppMalloc — адрес переменной, которая получает адрес интерфейса IMalloc оболочки.

    В случае успеха возвращается NOERROR или E _ FAIL в противном случае.

    SHLoadInProc

    Функция SHLoadInProc создает экземпляр указанного класса объекта внутри контекста процесса пользовательского интерфейса.

    WINSHELLAPI HRESULT WINAPI SHLoadInProc (

    rclsid — CLSID класса объекта, экземпляр которого создается.

    В случае успеха возвращает NOERROR или OLE -определенную ошибку в противном случае.

    Контекст устройства

    CancelDC

    Функция CancelDC отменяет любую незаконченную операцию на указанном контексте устройства.

    HDC hdc // дескриптор контекста устройства

    hdc — идентифицирует контекст устройства.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Функция CancelDC используется многопоточными приложениями для отмены протяженных во времени операций рисования. Если поток A инициирует такую операцию рисования, поток В может ее отменить, вызвав эту функцию.

    Результаты не определены, если во время вызова этой функции не было выполняющейся операции рисования.

    CreateCompatibleDC

    Функция CreateCompatibleDC создает контекст устройства в памяти, совместимый с указанный контекстом.

    HDC hdc // дескриптор контекста устройства

    hdc — идентифицирует контекст устройства. Если значение этого параметра равно NULL, функция создает контекст устройства в памяти, совместимый с текущим экраном приложения.

    В случае успеха возвращается дескриптор контекста устройства в памяти.

    В случае неудачи возвращается NULL .

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

    Функция CreateCompatibleDC может быть использована только с теми устройствами, которые поддерживают растровые операции. Приложение может узнать о поддержке этих операций, вызвав функцию GetDeviceCaps .

    В случае, если в контексте устройства отпала необходимость, вызовите функцию DeleteDC для его удаления.

    CreateCompatibleBitmap, DeleteDC, GetDeviceCaps .

    DeleteDC

    Функция DeleteDC удаляет заданный контекст устройства.

    HDC hdc // дескриптор контекста устройства

    hdc — идентифицирует контекст устройства.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Приложение не должно удалять контекст устройства, чей дескриптор был получен вызовом функции GetDC . Вместо этого приложение должно вызвать функцию ReleaseDC для освобождения контекста устройства.

    CreateDC, GetDC, ReleaseDC .

    EnumObjects

    Функция EnumObjects перечисляет перья или кисти, доступные для указанного контекста устройства. Эта функция вызывает определяемую приложением функцию обратного вызова один раз для каждого их доступных объектов, предоставляя данные, описывающие объект. EnumObjects продолжает вызывать функцию обратного вызова до тех пор, пока она не вернет нуль или не будут перечислены все доступные объекты.

    HDC hdc , // дескриптор контекста устройства

    int nObjectType , // идентификатор типа объекта

    GOBJENUMPROC lpObjectFunc , // указатель на функцию обратного вызова

    LPARAM lParam // указатель на предоставляемые приложением данные

    hdc — идентифицирует контекст устройства.

    nObjectType — определяет тип объекта. Может принимать значение OBJ_BRUSH или OBJ_PEN .

    lpObjectFunc — указатель на определяемую приложением функцию обратного вызова. Для дополнительной информации об этой функции смотрите описание функции EnumObjectsProc .

    lParam — указывает на определяемые приложением данные. Данные передаются в функцию обратного вызова вместе с информацией об объекте.

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

    GetDC

    Функция GetDC извлекает дескриптор контекста дисплея для клиентской области указанного окна. Контекст дисплея может быть использован в последующих функциях GDI для рисования в клиентской области окна.

    Эта функция извлекает общий, классовый или частный контекст устройства в зависимости от стиля класса, указанного для заданного окна. Для общих контекстов устройства GetDC присваивает контексту атрибуты по умолчанию каждый раз при извлечении контекста устройства. Для классовых и частных контекстов устройства GetDC оставляет ранее присвоенные атрибуты без изменений.

    HWND hWnd // дескриптор окна

    hWnd — идентифицирует окно, чей контекст устройства извлекается.

    В случае успеха возвращается контекст устройства для клиентской области указанного окна.

    В случае неудачи возвращается нуль.

    После рисования с общим контекстом устройства должна быть вызвана функция ReleaseDC для освобождения контекста устройства. Классовые и частные контексты устройства не должны освобождаться. Количество контекстов устройства ограничено только объемом доступной памяти.

    ResetDC

    Функция ResetDC обновляет данный контекст устройства плоттера или принтера, основываясь на информации в указанной структуре.

    HDC hdc , // дескриптор контекста устройства

    CONST DEVMODE * lpInitData // адрес структуры с информацией

    // о контексте устройства

    hdc — идентифицирует контекст устройства, подлежащий обновлению.

    lpInitData — указывает на структуру типа DEVMODE , содержащую информацию о новом контексте устройства.

    В случае успеха возвращается дескриптор оригинального исходного контекста устройства.

    В случае неудачи возвращается NULL .

    Приложение обычно использует функцию ResetDC при получении сообщения WM _ DEVMODECHANGE. ResetDC также может быть использована для изменения ориентации бумаги или полей бумаги при печати документа. Функция ResetDC не может быть использована для изменения имени драйвера устройства, имени устройства или выходного порта. Когда пользователь изменяет соединение с портом или имя устройства, приложение должно удалить исходный контекст устройства и создать новый контекст с новой информацией.

    DeviceCapabilities, DEVMODE, Escape .

    Стандартные диалоговые окна

    ChooseColor

    Функция ChooseColor создает стандартное диалоговое окно выбора цвета.

    LPCHOOSECOLOR lpcc // указатель на структуру с инициализирующими данными

    lpcc — указатель на структуру типа CHOOSECOLOR , которая содержит информацию, используемую для инициализации диалогового окна. Когда ChooseColor возвращает управление, структура содержит информацию о выбранном пользователем цвете.

    Если пользователь нажимает кнопку ОК в диалоговом окне, возвращается ненулевое значение. Член rgbResult структуру типа CHOOSECOLOR содержит RGB значение цвета, выбранного пользователем.

    Если пользователь нажал кнопку Cancel, или закрыл диалоговое окно, или произошла ошибка — возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию CommDlgExtendedError , которая может вернуть одно из следующих значений:

    Стандартное диалоговое окно выбора цвета не поддерживает палитр. Выбор цветов, предлагаемых диалоговым окном, ограничен системными цветами и прореженными (dithered) версиями тех цветов.

    Вы можете предоставить функцию-ловушку (hook procedure) CCHookProc для диалогового окна. Функция-ловушка может обрабатывать сообщения, отправляемые диалоговому окну. Для использования функции установите флаг CC_ENABLEHOOK в члене Flags структуры типа CHOOSECOLOR и укажите адрес функции в члене lpfnHook .

    CCHookProc, CHOOSECOLOR, CommDlgExtendedError .

    ChooseFont

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

    LPCHOOSEFONT lpcf // указатель на структуру с инициализирующими данными

    lpcf — указывает на структуру типа CHOOSEFONT , которая содержит информацию, используемую для инициализации диалогового окна. Когда ChooseFont возвращает управление, структура содержит информацию о выбранном пользователем шрифте.

    Если пользователь нажимает кнопку ОК в диалоговом окне, возвращается ненулевое значение. Члены структуры типа CHOOSEFONT показывают выбор пользователя.

    Если пользователь нажал кнопку Cancel, или закрыл диалоговое окно, или произошла ошибка — возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию CommDlgExtendedError , которая может вернуть одно из следующих значений:

    Вы можете предоставить функцию-ловушку (hook procedure) CCHookProc для диалогового окна. Функция-ловушка может обрабатывать сообщения, отправляемые диалоговому окну. Для использования функции установите флаг CC_ENABLEHOOK в члене Flags структуры типа CHOOSEFONT и укажите адрес функции в члене lpfnHook .

    Функция-ловушка может отправлять диалоговому окну сообщения WM _ CHOOSEFONT _ GETLOGFONT, WM _ CHOOSEFONT _ SETFLAGS и WM _ CHOOSEFONT _ SETLOGFONT для получения и установки текущих значений флагов в диалоговом окне.

    CFHookProc, CHOOSEFONT, CommDlgExtendedError, LOGFONT , WM_CHOOSEFONT_GETLOGFONT, WM_CHOOSEFONT_SETFLAGS, WM_CHOOSEFONT_SETLOGFONT.

    Иконки

    CopyIcon

    Функция CopyIcon копирует заданную иконку в текущий модуль из другого модуля.

    HICON hIcon // дескриптор копируемой иконки

    hIcon — идентифицирует копируемую иконку.

    В случае успеха возвращается дескриптор на полученную копию иконки.

    В случае неудачи возвращается NULL . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Функция CopyIcon позволяет приложению или динамически подключаемой библиотеке получить свой собственный дескриптор иконки, находящейся в другом модуле. Если другой модуль прекращает работу, приложение по-прежнему может использовать скопированную иконку.

    CopyCursor, DrawIcon, DrawIconEx.

    CreateIcon

    Функция CreateIcon создает иконку, которая имеет указанные размер, цвета и битовые шаблоны.

    HINSTANCE hInstance , // дескриптор экземпляра приложения

    int nWidth , // ширина иконки

    int nHeight , // высота иконки

    BYTE cPlanes , // число плоскостей в битовой маске исключающее ИЛИ

    BYTE cBitsPixel , // число бит на пиксель

    // в битовой маске исключающее ИЛИ

    CONST BYTE * lpbANDbits , // указатель на массив битовой маски И

    CONST BYTE * lpbXORbits // указатель на массив битовой маски ИЛИ

    hInstance — идентифицирует экземпляр модуля, создающего иконку.

    nWidth — определяет ширину иконки в пикселях.

    nHeight — определяет высоту иконки в пикселях.

    cPlanes — определяет число плоскостей в битовой маске исключающее ИЛИ иконки.

    cBitsPixel — определяет число бит на пиксель в битовой маске исключающее ИЛИ иконки.

    lpbANDbits — указатель на массив байт, который содержит битовые значения для маски И иконки. Такая битовая маска описывает монохромное изображение.

    lpbXORbits — указатель на массив байт, который содержит битовые значения для маски исключающее ИЛИ иконки. Такая битовая маска описывает зависимое от устройства цветное изображение.

    В случае успеха возвращается дескриптор иконки.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Значения параметров nWidth и nHeight должны указывать ширину и высоту, поддерживаемые текущим драйвером дисплея, потому что система не может создать иконки других размеров. Для определения того, какие ширина и высота поддерживаются драйвером дисплея, вызовите функцию GetSystemMetrics , указав значения SM _ CXICON и SM _ CYICON .

    CreateIcon применяет следующую таблицу истинности для битовых масок.

    Битовая маска И

    Битовая маска исключающее ИЛИ

    Обратный цвет экрана.

    CreateIconFromResource

    Функция CreateIconFromResource создает иконку или курсор из битов ресурса, описывающих иконку.

    PBYTE presbits , // указатель на биты ресурса

    DWORD dwResSize , // число бит в буфере

    BOOL fIcon , // флаг иконки или курсора

    DWORD dwVer // версия формата Windows

    presbits — указывает на буфер, содержащий биты ресурса иконки или курсора. Эти биты обычно загружаются вызовами функций LookupIconIdFromDirectory (в Windows 95 вы также можете использовать функцию LookupIconIdFromDirectoryEx ) и LoadResource .

    dwResSize — определяет размер, в байтах, набора битов, на который указывает параметр presbits .

    fIcon — определяет, будет ли создаваться иконка или курсор. Если значение этого параметра равно TRUE, создается иконка. Иначе создается курсор.

    dwVer — определяет номер версии формата иконки или курсора для битов ресурса, на которые указывает параметр presbits . Параметр может принимать одно из следующих значений:

    Все Win 32 приложения должны использовать для иконок и курсоров формат Windows 3. x .

    В случае успеха возвращается дескриптор иконки или курсора.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Функции CreateIconFromResource, CreateIconIndirect, GetIconInfo и LookupIconIdFromDirectory (в Windows 95 также функции CreateIconFromResourceEx и LookupIconIdFromDirectoryEx ) позволяют приложениям оболочки и браузерам иконок проверять и использовать ресурсы всей системы.

    CreateIconFromResourceEx, CreateIconIndirect, GetIconInfo, LoadResource, LookupIconIdFromDirectory, LookupIconIdFromDirectoryEx .

    CreateIconFromResourceEx

    Функция CreateIconFromResourceEx создает иконку или курсор из битов ресурса, описывающих иконку.

    PBYTE pbIconBits , // указатель на биты ресурса

    DWORD cbIconBits , // число бит в буфере

    BOOL fIcon , // флаг иконки или курсора

    DWORD dwVersion , // версия формата Windows

    int cxDesired , // желаемая ширина иконки или курсора

    int cyDesired , // желаемая высота иконки или курсора

    pbIconBits — указывает на буфер, содержащий биты ресурса иконки или курсора. Эти биты обычно загружаются вызовами функций LookupIconIdFromDirectory (в Windows 95 вы также можете использовать функцию LookupIconIdFromDirectoryEx ) и LoadResource .

    cbIconBits — определяет размер, в байтах, набора битов, на который указывает параметр pbIconBits .

    fIcon — определяет, будет ли создаваться иконка или курсор. Если значение этого параметра равно TRUE, создается иконка. Иначе создается курсор.

    dwVersion — определяет номер версии формата иконки или курсора для битов ресурса, на которые указывает параметр pbIconBits . Параметр может принимать одно из следующих значений:

    Все Win 32 приложения должны использовать для иконок и курсоров формат Windows 3. x .

    cxDesired — определяет желаемую ширину иконки или курсора в пикселях. Если значение этого параметра равно нулю, функция использует значения метрики системы SM _ CXICON или SM _ CXCURSOR для установки ширины.

    cyDesired — определяет желаемую высоту иконки или курсора в пикселях. Если значение этого параметра равно нулю, функция использует значения метрики системы SM _ CXICON или SM _ CXCURSOR для установки высоты.

    uFlags — определяет комбинацию из следующих значений:

    LR _ DEFAULTCOLOR

    Используется цветовой формат по умолчанию.

    LR _ MONOCHROME

    Создается монохромная иконка или курсор.

    В случае успеха возвращается дескриптор иконки или курсора.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Функции CreateIconFromResourceEx, CreateIconFromResource , CreateIconIndirect, GetIconInfo и LookupIconIdFromDirectoryEx позволяют приложениям оболочки и браузерам иконок проверять и использовать ресурсы всей системы.

    BITMAPINFOHEADER, CreateIconFromResource, CreateIconIndirect, GetIconInfo, LoadResource, LookupIconIdFromDirectoryEx .

    CreateIconIndirect

    Функция CreateIconIndirect создает иконку или курсор по информации из структуры типа ICONINFO .

    PICONINFO piconinfo // указатель на структуру с

    // информацией об иконке

    piconinfo — указывает на структуру типа ICONINFO , которую функция использует для создания иконки или курсора.

    В случае успеха возвращается дескриптор созданной иконки или курсора.

    В случае неудачи возвращается NULL . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Система копирует битовые образы в структуру типа ICONINFO перед созданием иконки или курсора. Приложение должно продолжать управлять исходными битовыми образами и удалить их при отсутствии в них дальнейшей необходимости.

    Когда вы закончили использовать иконку, вызовите функцию DestroyIcon .

    GetIconInfo

    Функция GetIconInfo извлекает информацию об указанной иконке или курсоре.

    HICON hIcon , дескриптор иконки

    PICONINFO piconinfo // адрес структуры иконки

    hIcon — идентифицирует иконку или курсор. Для извлечения информации о стандартной иконке или курсоре, укажите одно из следующих значений:

    Курсор в виде буквы » I «.

    Курсор «большие песочные часы».

    Курсор «стрелка вверх».

    Только Windows NT : четырехконечная стрелка

    Только Windows NT : пустая иконка.

    Курсор изменения размера. Ориентирован с северо-запада на юго-восток.

    Курсор изменения размера. Ориентирован с северо-востока на юго-запад.

    Горизонтальный курсор изменения размера.

    Вертикальный курсор изменения размера.

    Курсор изменения всех размеров. То же, что и IDC _ SIZE.

    Перечеркнутый наискосок круг.

    IDC _ APPSTARTING

    Курсор «маленькие песочные часы со стрелкой».

    IDI _ APPLICATION

    Иконка приложения по умолчанию.

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

    IDI _ EXCLAMATION

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

    Иконка, имеющая форму руки (используется в серьезных предупредительных сообщениях).

    Вопросительный знак (используется в вопросительных сообщениях).

    piconinfo — указывает на структуру типа ICONINFO . Функция заполняет члены структуры.

    В случае успеха возвращается ненулевое значение, и функция заполняет члены структуры типа ICONINFO .

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    GetIconInfo создает битовые изображения для членов hbmMask и hbmColor структуры типа ICONINFO . Вызывающее приложение должно управлять этими изображениями и удалять их, когда в них отпадает необходимость.

    CreateIcon, CreateIconFromResource, CreateIconIndirect, DestroyIcon, DrawIcon, DrawIconEx, ICONINFO, LoadIcon, LookupIconIdFromDirectory .

    Пространство координат и преобразования

    ClientToScreen

    Функция ClientToScreen преобразует клиентские координаты указанной точки в экранные координаты.

    HWND hWnd , // дескриптор окна для исходных координат

    LPPOINT lpPoint // указатель на структуру, содержащую

    hWnd — идентифицирует окно, чья клиентская область используется для преобразования.

    lpPoint — указывает на структуру типа POINT , которая содержит преобразуемые координаты. В случае успеха в эту структуру копируются новые экранные координаты.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Функция ClientToScreen замещает клиентские координаты в структуре типа POINT экранными координатами. Экранные координаты относительны верхнего левого угла экрана.

    MapWindowPoints, POINT, ScreenToClient .

    CombineTransform

    Функция CombineTransform объединяет два преобразования » мировое пространство — пространство страницы » (world-space to page-space transformations).

    LPXFORM lpxformResult , // указатель на комбинированное преобразование

    CONST XFORM * lpxform 1 , // указатель на первое преобразование

    CONST XFORM * lpxform 2 // указатель на второе преобразование

    lpxformResult — указывает на структуру типа XFORM , которая получает комбинированное преобразование.

    lpxform 1 — указывает на структуру типа XFORM , которая идентифицирует первое преобразование.

    lpxform 2 — указывает на структуру типа XFORM , которая идентифицирует второе преобразование.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Применение комбинированного преобразования аналогично применению сначала первого преобразования, затем второго.

    Три преобразования не обязательно должны быть раздельными. Например, lpxform 1 может указывать на ту же структуру типа XFORM , что и lpxformResult .

    GetWorldTransform, ModifyWorldTransform, SetWorldTransform, XFORM .

    GetGraphicsMode

    Функция GetGraphicsMode извлекает текущий графический режим для указанного контекста устройства.

    HDC hdc // дескриптор контекста устройства

    hdc — идентифицирует контекст устройства.

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

    GM _ COMPATIBLE

    Текущий графический режим является совместимым с Windows 3.1 режимом. В этом графическом режиме приложение не может установить или изменить мировое преобразование ( world transformation ) в указанном контексте устройства. Совместимый режим является графическим режимом по умолчанию.

    Windows NT : Текущий графический режим является расширенным режимом, разрешающим мировые преобразования. В этом графическом режиме приложение может установить или изменить мировое преобразование в указанном контексте устройства. Windows 95: Значение GM _ ADVANCED не поддерживается.

    В противном случае, возвращается нуль.

    Приложение может установить графический режим для контекста устройства, вызвав функцию SetGraphicsMode .

    Буфер обмена

    ChangeClipboardChain

    Функция ChangeClipboardChain удаляет указанное окно из цепочки просмотра буфера обмена.

    hWndRemove — дескриптор окна, которое будет удалено из цепочки. Дескриптор должен был быть передан в функцию SetClipboardViewer.

    hWndNewNext — дескриптор окна, которое следует за окном, определяемым значением параметра hWndRemove, в цепочке просмотра буфера обмена. (Это дескриптор, возвращенный функцией SetClipboardViewer , если только последовательность не была изменена в ответ на сообщение WM_CHANGECBCHAIN .)

    Возвращаемое значение показывает результат передачи сообщения WM_CHANGECBCHAIN окну в цепочке просмотра буфера обмена. Поскольку окно в цепочке типично возвращает FALSE, когда оно обрабатывает сообщение WM_CHANGECBCHAIN, типично возвращаемое функцией ChangeClipboardChain значение — тоже FALSE. Если в цепочке просмотра одно окно — типично возвращается TRUE.

    Окно, идентифицируемое значением параметра hWndNewNext, заменяет окно, идентифицируемое значением параметра hWndRemove , в цепочке просмотра. Функция SetClipboardViewer отправляет сообщение WM_CHANGECBCHAIN первому окну в цепочке просмотра буфера обмена.

    Windows NT/2000/XP: Включена в Windows NT 3.1 и выше.

    Windows 95/98/Me: Включена в Windows 95 и выше.

    Заголовок: Объявлена в Winuser.h ; подключатьWindows.h.

    Библиотека: Используйте User32.lib .

    CloseClipboard

    Функция CloseClipboard закрывает буфер обмена.

    BOOL CloseClipboard (VOID)

    Функция не имеет параметров.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Когда окно закончило проверку или изменение содержимого буфера обмена, закройте его, вызвав CloseClipboard . Это позволит другим окнам получить доступ к буферу обмена.

    Не помещайте объект в буфер обмена после вызова CloseClipboard .

    CountClipboardFormats

    Функция CountClipboardFormats извлекает число различных форматов данных в буфере обмена в настоящий момент

    int CountClipboardFormats ( VOID )

    Функция не имеет параметров.

    В случае успеха возвращается количество различных форматов данных в буфере обмена в настоящий момент.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    GetClipboardFormatName

    Функция GetClipboardFormatName извлекает из буфера обмена имя указанного зарегистрированного формата. Функция копирует имя в указанный буфер.

    UINT format , // извлекаемый формат буфера обмена

    LPTSTR lpszFormatName , // адрес буфера для имени

    int cchMaxCount // длина строки имени в символах

    format — определяет тип извлекаемого формата. Значение этого параметра не должно указывать на один из ранее предопределенных форматов.

    lpszFormatName — указывает на буфер, который получает имя формата.

    cchMaxCount — определяет максимальную длину строки, скопированной в буфер, в символах. Если имя превышает этот предел, лишние символы строки отбрасываются.

    В случае успеха возвращается длина скопированной в буфер строки в символах.

    В случае неудачи возвращается нуль, указывая, что затребованный формат не существует или является ранее предопределенным форматом. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    GetClipboardOwner

    Функция GetClipboardOwner извлекает дескриптор окна, являющегося текущим владельцем буфера обмена.

    HWND GetClipboardOwner ( VOID )

    Функция не имеет параметров.

    В случае успеха возвращается дескриптор окна, которое владеет буфером обмена.

    В случае неудачи возвращается NULL . Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Буфер обмена может содержать данные, даже если им в настоящий момент никто не владеет.

    В общем, владельцем буфера обмена является окно, которое последним поместило данные в него. Функция EmptyClipboard назначает владение буфером обмена.

    Время

    CompareFileTime

    Функция CompareFileTime сравнивает два 64-битных файловых времени.

    CONST FILETIME * lpFileTime1 , // pointer to first file time

    CONST FILETIME * lpFileTime2 // pointer to second file time

    lpFileTime 1 — указывает на структуру типа FILETIME , которая определяет первое 64-битное файловое время.

    lpFileTime 2 — указывает на структуру типа FILETIME , которая определяет второе 64-битное файловое время.

    В случае успеха возвращается одно из следующих значений:

    Первое время меньше второго.

    Первое время больше второго.

    GetFileTime

    Функция GetFileTime извлекает дату и время файла, когда он был создан, когда к нему последний раз обращались, и когда он последний раз был изменен.

    HANDLE hFile , // идентифицирует файл

    LPFILETIME lpCreationTime , // адрес времени создания файла

    LPFILETIME lpLastAccessTime , // адрес времени последнего доступа

    LPFILETIME lpLastWriteTime // адрес времени последней записи в файл

    hFile — идентифицирует файл, для которого извлекаются дата и время. Файловый дескриптор должен быть создан с доступом GENERIC_READ к файлу.

    lpCreationTime — указывает на структуру типа FILETIME , которая получает дату и время создания файла. Значение этого параметра может быть равно NULL, если приложению не требуется эта информация.

    lpLastAccessTime — указывает на структуру типа FILETIME , которая получает дату и время последнего доступа к файлу. Время последнего доступа включает в себя время, когда в последний раз: в файл записывалась информация, читалась информация из файла, или, в случае исполняемых файлов, файл запускался на исполнение. Значение этого параметра может быть равно NULL, если приложению не требуется эта информация.

    lpLastWriteTime — указывает на структуру типа FILETIME , которая получает дату и время последней записи в файл. Значение этого параметра может быть равно NULL, если приложению не требуется эта информация.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Файловые системы FAT и NTFS поддерживают время создания файла, время последнего доступа к файлу и время последней записи в файл.

    Windows 95: Точность значения времени для файла в файловой системе FAT — 2 секунды. Точность значения времени для файлов в других файловых системах, например, на сетевых дисках, зависит от файловой системы, но также может быть ограничена удаленным устройством.

    FILETIME, GetFileSize, GetFileType, SetFileTime .

    Прямоугольники

    CopyRect

    Функция CopyRect копирует координаты одного прямоугольника в другой.

    LPRECT lprcDst , // указатель на структуру для прямоугольника

    CONST RECT * lprcSrc // указатель на структуру для исходного

    lprcDst — указывает на структуру RECT , которая получает логические координаты исходного прямоугольника.

    lprcSrc — указывает на структуру RECT , чьи координаты копируются.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    RECT, SetRect, SetRectEmpty .

    Диалоговые окна

    CreateDialog

    Макрос CreateDialog создает немодальное диалоговое окно из ресурса — шаблона диалогового окна. Макрос CreateDialog использует функцию CreateDialogParam .

    HINSTANCE hInstance , // дескриптор экземпляра приложения

    LPCTSTR lpTemplate , // идентифицирует имя шаблона диалогового окна

    HWND hWndParent , // дескриптор окна — владельца

    DLGPROC lpDialogFunc // указатель на оконную процедуру

    hInstance — идентифицирует экземпляр модуля, чей исполняемый файл содержит шаблон диалогового окна.

    lpTemplate — идентифицирует шаблон диалогового окна. Этот параметр является либо указателем на завершающуюся нулем строку, определяющей имя шаблона диалогового окна, либо целым значением, которое определяет идентификатор ресурса шаблона диалогового окна. Если этот параметр является идентификатором ресурса, его старшее слово должно быть равно нулю, а младшее слово должно содержать идентификатор. Вы можете использовать макрос MAKEINTRESOURCE для создания этого значения.

    hWndParent — идентифицирует окно, владеющее диалоговым окном.

    lpDialogFunc — указатель на оконную процедуру диалогового окна. Для дополнительной информации об этой процедуре смотрите DialogProc .

    В случае успеха возвращается дескриптор диалогового окна.

    В случае неудачи возвращается NULL .

    Функция CreateDialog использует функцию CreateWindowEx для создания диалогового окна. Затем CreateDialog отправляет сообщение WM _ INITDIALOG (а также сообщение WM _ SETFONT, если шаблон задает стиль DS _ SETFONT ) оконной процедуре диалогового окна. Функция отображает диалоговое окно, в случае если шаблон задает стиль WS _ VISIBLE. В заключение, CreateDialog возвращает дескриптор диалогового окна.

    После того, как функция CreateDialog вернет управление, приложение отображает диалоговое окно (если оно еще не отображено), используя функцию ShowWindow . Приложение разрушает диалоговое окно, используя функцию DestroyWindow .

    Windows 95: Система поддерживает максимум 16384 дескрипторов окон.

    CreateDialogIndirect, CreateDialogIndirectParam, CreateDialogParam, CreateWindowEx, DestroyWindow, DialogBox, DialogProc, ShowWindow , WM_INITDIALOG, WM_SETFONT.

    CreateDialogIndirect

    Макрос CreateDialogIndirect создает в памяти немодальное диалоговое окно из ресурса — шаблона диалогового окна. Макрос CreateDialogIndirect использует функцию CreateDialogIndirectParam .

    HINSTANCE hInstance , // дескриптор экземпляра приложения

    LPCDLGTEMPLATE lpTemplate , // указатель на шаблон диалогового окна

    HWND hWndParent , // дескриптор окна-владельца

    DLGPROC lpDialogFunc // указатель на оконную процедуру

    hInstance — идентифицирует экземпляр модуля, который создает диалоговое окно.

    lpTemplate — указатель на глобальный объект памяти, содержащий шаблон, который CreateDialogIndirect использует для создания диалогового окна. Шаблон диалогового окна состоит из заголовка, который описывает диалоговое окно, за которым следует один или более дополнительных блоков данных, которые описывают каждый из элементов управления диалогового окна. Шаблон может использовать стандартный или расширенный формат.

    В стандартном шаблоне заголовок представляет собой структуру DLGTEMPLATE , за которой следуют массивы переменной длины. Данные для каждого из элементов управления состоят из структуры DLGITEMTEMPLATE , за которой следуют массивы переменной длины.

    В расширенном шаблоне диалогового окна заголовок использует формат DLGTEMPLATEEX и определения элементов управления используют формат DLGITEMTEMPLATEEX .

    hWndParent — идентифицирует окно, владеющее диалоговым окном.

    lpDialogFunc — указатель на оконную процедуру диалогового окна. Для дополнительной информации об этой процедуре смотрите DialogProc .

    В случае успеха возвращается дескриптор диалогового окна.

    В случае неудачи возвращается NULL .

    Макрос CreateDialogIndirect использует функцию CreateWindowEx для создания диалогового окна. Затем CreateDialogIndirect отправляет сообщение WM _ INITDIALOG оконной процедуре диалогового окна. Если шаблон задает стиль DS _ SETFONT, функция также отправляет сообщение WM _ SETFONT оконной процедуре диалогового окна. Функция отображает диалоговое окно, в случае если шаблон задает стиль WS _ VISIBLE. В заключение, CreateDialogIndirect возвращает дескриптор диалогового окна.

    После того, как функция CreateDialogIndirect вернет управление, приложение отображает диалоговое окно (если оно еще не отображено), используя функцию ShowWindow . Приложение разрушает диалоговое окно, используя функцию DestroyWindow .

    В стандартном шаблоне диалогового окна структура DLGTEMPLATE и каждая из структур DLGITEMTEMPLATE должны быть выровнены по DWORD . Массив данных, находящийся после структуры DLGITEMTEMPLATE , также должен быть выровнен по DWORD . Все остальные массивы переменной длины в шаблоне должны быть выровнены по WORD .

    В расширенном шаблоне диалогового окна заголовок DLGTEMPLATEEX и каждое из определений элементов управления DLGITEMTEMPLATEEX должны быть выровнены по DWORD . Массив данных, находящийся после структуры DLGITEMTEMPLATE , также должен быть выровнен по DWORD . Все остальные массивы переменной длины в шаблоне должны быть выровнены по WORD .

    Все строки символов в шаблоне диалогового окна, такие как заголовки для диалогового окна и кнопок, должны быть строками UnicodE. Для написания кода, который работает как в Windows NT, так и в Windows 95, используйте функцию MultiByteToWideChar для создания строк UnicodE.

    Windows 95: Система поддерживает максимум 16384 дескрипторов окон.

    CreateDialog, CreateDialogIndirectParam, CreateDialogParam, CreateWindowEx, DestroyWindow, DialogProc, DLGITEMTEMPLATE, DLGITEMTEMPLATEEX, DLGTEMPLATE, DLGTEMPLATEEX, MultiByteToWideChar, ShowWindow , WM_INITDIALOG, WM_SETFONT.

    CreateDialogIndirectParam

    Функция CreateDialogIndirectParam создает в памяти немодальное диалоговое окно из ресурса — шаблона диалогового окна. Перед отображением диалогового окна функция передает определяемое приложением значение в оконную процедуру диалогового окна в качестве параметра lParam сообщения WM _ INITDIALOG . Приложение может использовать это значение для инициализации элементов управления диалогового окна.

    HINSTANCE hInstance , // дескриптор экземпляра приложения

    LPCDLGTEMPLATE lpTemplate , // указатель на шаблон диалогового окна

    HWND hWndParent , // дескриптор окна-владельца

    DLGPROC lpDialogFunc , // указатель на оконную процедуру

    LPARAM lParamInit // инициализирующее значение

    hInstance — идентифицирует экземпляр модуля, который создает диалоговое окно.

    lpTemplate — указатель на глобальный объект памяти, содержащий шаблон, который CreateDialogIndirectParam использует для создания диалогового окна. Шаблон диалогового окна состоит из заголовка, который описывает диалоговое окно, за которым следует один или более дополнительных блоков данных, которые описывают каждый из элементов управления диалогового окна. Шаблон может использовать стандартный или расширенный формат.

    В стандартном шаблоне заголовок представляет собой структуру DLGTEMPLATE , за которой следуют массивы переменной длины. Данные для каждого из элементов управления состоят из структуры DLGITEMTEMPLATE , за которой следуют массивы переменной длины.

    В расширенном шаблоне диалогового окна заголовок использует формат DLGTEMPLATEEX и определения элементов управления используют формат DLGITEMTEMPLATEEX .

    hWndParent — идентифицирует окно, владеющее диалоговым окном.

    lpDialogFunc — указатель на оконную процедуру диалогового окна. Для дополнительной информации об этой процедуре смотрите DialogProc .

    lParamInit — определяет значение, передаваемое в оконную процедуру диалогового окна как параметр lParam сообщения WM _ INITDIALOG .

    В случае успеха возвращается дескриптор диалогового окна.

    В случае неудачи возвращается NULL .

    Функция CreateDialogIndirectParam использует функцию CreateWindowEx для создания диалогового окна. Затем CreateDialogIndirectParam отправляет сообщение WM _ INITDIALOG оконной процедуре диалогового окна. Если шаблон задает стиль DS _ SETFONT, функция также отправляет сообщение WM _ SETFONT оконной процедуре диалогового окна. Функция отображает диалоговое окно, в случае если шаблон задает стиль WS _ VISIBLE. В заключение, CreateDialogIndirectParam возвращает дескриптор диалогового окна.

    После того, как функция CreateDialogIndirectParam вернет управление, приложение отображает диалоговое окно (если оно еще не отображено), используя функцию ShowWindow . Приложение разрушает диалоговое окно, используя функцию DestroyWindow .

    В стандартном шаблоне диалогового окна структура DLGTEMPLATE и каждая из структур DLGITEMTEMPLATE должны быть выровнены по DWORD . Массив данных, находящийся после структуры DLGITEMTEMPLATE , также должен быть выровнен по DWORD . Все остальные массивы переменной длины в шаблоне должны быть выровнены по WORD .

    В расширенном шаблоне диалогового окна заголовок DLGTEMPLATEEX и каждое из определений элементов управления DLGITEMTEMPLATEEX должны быть выровнены по DWORD . Массив данных, находящийся после структуры DLGITEMTEMPLATE , также должен быть выровнен по DWORD . Все остальные массивы переменной длины в шаблоне должны быть выровнены по WORD .

    Все строки символов в шаблоне диалогового окна, такие как заголовки для диалогового окна и кнопок, должны быть строками UnicodE. Для написания кода, который работает как в Windows NT, так и в Windows 95, используйте функцию MultiByteToWideChar для создания строк UnicodE.

    Windows 95: Система поддерживает максимум 16384 дескрипторов окон.

    CreateDialog, CreateDialogIndirect, CreateDialogParam, CreateWindowEx, DestroyWindow, DialogProc, DLGITEMTEMPLATE, DLGITEMTEMPLATEEX, DLGTEMPLATE, DLGTEMPLATEEX, MultiByteToWideChar, ShowWindow , WM_INITDIALOG, WM_SETFONT.

    DefDlgProc

    Функция DefDlgProc выполняет обработку сообщений по умолчанию для оконной процедуры, принадлежащей определяемому приложением классу диалогового окна.

    HWND hDlg , // дескриптор диалогового окна

    UINT Msg , // сообщение

    WPARAM wParam , // первый параметр сообщения

    LPARAM lParam // второй параметр сообщения

    hDlg — идентифицирует диалоговое окно.

    uMsg — определяет сообщение.

    wParam — определяет дополнительную информацию, зависящую от сообщения.

    lParam — определяет дополнительную информацию, зависящую от сообщения.

    Возвращаемое значение определяет результат обработки сообщения и зависит от переданного сообщения.

    Функция DefDlgProc является оконной процедурой для предопределенного класса диалогового окна. Эта процедура обеспечивает внутреннюю обработку для диалогового окна, перенаправляя сообщения оконной процедуре диалогового окна и производя обработку по умолчанию для сообщения, при обработке которого оконная процедура возвращает FALSE. Приложения, которые создают диалоговые окна на основе своих собственных классов диалоговых окон, часто используют DefDlgProc вместо DefWindowProc для обработки сообщений по умолчанию.

    Приложения создают собственные классы диалоговых окон, заполняя структуру типа WNDCLASS соответствующей информацией и регистрируя класс с помощью функции RegisterClass . Некоторые приложения заполняют структуру, используя функцию GetClassInfo , указывая имя предопределенного диалогового окна. В таких случаях, приложения модифицируют, по меньшей мере, член lpszClassName перед регистрацией. И во всех случаях, член cbWndExtra структуры типа WNDCLASS для создаваемых приложением классов диалоговых окон, должен быть установлен, по меньшей мере в DLGWINDOWEXTRA .

    Функция DefDlgProc не должна вызываться оконной процедурой диалогового окна — это приведет к рекурсивным вызовам этих двух функций.

    DefWindowProc, GetClassInfo, RegisterClass, WNDCLASS .

    GetDialogBaseUnits

    Функция GetDialogBaseUnits возвращает базовые координаты диалогового окна, используемые Windows для создания диалоговых окон. И Windows, и приложения используют эти координаты для преобразования ширины и высоты диалоговых окон и находящихся в них элементов управления из оконных координат, указанных в шаблонах диалоговых окон, в пиксели, и обратно.

    LONG GetDialogBaseUnits ( VOID )

    Функция не имеет параметров.

    Возвращается 32-битное значение, содержащее базовые координаты диалогового окна. Младшее слово возвращаемого значения содержит горизонтальные базовые координаты диалогового окна, старшее слово — вертикальные.

    Горизонтальные базовые координаты диалогового окна равны средней ширине, в пикселях, символов системного шрифта, вертикальные — средней высоте символов системного шрифта. К тому же, горизонтальная базовая координата равна четырем горизонтальным оконным координатам диалогового окна, вертикальная базовая координата — восьми вертикальным оконным координатам диалогового окна. Таким образом, преобразование оконных координат в пиксели происходит по формулам:

    пиксель X = (диалоговая_координата X * базовая_координата X ) / 4

    пиксель Y = (диалоговая_координата Y * базовая_координата Y ) / 8

    Аналогично происходит преобразование пикселей в оконные координаты:

    диалоговая_координата X = (пиксель X * 4) / базовая_координата X

    диалоговая_координата Y = (пиксель Y * 8) / базовая_координата Y

    GetDlgCtrlID

    Функция GetDlgCtrlID возвращает идентификатор заданного элемента управления.

    HWND hwndCtl // дескриптор элемента управления

    hwndCtl — идентифицирует элемент управления.

    В случае успеха возвращается идентификатор элемента управления.

    В случае неудачи возвращается NULL . Вызов функции также закончится неудачей при неверном значении параметра hwndCtl .

    GetDlgCtrlID также принимает в качестве параметров и дескрипторы дочерних окон, наравне с дескрипторами элементов управления в диалоговых окнах. Приложение устанавливает идентификатор для дочернего окна, присваивая значение идентификатора параметру hMenu при вызове функций CreateWindow или CreateWindowEx .

    Хотя функция GetDlgCtrlID может вернуть значение в случае, если параметр hwndCtl идентифицирует окно верхнего уровня, такие окна не могут иметь идентификаторов и, соответственно, не будет возвращено правильного значения.

    CreateWindow, CreateWindowEx, GetDlgItem .

    Мэйлслоты

    CreateMailslot

    Функция CreateMailslot создает мэйлслот с указанным именем и возвращает дескриптор, который мэйлслотовый сервер может использовать для выполнения операций над мэйлслотом. Мэйлслот локален относительно компьютера, который его создал. Если мэйлслот с указанным именем существует, то происходит ошибка.

    LPCTSTR lpName , // указатель на строку с именем мэйлслота

    DWORD nMaxMessageSize , // максимальный размер сообщения

    DWORD lReadTimeout , // миллисекунды до тайм — аута чтения

    LPSECURITY_ATTRIBUTES lpSecurityAttributes // указатель

    // на структуру безопасности

    lpName — указывает на завершающуюся нулем строку, определяющую имя мэйлслота. Строка должна иметь следующий вид:

    Поле name должно быть уникальным. Имя может включать множественные уровни псевдодиректорий, разделенных символами обратного слэша. Например, правильными именами являются \\.\ mailslot \ example_mailslot_name и \\.\mailslot\abc\def\ghi .

    nMaxMessageSize — определяет максимальный размер сообщения в байтах, которое может быть записано в мэйлслот. Для указания того, что сообщение может быть любого размера, установите значение этого параметра в нуль.

    lReadTimeout — определяет количество времени, в миллисекундах, которое операция чтения может ждать сообщения, записанного в мэйлслот, до наступления тайм-аута. Следующие величины имеют специальные значения:

    0 — функция возвращает управление немедленно, если в мэйлслоте отсутствует сообщение. (Система не трактует немедленное возвращение как ошибку.)

    MAILSLOT_WAIT_FOREVER — ждет до тех пор, пока не придет сообщение.

    Величина тайм-аута применяется ко всем последующим операциям чтения и всем унаследованным дескрипторам мэйлслота.

    lpSecurityAttributes — указывает на структуру типа SECURITY_ATTRIBUTES , которая определяет, может ли возвращаемый дескриптор мэйлслота наследоваться дочерними процессами. Если значение lpSecurityAttributes равно NULL, дескриптор не может быть унаследован.

    Windows NT : Член lpSecurityDescriptor структуры определяет дескриптор безопасности для нового мэйлслота. Если значение lpSecurityDescriptor равно NULL, мэйлслот получает дескриптор безопасности по умолчанию.

    Windows 95: Член lpSecurityDescriptor структуры игнорируется.

    В случае успеха возвращается дескриптор мэйлслота.

    В случае неудачи возвращается INVALID_HANDLE_VALUE. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Мэйлслот существует до тех пор, пока:

    Последний (возможно, унаследованный или дублированный) дескриптор не закрыт функцией CloseHandle .

    Процесс, владеющий последним (возможно, унаследованным или дублированным) дескриптором, существует.

    И Windows NT, и Windows 95 используют второй метод для разрушения мэйлслотов.

    Для записи сообщения в мэйлслот процесс использует функцию CreateFile , указав имя мэйлслота в одном из следующих форматов:

    Получает клиентский дескриптор локального мэйлслота.

    Получает клиентский дескриптор удаленного мэйлслота.

    Получает клиентский дескриптор всех мэйлслотов с указанным именем в указанном домене.

    Получает клиентский дескриптор всех мэйлслотов с указанным именем в первичном домене системы.

    Если CreateFile определяет домен или использует звездочку для указания первичного домена системы, приложение не может записать в мэйлслот более 400 символов за раз. Если приложение попытается сделать это, вызов WriteFile завершится неудачей и GetLastError вернет ERROR_BAD_NETPATH .

    Приложение должно указать флаг FILE_SHARE_READ при использовании CreateFile для получения клиентского дескриптора мэйлслота.

    CloseHandle, CreateFile, GetMailslotInfo, SECURITY_ATTRIBUTES, SetMailslotInfo, WriteFile .

    GetMailslotInfo

    Функция GetMailslotInfo извлекает информацию об указанном мэйлслоте.

    HANDLE hMailslot , // дескриптор мэйлслота

    LPDWORD lpMaxMessageSize , // адрес максимального размера сообщения

    LPDWORD lpNextSize , // адрес размера следующего сообщения

    LPDWORD lpMessageCount , // адрес количества сообщений

    LPDWORD lpReadTimeout // адрес тайм — аута чтения

    hMailslot — идентифицирует мэйлслот. Этот дескриптор должна создать функция CreateMailslot .

    lpMaxMessageSize — когда функция возвращает управление, указывает на буфер, определяющий максимальный размер письма в байтах, допустимый для этого мэйлслота. Эта величина должна быть больше или равна значению параметра cbMaxMsg функции CreateMailslot , создавшей мэйлслот. Значение параметра может быть равно нулю.

    lpNextSize — когда функция возвращает управление, указывает на буфер, определяющий размер следующего письма в байтах. Следующая величина имеет специальное значение:

    MAILSLOT_NO_MESSAGE — следующее сообщение отсутствует.

    Значение параметра может быть равно нулю.

    lpMessageCount — когда функция возвращает управление, указывает на буфер, определяющий количество сообщений, ждущих прочтения. Значение параметра может быть равно нулю.

    lReadTimeout — указывает на буфер, определяющий количество времени, в миллисекундах, которое операция чтения может ждать сообщения, записанного в мэйлслот, до наступления тайм-аута. Параметр заполняется, когда функция возвращает управление. Значение параметра может быть равно нулю.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    SetMailslotInfo

    Функция SetMailslotInfo устанавливает величину тайм-аута, используемую указанным мэйлслотом для операции чтения.

    HANDLE hMailslot , // дескриптор мэйлслота

    DWORD lReadTimeout // тайм — аут чтения

    hMailslot — идентифицирует мэйлслот. Этот дескриптор должна создать функция CreateMailslot .

    lReadTimeout — определяет количество времени, в миллисекундах, которое операция чтения может ждать сообщения, записанного в мэйлслот, до наступления тайм-аута. Следующие величины имеют специальные значения:

    0 — функция возвращает управление немедленно, если в мэйлслоте отсутствует сообщение. (Система не трактует немедленное возвращение как ошибку.)

    MAILSLOT_WAIT_FOREVER — ждет до тех пор, пока не придет сообщение.

    Величина тайм-аута применяется ко всем последующим операциям чтения и всем унаследованным дескрипторам мэйлслота.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Начальное значение тайм-аута, используемое мэйлслотом для операции чтения, обычно устанавливается в функции CreateMailslot при создании мэйлслота.

    Справка

    SetMenuContextHelpId

    Функция SetMenuContextHelpId связывает идентификатор контекстной справки с меню. Все пункты меню разделяют этот идентификатор. Нет возможности назначить идентификатор контекстной справки индивидуальному пункту меню.

    hmenu — дескриптор меню, с которым связывается идентификатор контекстной справки.

    dwContextHelpId — идентификатор контекстной справки.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Таймеры

    KillTimer

    Функция KillTimer разрушает указанный таймер.

    HWND hWnd , // дескриптор окна, установившего таймер

    UINT uIDEvent // идентификатор таймера

    hWnd — идентифицирует окно, связанное с указанным таймером. Значение должно совпадать со значением параметра hWnd , переданным функции SetTimer , создавшей таймер.

    uIDEvent — указывает таймер, который должен быть разрушен. Если дескриптор окна, переданный в функцию SetTimer , не равен NULL, то значение uIDEvent при вызове KillTimer должно совпадать со значением uIDEvent , переданного в SetTimer . Если приложение вызывало SetTimer с hWnd , установленным в NULL, то значение этого параметра должно быть идентификатором таймера, возвращенным SetTimer .

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Функция KillTimer не удаляет сообщения WM_TIMER, уже помещенные в очередь сообщений.

    QueryPerformanceCounter

    Функция QueryPerformanceCounter извлекает текущее значение счетчика производительности, если таковой существует.

    LARGE_INTEGER *lpPerformanceCount // адрес текущего значения счетчика

    lpPerformanceCount — указывает на переменную, которую функция устанавливает в текущее значение счетчика. Если установленное аппаратное обеспечение не поддерживает счетчик производительности, этот параметр может быть установлен в нуль.

    В случае, если установленное аппаратное обеспечение поддерживает счетчик производительности, возвращается ненулевое значение.

    Если установленное аппаратное обеспечение не поддерживает счетчик производительности, возвращается нуль.

    QueryPerformanceFrequency

    Функция QueryPerformanceFrequency извлекает частоту счетчика производительности, если таковой существует.

    LARGE_INTEGER *lpFrequency // адрес текущей частоты

    lpFrequency — указывает на переменную, значение которой, в отсчетах в секунду, функция устанавливает в текущую частоту счетчика производительности. Если установленное аппаратное обеспечение не поддерживает счетчик производительности, значение этого параметра может быть равно нулю.

    В случае, если установленное аппаратное обеспечение поддерживает счетчик производительности, возвращается ненулевое значение.

    В случае, если установленное аппаратное обеспечение не поддерживает счетчик производительности, возвращается нуль.

    SetTimer

    Функция SetTimer создает таймер с указанным интервалом срабатывания.

    HWND hWnd , // дескриптор окна для сообщений таймера

    UINT nIDEvent , // идентификатор таймера

    UINT uElapse , // интервал срабатывания таймера

    TIMERPROC lpTimerFunc // адрес процедуры таймера

    hWnd — идентифицирует окно, связанное с таймером. Окном должен владеть вызывающий поток. Если значение этого параметра равно NULL, с таймером не связывается никакого окна и параметр nIDEvent игнорируется.

    nIDEvent — определяет ненулевой идентификатор таймера. Если значение параметра hWnd равно NULL, этот параметр игнорируется.

    uElapse — определяет интервал срабатывания в миллисекундах.

    lpTimerFunc — указывает на функцию, уведомляемую об истечении заданного интервала. Для дополнительной информации смотрите описание функции TimerProc .

    Если значение lpTimerFunc равно NULL, система отправляет сообщение WM_TIMER в очередь собщений приложения. Значение члена hwnd структуры сообщения типа MSG содержит значение параметра hWnd .

    В случае успеха возвращается целочисленный идентификатор нового таймера. Приложение может передавать этот идентификатор в функцию KillTimer для разрушения таймера.

    Если не удалось создать новый таймер, возвращается нуль.

    Приложение может обрабатывать сообщение WM_TIMER в оконной процедуре приложения, с соответствующим включением в ее исходный код оператора case, либо указывая при создании таймера функцию обратного вызова TimerProc . Когда вы указываете функцию обратного вызова, функция DispatchMessage просто вызывает ее вместо оконной процедуры.

    Значение параметра wParam сообщения WM_TIMER содержит значение параметра nIDEvent .

    DispatchMessage, KillTimer, MSG, TimerProc , WM_TIMER.

    TimerProc

    Функция TimerProc является определяемой приложением функцией обратного вызова, которая обрабатывает сообщения WM_TIMER.

    VOID CALLBACK TimerProc (

    HWND hwnd , // дескриптор окна для сообщений таймера

    UINT uMsg , // сообщение WM_TIMER

    UINT idEvent , // идентификатор таймера

    DWORD dwTime // текущее системное время

    hwnd — идентифицирует окно, связанное с таймером.

    uMsg — определяет сообщение WM_TIMER.

    idEvent — определяет идентификатор таймера.

    dwTime — задает число миллисекунд, истекших с момента старта Windows. Это значение возвращается функцией GetTickCount .

    Функция не возвращает значения.

    TimerProc является «заполнителем» для имени определяемой приложением функции.

    GetTickCount, KillTimer, SetTimer , WM_TIMER.

    Сообщения

    WM_TIMER

    Сообщение WM_TIMER отправляется в очередь сообщений установившего таймер потока или соответствующей функции обратного вызова TimerProc по истечении интервала, заданного при установке таймера функцией SetTimer .

    tmprc = ( TIMERPROC *) lParam ; // адрес функции обратного вызова таймера

    wTimerID — значение wParam . Определяет идентификатор таймера.

    tmprc — значение lParam . Указывает на определяемую приложением функцию обратного вызова, адрес которой был передан при установке таймера функцией SetTimer . Если значение параметра tmprc не равно NULL, Windows передает сообщение WM_TIMER указанной функции обратного вызова вместо помещения сообщения в очередь сообщений потока.

    Приложение должно возвращать нуль, если оно обрабатывает это сообщение.

    Функция DispatchMessage передает сообщение в очередь сообщений потока, когда в ней нет других сообщений.

    DispatchMessage, SetTimer, TimerProc .

    Ввод с клавиатуры

    SetKeyboardState

    Функция SetKeyboardState копирует массив из 256 байт состояний клавиш в таблицу состояния ввода с клавиатуры вызывающего потока. Это та же самая таблица, к которой имеют доступ функции GetKeyboardState и GetKeyState . Изменения, сделанные в этой таблице, не влияют на ввод с клавиатуры для других потоков.

    LPBYTE lpKeyState // адрес массива с кодами виртуальных клавиш

    lpKeyState — указывает на 256-байтный массив, который содержит состояния клавиш клавиатуры.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Поскольку функция SetKeyboardState изменяет состояние ввода вызывающего потока, но не глобальное состояние ввода системы, приложение не может использовать SetKeyboardState для установки индикаторов NUM LOCK, CAPS LOCK или r SCROLL LOCK на клавиатуре.

    GetAsyncKeyState, GetKeyboardState, GetKeyState, MapVirtualKey .

    Области

    CombineRgn

    Функция CombineRgn объединяет две области и сохраняет результат в третьей. Две области объединяются согласно указанному режиму объединения.

    HRGN hrgnDest , // дескриптор результирующей области

    HRGN hrgnSrc 1 , // дескриптор исходной области

    HRGN hrgnSrc 2 , // дескриптор исходной области

    int fnCombineMode // режим объединения областей

    hrgnDest — идентифицирует новую область с размерами, определяемыми двумя исходными областями (область должна существовать до вызова функции CombineRgn ).

    hrgnSrc 1 — идентифицирует первую из двух исходных областей.

    hrgnSrc 2 — идентифицирует вторую из двух исходных областей.

    fnCombineMode — определяет режим объединения двух областей. Может принимать одно из следующих значений:

    Создается пересечение двух областей.

    Создается копия области, идентифицируемой значением параметра hrgnSrc 1 .

    Объединяются те части области, идентифицируемой значением параметра hrgnSrc 1 , которые не являются частями области, идентифицируемой значением параметра hrgnSrc 2 .

    Создается объединение двух областей.

    Создается объединение двух областей, за исключением любых пересекающихся участков.

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

    Область состоит более чем из одного прямоугольника

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

    Области могут совпадать друг с другом. Например, значение параметра hrgnSrc 1 может быть равно значению параметра hrgnDest .

    CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreatePolyPolygonRgn, CreateRectRgn, CreateRectRgnIndirect, CreateRoundRectRgn .

    CreateEllipticRgn

    Функция CreateEllipticRgn создает эллиптическую область.

    int nLeftRect , // x -координата верхнего левого угла

    int nTopRect , // y — координата верхнего левого угла

    int nRightRect , // x -координата нижнего правого угла

    int nBottomRect // y — координата нижнего правого угла

    nLeftRect — определяет x -координату верхнего левого угла прямоугольника, ограничивающего эллипс.

    nTopRect — определяет y -координату верхнего левого угла прямоугольника, ограничивающего эллипс.

    nRightRect — определяет x -координату нижнего правого угла прямоугольника, ограничивающего эллипс.

    nBottomRect — определяет y -координату нижнего правого угла прямоугольника, ограничивающего эллипс.

    В случае успеха возвращается дескриптор области.

    В случае неудачи возвращается NULL .

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

    Координаты ограничивающего прямоугольника задаются в логических единицах.

    CreateEllipticRgnIndirect, DeleteObject, SelectObject .

    CreateEllipticRgnIndirect

    Функция CreateEllipticRgnIndirect создает эллиптическую область.

    CONST RECT * lprc // указатель на структуру, определяющую

    lprc — указатель на структуру типа RECT , которая содержит координаты верхнего левого и нижнего правого углов ограничивающего эллипс прямоугольника.

    В случае успеха возвращается дескриптор области.

    В случае неудачи возвращается NULL .

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

    Координаты ограничивающего прямоугольника задаются в логических единицах.

    CreateEllipticRgn, DeleteObject, RECT, SelectObject .

    CreatePolygonRgn

    Функция CreatePolygonRgn создает многоугольную область.

    CONST POINT * lppt , // указатель на массив точек

    int cPoints , // число точек в массиве

    int fnPolyFillMode // режим заполнения многоугольника

    lppt — указатель на массив структур типа POINT , которые определяют вершины многоугольника. Многоугольник полагается замкнутым. Каждая вершина может быть задана лишь один раз.

    cPoints — определяет количество точек в массиве.

    fnPolyFillMode — определяет режим заполнения, используемый для определения того, какие пиксели входят в область. Может принимать одно из следующих значений:

    Попеременный режим. Закрашиваются только те фрагменты внутренней области многоугольника, которые получаются путем соединения линий с нечетными номерами (1, 3, 5 и т. д.). Другие фрагменты внутренней области не закрашиваются.

    Сквозной. Windows закрашивает все внутренние области.

    Для дополнительной информации об этих режимах смотрите описание функции SetPolyFillMode .

    В случае успеха возвращается дескриптор области.

    В случае неудачи возвращается NULL .

    CreatePolyPolygonRgn, DeleteObject, POINT, SelectObject, SetPolyFillMode .

    CreatePolyPolygonRgn

    Функция CreatePolyPolygonRgn создает область, состоящую из нескольких прямоугольников. Прямоугольники могут перекрывать друг друга.

    CONST POINT * lppt , // указатель на массив точек

    CONST INT * lpPolyCounts , // указатель на массив,

    // содержащий количества вершин

    int nCount , // количество целых в массиве количества вершин

    int fnPolyFillMode // режим заполнения многоугольника

    lppt — указатель на массив структур типа POINT , которые определяют вершины многоугольников. Многоугольники задаются последовательно. Каждый многоугольник полагается замкнутым, и каждая вершина может быть задана лишь один раз.

    lpPolyCounts — указывает на массив целых, каждое из которых задает количество точек в одном из многоугольников в массиве, на который указывает значение параметра lppt .

    nCount — определяет общее количество целых значений в массиве, на который указывает значение параметра lpPolyCounts .

    fnPolyFillMode — определяет режим заполнения, используемый для определения того, какие пиксели входят в область. Может принимать одно из следующих значений:

    Попеременный режим. Закрашиваются только те фрагменты внутренней области многоугольника, которые получаются путем соединения линий с нечетными номерами (1, 3, 5 и т. д.). Другие фрагменты внутренней области не закрашиваются.

    Сквозной. Windows закрашивает все внутренние области.

    Для дополнительной информации об этих режимах смотрите описание функции SetPolyFillMode .

    В случае успеха возвращается дескриптор области.

    В случае неудачи возвращается NULL .

    CreatePolygonRgn, DeleteObject, POINT, SelectObject, SetPolyFillMode .

    CreateRectRgn

    Функция CreateRectRgn создает прямоугольную область.

    int nLeftRect , // x-координата верхнего левого угла области

    int nTopRect , // y-координата верхнего левого угла области

    int nRightRect , // x-координата правого нижнего угла области

    int nBottomRect // y-координата правого нижнего угла области

    nLeftRect — определяет x-координату верхнего левого угла области.

    nTopRect — определяет y -координату верхнего левого угла области.

    nRightRect — определяет x-координату правого нижнего угла области.

    nBottomRect — определяет y- координату правого нижнего угла области.

    В случае успеха возвращается дескриптор области.

    В случае неудачи возвращается NULL.

    В область не входят ее правая и нижняя границы.

    CreateRectRgnIndirect, CreateRoundRectRgn, DeleteObject, SelectObject .

    CreateRectRgnIndirect

    Функция CreateRectRgnIndirect создает прямоугольную область.

    CONST RECT * lprc // указатель на прямоугольник

    lprc — указывает на структуру типа RECT , которая содержит координаты верхнего левого и нижнего правого углов прямоугольника, определяющего область.

    В случае успеха возвращается дескриптор области.

    В случае неудачи возвращается NULL .

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

    CreateRectRgn, CreateRoundRectRgn, DeleteObject, RECT, SelectObject .

    CreateRoundRectRgn

    Функция CreateRoundRectRgn создает прямоугольную область с закругленными углами.

    int nLeftRect , // x -координата верхнего левого угла области

    int nTopRect , // y -координата верхнего левого угла области

    int nRightRect , // x -координата нижнего правого угла области

    int nBottomRect , // y -координата нижнего правого угла области

    int nWidthEllipse , // ширина эллипса для закругленных углов

    int nHeightEllipse // высота эллипса для закругленных углов

    nLeftRect — определяет x -координату верхнего левого угла области.

    nTopRect — определяет y — координату верхнего левого угла области.

    nRightRect — определяет x -координату нижнего правого угла области.

    nBottomRect — определяет y -координату нижнего правого угла области.

    nWidthEllipse — определяет ширину эллипса, используемого для создания закругленных углов.

    nHeightEllipse — определяет высоту эллипса, используемого для создания закругленных углов.

    В случае успеха возвращается дескриптор области.

    В случае неудачи возвращается NULL .

    CreateRectRgn, CreateRectRgnIndirect, DeleteObject, SelectObject .

    EqualRgn

    Функция EqualRgn проверяет две указанные области на идентичность. Функция считает области идентичными, если они имеют одинаковые размер и форму.

    HRGN hSrcRgn 1 , // дескриптор первой области

    Илон Маск рекомендует:  Fstat взять статус файла

    HRGN hSrcRgn 2 // дескриптор второй области

    hSrcRgn 1 — идентифицирует первую область.

    hSrcRgn 2 — идентифицирует вторую область.

    Если две области равны, возвращается ненулевое значение.

    Если две области не равны, возвращается нуль. Возврат ERROR означает, что, по крайней мере, один из дескрипторов областей был недействительным.

    ExtCreateRegion

    Функция ExtCreateRegion создает область из указанной области и данных трансформации.

    CONST XFORM * lpXform , // указатель на данные трансформации

    DWORD nCount , // размер структуры, содержащей данные области

    CONST RGNDATA * lpRgnData // указатель на данные области

    lpXform — указатель на структуру типа XFORM , которая определяет трансформацию, выполняемую над областью. Если значение этого параметра равно NULL, используется единичная трансформация.

    nCount — определяет число байт, адресуемых значением параметра lpRgnData .

    lpRgnData — указывает на структуру типа RGNDATA , которая содержит данные области.

    В случае успеха возвращается дескриптор области.

    В случае неудачи возвращается NULL .

    Приложение может извлечь данные для области, вызвав функцию GetRegionData .

    Windows 95: Области более не ограничены кучей в 64 КБайт.

    Windows 95: Мировые преобразования, который включают в себя сдвиг или вращение, не поддерживаются. Вызов ExtCreateRegion завершится неудачей, если матрица преобразования задает собой что-либо отличное от масштабирования или сдвига области.

    GetRegionData, RGNDATA, XFORM.

    FillRgn

    Функция FillRgn заполняет область, используя определенную кисть.

    HDC hdc , // дескриптор контекста устройства

    HRGN hrgn , // дескриптор заполняемой области

    HBRUSH hbr // дескриптор кисти, используемой для заполнения области

    hdc — идентифицирует контекст устройства.

    hrgn — идентифицирует заполняемую область. Предполагается, что координаты области задаются в логических единицах.

    hbr — идентифицирует кисть, используемую для заполнения области.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    CreateBrushIndirect, CreateDIBPatternBrush, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush, PaintRgn .

    FrameRgn

    Функция FrameRgn рисует рамку вокруг указанной области, используя указанную кисть.

    HDC hdc , // дескриптор контекста устройства

    HRGN hrgn , // дескриптор области, вокруг которой рисуется рамка

    HBRUSH hbr , // дескриптор кисти, используемой для рисования рамки

    int nWidth , // ширина рамки

    int nHeight // высота рамки

    hdc — идентифицирует контекст устройства.

    hrgn — идентифицирует область, заключаемую в рамку. Предполагается, что координаты области задаются в логических единицах.

    hbr — идентифицирует кисть, используемую для рисования рамки.

    nWidth — определяет ширину вертикальных штрихов кисти, в логических единицах.

    nHeight — определяет высоту горизонтальных штрихов кисти, в логических единицах.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    GetPolyFillMode

    Функция GetPolyFillMode извлекает текущий режим заполнения прямоугольника.

    HDC hdc // дескриптор контекста устройства

    hdc — идентифицирует контекст устройства.

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

    Попеременный режим. Закрашиваются только те фрагменты внутренней области многоугольника, которые получаются путем соединения линий с нечетными номерами (1, 3, 5 и т. д.). Другие фрагменты внутренней области не закрашиваются.

    Сквозной. Windows закрашивает все внутренние области.

    В случае неудачи возвращается нуль.

    GetRegionData

    Функция GetRegionData заполняет указанный буфер данными, описывающими область. Эти данные включают в себя размеры прямоугольника, покрывающего область.

    HRGN hRgn , // дескриптор области

    DWORD dwCount , // размер буфера, содержащего данные области

    LPRGNDATA lpRgnData // адрес буфера

    hRgn — идентифицирует область.

    dwCount — определяет размер буфера, на который указывает значение параметра lpRgnData , в байтах.

    lpRgnData — указывает на структуру типа RGNDATA , которая получает информацию. Если значение этого параметра равно NULL, то возвращаемое значение содержит число байт, необходимых для данных области.

    Если вызов функции завершается успехом и значение dwCount определяет соответствующее количество байт, возвращается 1. Если значение dwCount слишком мало или значение lpRgnData равно NULL, возвращается требуемое количество байт.

    В случае неудачи возвращается нуль.

    Функция GetRegionData используется в паре с функцией ExtCreateRegion .

    GetRgnBox

    Функция GetRgnBox извлекает ограничивающий прямоугольник указанной области.

    HRGN hrgn , // дескриптор области

    LPRECT lprc // адрес структуры, которая получает

    hrgn — идентифицирует область.

    lprc — указывает на структуру типа RECT , которая получает ограничивающий прямоугольник.

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

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

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

    Если значение параметра hrgn не идентифицирует действительную область, возвращается нуль.

    OffsetRgn

    Функция OffsetRgn перемещает область на заданные смещения.

    HRGN hrgn , // дескриптор области

    int nXOffset , // смещение вдоль оси x

    int nYOffset // смещение вдоль оси y

    hrgn — идентифицирует перемещаемую область.

    nXOffset — задает количество логических единиц, на которое область смещается влево или вправо.

    nYOffset — задает количество логических единиц, на которое область смещается вверх или вниз.

    Возвращаемое значение определяет сложность новой области. Может принимать одно из следующих значений:

    Область состоит более чем из одного прямоугольника

    Произошла ошибка, область не изменена.

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

    SetPolyFillMode

    Функция SetPolyFillMode устанавливает режим заполнения многоугольников для соответствующих функций.

    HDC hdc , // дескриптор контекста устройства

    int iPolyFillMode // режим заполнения многоугольников

    hdc — идентифицирует контекст устройства.

    iPolyFillMode — определяет новый режим заполнения. Может быть одним из следующих значений:

    Попеременный режим. Закрашиваются только те фрагменты внутренней области многоугольника, которые получаются путем соединения линий с нечетными номерами (1, 3, 5 и т. д.). Другие фрагменты внутренней области не закрашиваются.

    Сквозной. Windows закрашивает все внутренние области.

    Возвращается предыдущий режим заполнения многоугольников.

    В случае ошибки возвращается нуль.

    Вообще, режимы отличаются только в случаях, где должен быть заполнен сложный перекрывающийся многоугольник (например, пятисторонний многоугольник, который образует пяти-лучевую звезду с пятиугольником в центре). В таких случаях, режим ALTERNATE заполняет каждую закрытую область внутри прямоугольника (то есть, лучи звезды), а режим WINDING заполняет все области (то есть, лучи звезды и прямоугольник).

    Црифт и текст

    CreateFontIndirect

    Функция CreateFontIndirect создает логический шрифт, характеристики которого определены в указанной структуре. Впоследствии шрифт может быть выбран в качестве текущего шрифта для любого контекста устройства.

    CONST LOGFONT * lplf // указатель на структуру логического шрифта

    lplf — указывает на структуру типа LOGFONT , которая определяет характеристики логического шрифта.

    В случае успеха возвращается дескриптор логического шрифта.

    В случае неудачи возвращается нуль.

    Функция CreateFontIndirect создает логический шрифт с характеристиками, указанными в структуре типа LOGFONT . Когда шрифт выбирают функцией SelectObject , механизм отображения шрифтов GDI пытается подобрать логическому шрифту существующий физический шрифт. Если попытка подобрать точное соответствие закончилась неудачей, то предоставляется альтернативный шрифт, чьи характеристики удовлетворяют наибольшему числу запрашиваемых характеристик.

    Когда логический шрифт вам больше не нужен, вызовите для его удаления функцию DeleteObject .

    DeleteObject, LOGFONT, SelectObject .

    Сообщения и очереди сообщений

    GetQueueStatus

    Функция GetQueueStatus возвращает флаги, которые показывают тип сообщений, обнаруженных в очереди сообщений вызывающего потока.

    UINT flags // флаги состояния очереди

    flags — определяет флаги состояния очереди, указывая типы сообщений для проверки. Может быть комбинацией следующих значений:

    Сообщение ввода, WM_TIMER, WM_PAINT, WM_HOTKEY или помещенное в очередь сообщение.

    Любое сообщение ввода.

    Сообщение WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP или WM_SYSKEYDOWN в очереди.

    Сообщение WM_MOUSEMOVE или сообщение клавиши мыши ( WM_LBUTTONUP, WM_RBUTTONDOWN и т. п.).

    Сообщение клавиши мыши ( WM_LBUTTONUP, WM_RBUTTONDOWN и т. п.).

    Помещенное сообщение, отличное от перечисленных выше, находится в очереди.

    Сообщение, отправленное другим потоком или приложением, находится в очереди.

    Старшее слово показывает типы сообщений, находящихся в очереди. Младшее слово показывает типы сообщений, которые были добавлены в очередь и все еще там находятся с момента последнего вызова функции GetQueueStatus : GetMessage или PeekMessage .

    Присутствие флага QS_ в возвращаемом значении не гарантирует, что последующий вызов функции PeekMessage или GetMessage вернет сообщение. PeekMessage или GetMessage выполняют определенную внутреннюю фильтрацию, которая может привести ко внутренней обработке сообщения. По этой причине, возвращаемое функцией GetQueueStatus значение должно быть рассматриваемо только как намек на то, должна ли быть вызвана функция GetMessage или PeekMessage .

    GetInputState, GetMessage, PeekMessage .

    Кисти

    CreatePatternBrush

    Функция CreatePatternBrush создает логическую кисть с указанным шаблоном в виде битового изображения. Битовое изображение не может быть независимым от оборудования битовым изображением ( DIB ), которое создано функцией CreateDIBSection .

    HBITMAP hbmp // дескриптор битового изображения

    hbmp — идентифицирует битовый образ, используемый для создания логической кисти.

    Windows 95: Создание кистей из битовых образов размером более 8 x 8 пикселей не поддерживается. Если указан битовый образ большего размера, используется его часть.

    В случае успеха возвращается дескриптор логической кисти.

    В случае неудачи возвращается NULL .

    Шаблонная кисть — это битовый образ, который Windows использует для рисования внутренних частей закрашенных фигур.

    После того, как приложение создало кисть, вызвав функцию CreatePatternBrush , оно может выбрать эту кисть в любой контекст устройства при помощи функции SelectObject .

    Вы можете удалить шаблонную кисть без воздействия на связанный битовый образ, используя функцию DeleteObject . Таким образом, вы можете использовать этот битовый образ для создания какого угодно числа шаблонных кистей.

    Кисть, созданная с использованием монохромного битового образа, имеет цвета текста и фона того контекста устройства, в котором происходит рисование. Пиксели, представляемые нулевым битом, отрисовываются текущим цветом текста; пиксели, представляемые единичным битом, отрисовываются текущим цветом фона.

    Битовое изображение, идентифицируемое значением параметра hbmp , не может быть независимым от оборудования битовым изображением ( DIB ), которое создано функцией CreateDIBSection . Если оно является независимым от оборудования битовым изображением, то вызов CreatePatternBrush завершается неудачей.

    CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateDIBSection, CreateHatchBrush, DeleteObject, GetBrushOrgEx, LoadBitmap, SelectObject, SetBrushOrgEx .

    Библиотека оболочки

    DragAcceptFiles

    Функция DragAcceptFiles регистрирует окно, если оно принимает перетаскиваемые на него файлы.

    HWND hWnd , // дескриптор окна

    BOOL fAccept // опция разрешения принятия файлов

    hWnd — идентифицирует окно, регистрируемое, если оно принимает перетаскиваемые на него файлы.

    fAccept — определяет, принимает ли окно, определенное параметром hWnd , перетаскиваемые на него файлы. Значение TRUE разрешает принятие файлов, значение FALSE его запрещает.

    Функция не возвращает значения.

    Приложение, вызывающее DragAcceptFiles со значением TRUE параметра fAccept идентифицирует себя как способное обрабатывать сообщение WM_DROPFILES от диспетчера файлов.

    DragFinish

    Функция DragFinish освобождает память, которую Windows выделила для использования в процессе передачи имен файлов в приложение.

    HDROP hDrop // дескриптор освобождаемой памяти

    hDrop — идентифицирует структуру, описывающую перемещенные мышью файлы. Этот дескриптор извлекается из параметра wParam сообщения WM_DROPFILES.

    Функция не возвращает значения.

    DragQueryFile

    Функция DragQueryFile извлекает имена перемещенных мышью файлов.

    HDROP hDrop , // дескриптор структуры для перемещенных файлов

    UINT iFile , // индекс запрошенного файла

    LPTSTR lpszFile , // буфер для имени файла

    UINT cch // размер буфера для имени файла

    hDrop — идентифицирует структуру, содержащую имена файлов.

    iFile — определяет индекс запрашиваемого файла. Если значение параметра iFile равно 0 xFFFFFFFF, DragQueryFile возвращает число перемещенных файлов. Если значение параметра iFile лежит между нулем и количеством перемещенных файлов, DragQueryFile копирует соответствующее значению им файла в буфер, указанный параметром lpszFile .

    lpszFile — указывает на буфер для имени перемещенного файла. Им файла представляет собой завершающуюся нулем строку. Если значение lpszFile равно NULL, DragQueryFile возвращает необходимый размер буфера в символах.

    cch — определяет размер буфера в символах.

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

    Если значение параметра iFile равно 0 xFFFFFFFF, то возвращается число перемещенных мышью файлов.

    Если значение параметра iFile лежит между нулем и количеством перемещенных файлов, и значение параметра lpszFile равно NULL, возвращается требуемый размер буфера, в символах, без учета завершающего нулевого символа.

    DragQueryPoint

    Функция DragQueryPoint возвращает позицию курсора мыши в тот момент, когда при перетаскивании файлов была отпущена левая кнопка мыши.

    HDROP hDrop , // дескриптор структуры для перемещенных файлов

    LPPOINT lppt // указатель на структуру для координат мыши

    hDrop — идентифицирует структуру, описывающую перемещенные мышью файлы.

    lppt — указывает на структуру POINT , которую функция заполняет координатами мыши в тот момент, когда при перетаскивании файлов была отпущена левая кнопка мыши.

    Если отпускание левой кнопки мыши происходит в клиентской области окна, то возвращается ненулевое значение.

    Если отпускание левой кнопки мыши происходит вне клиентской области окна, то возвращается нуль.

    Координаты курсора мыши возвращаются для окна, получающего сообщение WM _ DROPFILES .

    DragQueryFile, POINT , WM_DROPFILES.

    FindExecutable

    Функция FindExecutable возвращает имя и дескриптор исполняемого (.ЕХЕ) файла, ассоциированного с указанным файлом.

    LPCTSTR lpFile , // указатель на строку с именем файла

    LPCTSTR lpDirectory , // указатель на строку с директорией по

    LPTSTR lpResult // указатель на буфер для строки с именем

    // возвращаемого .ЕХЕ файла

    lpFile — указатель на завершающуюся нулем строку, определяющую имя файла. Файл может быть либо документом, либо исполняемым файлом.

    lpDirectory — указатель на завершающуюся нулем строку, определяющую директорию по умолчанию.

    lpResult — указатель на буфер для имени возвращаемого функцией файла. Имя файла представляет собой завершающуюся нулем строку, определяющую исполняемый файл, который запускается при открытии файла, заданного параметром lpFile .

    В случае успеха возвращаемое значение больше 32. В случае неудачи возвращаемое значение меньше или равно 32. В следующей таблице приведены возможные ошибочные значения:

    Недостаток памяти или ресурсов.

    Отсутствует ассоциация для данного типа файлов.

    Указанный файл не найден.

    Указанный путь не найден.

    Неверный формат .ЕХЕ файла (не Win32 .EXE или поврежденный файл)

    При возвращении параметр lpResult может содержать путь к серверу DDE, запускаемому, если не получен ответ на запрос инициации DDE-диалога.

    Заполненные фигуры

    FrameRect

    Функция FrameRect рисует границу вокруг заданного прямоугольника, используя указанную кисть. Ширина и высота границы всегда равны одной логической единице.

    HDC hDC , // дескриптор контекста устройства

    CONST RECT *lprc , // указатель на координаты прямоугольника

    HBRUSH hbr // дескриптор кисти

    hDC — идентифицирует контекст устройства, в котором будет нарисована граница.

    lprc — указывает на структуру типа RECT , которая содержит логические координаты верхнего левого и правого нижнего углов прямоугольника.

    hbr — идентифицирует кисть, используемую для рисования границы

    В случае успеха возвращается TRUE.

    В случае неудачи возвращается FALSE. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Кисть, идентифицируемая параметром hbr , должна быть создана с использованием функций CreateHatchBrush, CreatePatternBrush или CreateSolidBrush , или извлечена с использованием функции GetStockObject .

    Если член bottom структуры типа RECT меньше или равен члену top , или член right меньше или равен члену left , то функция не рисует прямоугольник.

    CreateHatchBrush, CreatePatternBrush, CreateSolidBrush, GetStockObject, RECT .

    Класс окна

    GetClassName

    Функция GetClassName извлекает имя класса, к которому принадлежит заданное окно.

    HWND hWnd , // дескриптор окна

    LPTSTR lpClassName , // адрес буфера для имени класса

    int nMaxCount // размер буфера, в символах

    hWnd — идентифицирует окно и, неявно, класс, к которому оно принадлежит.

    lpClassName — указывает на буфер, который получает строку с именем класса.

    nMaxCount — определяет размер буфера, указанного параметром lpClassName , в символах. Строка с именем класса усекается, если ее длина больше размера буфера.

    В случае успеха возвращается количество скопированных в буфер символов.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    FindWindow, GetClassInfo, GetClassLong, GetClassWord .

    SetClassWord

    Функция SetClassWord замещает 16-битное ( word ) значение в указанном смещении в дополнительной памяти класса для класса окна, которому принадлежит указанное окно.

    HWND hWnd , // дескриптор окна

    int nIndex , // индекс заменяемого значения

    WORD wNewWord // новое значение

    hWnd — идентифицирует окно, и, неявно, класс, к которому принадлежит окно.

    nIndex — определяет отсчитываемое от нуля смещение замещаемого значения в байтах. Верные значения находятся в диапазоне от нуля до числа байт в памяти класса минус два. Например, если вы задали десять или более байт дополнительной памяти класса, восемь будет индексом пятого 16-битного значения.

    wNewWord — определяет новое значение.

    В случае успеха возвращается предыдущее значение 16-битного целого.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Зарезервируйте дополнительную память класса указанием ненулевого значения члена cbClsExtra структуры типа WNDCLASS , используемой с функцией RegisterClass .

    Значения GCW _ в Win 32 API устарели. Вы должны использовать функцию SetClassLong для устновки значений класса, ранее устанавливаемых с использованием значений GCW _ функцией SetClassWord .

    GetClassLong, GetClassWord, RegisterClass, SetClassLong, WNDCLASS .

    UnregisterClass

    Функция UnregisterClass удаляет класс окна, освобождая память, требуемую классу.

    LPCTSTR lpClassName , // адрес строки с именем класса

    HINSTANCE hInstance // дескриптор экземпляра приложения

    lpClassName — указывает на завершающуюся нулем строку или целый атом. Если значение этого параметра является целым атомом, он должен быть глобальным атомом, созданным предыдущим вызовом функции GlobalAddAtom . Атом, 16-битное значение, меньшее 0 xC 000, должен находиться в младшем слове lpClassName ; старшее слово должно быть равно нулю.

    Если значение lpClassName является строкой, она определяет имя класса окна. Это имя класса должно быть зарегистрировано предыдущим вызовом функции RegisterClass . Регистрация системных глобальных классов, таких, как классы элементов управления, не может быть отменена.

    hInstance — определяет экземпляр модуля, создавшего класс.

    В случае успеха возвращается ненулевое значение.

    В случае если класс не может быть найден или окно, созданное с этим классом, все еще существует, возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError .

    Перед вызовом этой функции приложение должно разрушить все окна, созданные с указанным классом.

    Регистрация всех классов окон, которые зарегистрировало приложение, должна быть отменена при его завершении.

    Ввод мышью

    GetDoubleClickTime

    Функция GetDoubleClickTime извлекает текущее время двойного щелчка мыши. Двойной щелчок — это серия двух щелчков клавиши мыши; второй щелчок происходит в течение заданного времени после первого. Время двойного щелчка — это максимальное число миллисекунд, которые могут пройти между первым и вторым щелчками в двойном щелчке.

    UINT GetDoubleClickTime ( VOID )

    Функция не имеет параметров.

    В случае успеха возвращается время двойного щелчка в миллисекундах.

    Прямые и кривые

    GetArcDirection

    Функция GetArcDirection возвращает текущее направление рисования дуг для указанного контекста устройства. Функции рисования дуг и прямоугольников используют эту функцию.

    HDC hdc // дескриптор контекста устройства

    hdc — идентифицирует контекст устройства.

    В случае успеха возвращается текущее направление рисования. Может принимать одно из следующих значений:

    Дуги и прямоугольники рисуются против часовой стрелки.

    Дуги и прямоугольники рисуются по часовой стрелке.

    В случае ошибки возвращается нуль.

    LineDDAProc

    Функция LineDDAProc является определяемой приложением функцией обратного вызова, используемой совместно с функцией LineDDA. Функция LineDDAProc используется для обработки координат. Тип LINEDDAPROC определяет указатель на эту функцию обратного вызова. LineDDAProc является «заполнителем» для имени определяемой приложением функции.

    VOID CALLBACK LineDDAProc (

    int X , // x -координата точки

    int Y , // у-координата точки

    LPARAM lpData // определяемые приложением данные

    X — определяет х-координату текущей точки в логических единицах.

    Y — определяет y -координату текущей точки в логических единицах.

    lpData — указатель на определяемые приложением данные.

    Функция не возвращает значения.

    Приложение регистрирует функцию LineDDAProc , передавая ее адрес в функцию LineDDA.

    Windows NT/2000/XP: Включена в Windows NT 3.1 и выше.

    Windows 95/98/Me: Включена в Windows 95 и выше.

    Заголовок: Объявлена в Wingdi.h; подключать Windows.h.

    LineTo

    Функция LineTo рисует линию из текущей позиции до указанной точки, не включая ее.

    HDC hdc , // дескриптор контекста устройства

    int nXEnd , // x -координата завершающей линию точки

    int nYEnd // y — координата завершающей линию точки

    hdc — идентифицирует контекст устройства.

    nXEnd — определяет x -координату завершающей линию точки.

    nYEnd — определяет y -координату завершающей линию точки.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Координаты завершающей точки линии указываются в логических единицах.

    Линия рисуется текущим пером, и, если перо является геометрическим пером, текущей кистью.

    В случае успеха LineTo , текущая позиция устанавливается в указанную завершающую точку.

    MoveToEx, Polyline, PolylineTo .

    MoveToEx

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

    HDC hdc , // дескриптор контекста устройства

    int X , // x -координата новой текущей позиции

    int Y , // y — координата новой текущей позиции

    LPPOINT lpPoint // адрес старой текущей позиции

    hdc — идентифицирует контекст устройства.

    X — определяет x -координату новой текущей позиции в логических единицах.

    Y — определяет y -координату новой текущей позиции в логических единицах.

    lpPoint — указывает на структуру типа POINT , в которой хранится предыдущая текущая позиция. Если значение этого параметра равно NULL, предыдущая позиция не возвращается.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Функция MoveToEx воздействует на все функции рисования.

    AngleArc, LineTo, POINT, PolyBezierTo, PolylineTo .

    Polyline

    Функция Polyline рисует серию отрезков прямых, соединяя точки в указанном массиве.

    HDC hdc , // дескриптор контекста устройства

    CONST POINT * lppt , // адрес массива с точками

    int cPoints // количество точек в массиве

    hdc — идентифицирует контекст устройства.

    lppt — указатель на массив структур типа POINT . Каждая структура в массиве идентифицирует точку в логическом пространстве.

    cPoints — определяет количество точек в массиве. Значение этого параметра должно быть больше или равно двум.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Линии рисуются текущим пером с первой точки через последующие. В отличие от функции LineTo , функция Polyline не использует и не обновляет текущую позицию.

    LineTo, MoveToEx, POINT, PolylineTo, PolyPolyline .

    PolylineTo

    Функция PolylineTo рисует серию отрезков прямых, соединяя точки в указанном массиве.

    HDC hdc , // дескриптор контекста устройства

    CONST POINT * lppt , // адрес массива с точками

    int cPoints // количество точек в массиве

    hdc — идентифицирует контекст устройства.

    lppt — указатель на массив структур типа POINT . Каждая структура в массиве идентифицирует точку в логическом пространстве.

    cPoints — определяет количество точек в массиве.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Отрезок рисуется текущим пером из текущей позиции до первой точки, указанной значением параметра lppt . Для каждого дополнительного отрезка функция рисует от завершающей точки предыдущего отрезка до следующей точки, указанной значением параметра lppt .

    PolylineTo перемешает текущую позицию в завершающую точку последнего отрезка.

    Если отрезки прямых, нарисованные функцией, образуют замкнутую фигуру, то она не закрашивается.

    LineTo, MoveToEx, POINT, Polyline .

    PolyPolyline

    Функция PolyPolyline рисует множественные серии соединенных отрезков прямых.

    HDC hdc , // дескриптор контекста устройства

    CONST POINT * lppt , // адрес массива с точками

    CONST DWORD * lpdwPolyPoints , // адрес массива значений

    DWORD cCount // число элементов во втором массиве

    hdc — идентифицирует контекст устройства.

    lppt — указатель на массив структур типа POINT . Каждая структура в массиве идентифицирует точку в логическом пространстве.

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

    cCount — определяет количество элементов в массиве lpdwPolyPoints .

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Отрезки прямых рисуются текущим пером. Фигуры, образованные сегментами, не закрашиваются.

    Функция не использует и не обновляет текущую позицию.

    POINT, Polyline, PolylineTo .

    Отсечение

    ExcludeClipRect

    Функция ExcludeClipRect создает новую область отсечения, которая состоит из существующей области за вычетом указанного прямоугольника.

    HDC hdc , // дескриптор контекста устройства

    int nLeftRect , // x -координата верхнего левого угла прямоугольника

    int nTopRect , // y -координата верхнего левого угла прямоугольника

    int nRightRect , // x -координата нижнего правого угла прямоугольника

    int nBottomRect // y -координата нижнего правого угла прямоугольника

    hdc — идентифицирует контекст устройства.

    nLeftRect — идентифицирует логическую x -координату верхнего левого угла прямоугольника.

    nTopRect — идентифицирует логическую y -координату верхнего левого угла прямоугольника.

    nRightRect — идентифицирует логическую x -координату нижнего правого угла прямоугольника.

    nBottomRect — идентифицирует логическую y -координату нижнего правого угла прямоугольника.

    В случае успеха возвращаемое значение определяет сложность области и может быть одним из предопределенных значений:

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

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

    Нижняя и правая грани указанного прямоугольника не исключаются из области отсечения.

    GetClipBox

    Функция GetClipBox извлекает размеры наиболее компактного ограничивающего прямоугольника, который может быть нарисован вокруг текущего видимого участка на устройстве. Видимый участок определяется текущей областью отсечения или путем ( path ) отсечения, так же, как и любые перекрывающиеся окна.

    HDC hdc , // дескриптор контекста устройства

    LPRECT lprc // адрес структуры с прямоугольником

    hdc — идентифицирует контекст устройства.

    lprc — указывает на структуру типа RECT , которая предназначена для получения размеров прямоугольника.

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

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

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

    GetClipBox возвращает логические координаты, основанные на текущем контексте устройства.

    GetClipRgn

    Функция GetClipRgn извлекает дескриптор, идентифицирующий текущую определяемую приложением область отсечения для указанного контекста устройства.

    HDC hdc , // дескриптор контекста устройства

    HRGN hrgn // дескриптор области

    hdc — идентифицирует контекст устройства.

    hrgn — идентифицирует существующую область перед вызовом функции. После завершения работы функции значение этого параметра идентифицирует копию текущей области отсечения.

    В случае успеха и если для указанного контекста устройства отсутствует область отсечения, возвращается нуль. В случае успеха и если для указанного контекста устройства существует область отсечения, возвращается 1.

    В случае неудачи возвращается -1.

    Определяемая приложением область отсечения — это область, идентифицируемая функцией SelectClipRgn . Это не область отсечения, созданная вызовом функции BeginPaint .

    В случае успеха значение параметра hrgn идентифицирует копию текущей области отсечения. Последующие изменения этой области не будут воздействовать на текущую область отсечения.

    GetMetaRgn

    Функция GetMetaRgn извлекает текущую метаобласть для указанного контекста устройства.

    HDC hdc , // дескриптор контекста устройства

    HRGN hrgn // дескриптор области

    hdc — идентифицирует контекст устройства.

    hrgn — идентифицирует существующую область перед вызовом функции. После завершения выполнения функции значение этого параметра идентифицирует копию текущей метаобласти.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    В случае успеха значение hrgn идентифицирует копию текущей метаобласти. Последующие изменения этой копии не повлияют на текущую метаобласть.

    Текущая область отсечения контекста устройства определяется пересечением его области отсечения и его метаобласти.

    IntersectClipRect

    Функция IntersectClipRect создает новую область отсечения из пересечения текущей области отсечения и указанного прямоугольника.

    HDC hdc , // дескриптор контекста устройства

    int nLeftRect , // x -координата верхнего левого угла прямоугольника

    int nTopRect , // y -координата верхнего левого угла прямоугольника

    int nRightRect , // x -координата нижнего правого угла прямоугольника

    int nBottomRect // y -координата нижнего правого угла прямоугольника

    hdc — идентифицирует контекст устройства.

    nLeftRect — идентифицирует логическую x -координату верхнего левого угла прямоугольника.

    nTopRect — идентифицирует логическую y -координату верхнего левого угла прямоугольника.

    nRightRect — идентифицирует логическую x -координату нижнего правого угла прямоугольника.

    nBottomRect — идентифицирует логическую y -координату нижнего правого угла прямоугольника.

    В случае успеха возвращаемое значение определяет сложность области и может быть одним из предопределенных значений:

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

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

    Нижняя и правая грани указанного прямоугольника исключаются из области отсечения.

    OffsetClipRgn

    Функция OffsetClipRgn перемещает область отсечения контекста устройства на указанные смещения.

    HDC hdc , // дескриптор контекста устройства

    int nXOffset , // смещение вдоль оси x

    int nYOffset // смещение вдоль оси y

    hdc — идентифицирует контекст устройства.

    nXOffset — определяет количество логических единиц для перемещения влево или вправо.

    nYOffset — определяет количество логических единиц для перемещения вверх или вниз.

    В случае успеха возвращаемое значение определяет сложность области и может быть одним из предопределенных значений:

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

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

    SelectClipPath

    Функция SelectClipPath выбирает текущий путь ( path ) в качестве области отсечения для контекста устройства, объединяя новую область отсечения с существующей, используя указанный режим.

    HDC hdc , // дескриптор контекста устройства

    int iMode // режим отсечения

    hdc — идентифицирует контекст устройства пути.

    iMode — определяет способ использования пути. Допустимы следующие значения:

    Новая область отсечения включает пересечение (перекрывающиеся участки) текущей области отсечения и текущего пути.

    Новой областью отсечения является текущий путь.

    Новая область отсечения включает участки текущей области отсечения и участки, исключенные из текущего пути.

    Новая область отсечения представляет собой объединение текущей области отсечения и текущего пути.

    Новая область отсечения включает в себя объединение текущей области отсечения и текущего пути, но без пересекающихся участков.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError . GetLastError может возвращать один из следующих кодов ошибки:

    Контекст устройства, идентифицируемый значением параметра hdc , должен содержать замкнутый путь.

    SelectClipRgn

    Функция SelectClipRgn выбирает область в качестве текущей области отсечения для указанного контекста устройства.

    HDC hdc , // дескриптор контекста устройства

    HRGN hrgn // дескриптор выбираемой области

    hdc — идентифицирует контекст устройства.

    hrgn — идентифицирует область, которая выбирается.

    В случае успеха возвращаемое значение определяет сложность области и может быть одним из предопределенных значений:

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

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

    Используется только копия выбранной области. Сама область может быть выбрана для любого числа контекстов устройства или может быть удалена.

    Функция SelectClipRgn полагает, что координаты для области являются координатами устройства.

    Для удаления области отсечения контекста устройства, укажите в качестве дескриптора области NULL .

    SetMetaRgn

    Функция SetMetaRgn пересекает текущую область отсечения для указанного контекста устройства с текущей метаобластью и сохраняет объединенную область как новую метаобласть для указанного контекста устройства. Область отсечения сбрасывается в нулевую область.

    HDC hdc // дескриптор контекста устройства

    hdc — идентифицирует контекст устройства.

    В случае успеха возвращаемое значение определяет сложность области и может быть одним из предопределенных значений:

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

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

    Текущая область отсечения контекста устройства определяется пересечением его области отсечения и его метаобласти.

    Функция SetMetaRgn должна вызываться только после того, как исходный контекст устройства приложения был сохранен функцией SaveDC .

    Рисование

    GetWindowRgn

    Функция GetWindowRgn получает копию оконной области окна. Оконная область окна устанавливается вызовом функции SetWindowRgn . Оконная область определяет участок внутри окна, в котором операционная система выполняет рисование. Операционная система не отображает части окна, лежащие вне оконной области.

    HWND hWnd , // дескриптор окна. чья оконная область извлекается функцией

    HRGN hRgn // дескриптор области, которая получает копию

    hWnd — дескриптор окна, оконная область которого извлекается.

    hrgn — дескриптор области. Эта область получает копию оконной области.

    В случае успеха возвращаемое значение определяет сложность области и может быть одним из предопределенных значений:

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

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

    Координаты оконной области окна относительны верхнего левого угла окна, а не клиентской области окна.

    Для установки оконной области окна используйте функцию SetWindowRgn .

    SetRectRgn

    Функция SetRectRgn преобразует указанную область в прямоугольную область с указанными координатами.

    HRGN hrgn , // дескриптор области

    int nLeftRect , // x -координата верхнего левого угла прямоугольника

    int nTopRect , // y -координата верхнего левого угла прямоугольника

    int nRightRect , // x -координата нижнего правого угла прямоугольника

    int nBottomRect // y -координата нижнего правого угла прямоугольника

    hrgn — идентифицирует область.

    nLeftRect — определяет x -координату верхнего левого угла прямоугольной области.

    nTopRect — определяет y -координату верхнего левого угла прямоугольной области.

    nRightRect — определяет x -координату нижнего правого угла прямоугольника.

    nBottomRect — определяет y -координату нижнего правого угла прямоугольника.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Область не включает в себя нижнюю и правую границы прямоугольника.

    UpdateWindow

    Функция UpdateWindow обновляет клиентскую область указанного окна, отправляя ему сообщение WM _ PAINT, если область обновления ( update region ) окна не пуста. Функция отправляет сообщение WM _ PAINT напрямую оконной процедуре указанного окна, обходя очередь сообщений приложения. Если область обновления пуста, то сообщение не отправляется.

    HWND hWnd // дескриптор окна

    hWnd — идентифицирует обновляемое окно.

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    ExcludeUpdateRgn, GetUpdateRect, GetUpdateRgn, InvalidateRect, InvalidateRgn , WM_PAINT.

    ForegroundIdleProc

    Функция-ловушка ( hook procedure ) ForegroundIdleProc является определяемой приложением функцией обратного вызова, которую вызывает система каждый раз, когда 32-битный поток переднего плана намеревается стать неактивным.

    int code , // код хука

    DWORD wParam , // не используется

    LONG lParam // не используется

    code — определяет, должна ли функция-ловушка обработать сообщение. Если значение этого параметра HC_ACTION, то функция-ловушка должна обработать сообщение. Если значение этого параметра отрицательное, функция-ловушка должна передать сообщение функции CallNextHookEx без дальнейшей обработки и должна вернуть значение, возвращенное функцией CallNextHookEx .

    wParam — не используется.

    lParam — не используется.

    Приложение устанавливает функцию-ловушку, указывая в качестве типа хука WH_FOREGROUNDIDLE и передавая указатель на функцию-ловушку в функцию SetWindowsHookEx .

    ForegroundIdleProc является «заполнителем» для имени определяемой приложением функции.

    UnhookWindowsHookEx

    Функция UnhookWindowsHookEx удаляет процедуру хука, установленную в цепочку хуков функцией SetWindowsHookEx .

    HHOOK hhk // дескриптор удаляемой процедуры хука

    hhk — идентифицирует хук, подлежащий удалению. Значение этого параметра является дескриптором хука, полученным предыдущим вызовом SetWindowsHookEx .

    В случае успеха возвращается ненулевое значение.

    В случае неудачи возвращается нуль.

    Процедура хука может быть в состоянии вызова другим потоком даже после завершения функции UnhookWindowsHookEx . Если процедура хука не вызывается одновременно другим потоком, то она удаляется непосредственно перед завершением функции UnhookWindowsHookEx .

    Память

    HeapSize

    Функция HeapSize возвращает размер блока памяти, выделенного из кучи функциями HeapAlloc или HeapReAlloc , в байтах.

    HANDLE hHeap , // дескориптор кучи

    DWORD dwFlags , // контрольные флаги размера кучи

    LPCVOID lpMem // указатель на память, чей размер возвращается

    hHeap — определяет кучу, в которой находится блок памяти. Этот дескриптор возвращается функциями HeapCreate или GetProcessHeap .

    dwFlags — определяет некоторые контролируемые аспекты доступа к блоку памяти. В настоящее время определен только один флаг; тем не менее, все остальные значения флагов зарезервированы для будущего использования. Указание этого флага переопределит соответствующее значение флага, указанного в качестве значения параметра flOptions при создании кучи функцией HeapCreate .

    HEAP _ NO _ SERIALIZE

    Определяет, что взаимное исключение не будет использоваться, когда функция получает доступ к куче. Для дополнительной информации смотрите раздел «Комментарии» в описании функции HeapCreate .

    lpMem — указывает на блок памяти, чей размер функция получает. Указатель возвращается функциями HeapAlloc или HeapReAlloc .

    В случае успеха возвращается размер выделенного блока памяти в байтах.

    В случае неудачи возвращается 0 xFFFFFFFF . Функция не вызывает SetLastError . Приложение не может вызвать GetLastError для дополнительной информации об ошибке.

    GetProcessHeap, HeapAlloc, HeapCreate, HeapDestroy, HeapFree, HeapReAlloc, SetLastError .

    Подбор цветов

    CreateColorSpace

    Функция CreateColorSpace создает логическое цветовое пространство.

    lpLogColorSpace — указывает на структуру типа LOGCOLORSPACE .

    В случае успеха возвращается дескриптор, который идентифицирует логическое цветовое пространство.

    В случае неудачи возвращается NULL

    Когда у вас больше нет необходимости в цветовом пространстве, вызовите функцию DeleteObject для его удаления.

    Мультимедиа таймеры

    TimeProc

    Функция TimeProc является функцией обратного вызова, которая вызывается один раз по завершению одиночного события таймера или периодически по завершению периодических событий.

    void CALLBACK TimeProc (

    TimeProc является «заполнителем» для имени определяемой приложением функции.

    uID — идентификатор события таймера. Этот идентификатор был возвращен функцией timeSetEvent при установке события.

    uMsg — зарезервирован. Не используется.

    dwUser — пользовательские данные, представленные значением параметра dwUser функции timeSetEvent.

    dw1 — зарезервирован. Не используется.

    dw2 — зарезервирован. Не используется.

    Функция не возвращает значения.

    Приложения не должны вызывать определяемые системой функции внутри функции обратного вызова, кроме PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg и OutputDebugString.

    Windows NT /2000/ XP : Включена в Windows NT 3.1 и выше.

    Windows 95/98/ Me : Включена в Windows 95 и выше.

    Заголовок: Объявлена в Mmsystem.h; подключать Windows.h.

    timeSetEvent, PostMessage, timeGetSystemTime, timeGetTime, timeKillEvent, midiOutShortMsg, midiOutLongMsg, OutputDebugString.

    timeBeginPeriod

    Функция timeBeginPeriod устанавливает минимальное разрешение мультимедиа таймера для приложения или драйвера устройства.

    uPeriod — минимальное разрешение таймера в миллисекундах для приложения или драйвера устройства.

    В случае успеха возвращается TIMERR_NOERROR или TIMERR_NOCANDO, если разрешение, заданное значением параметра uPeriod , находится вне допустимого диапазона.

    Вызовите эту функцию непосредственно перед использованием сервисов мультимедиа таймера, и вызовите функцию timeEndPeriod после завершения использования сервисов мультимедиа таймера.

    Вы должны каждому вызову timeBeginPeriod сопоставить вызов timeEndPeriod , определив одинаковое минимальное разрешение в обоих вызовах. Приложение может вызывать функцию timeBeginPeriod многократно, до тех пор, пока каждому ее вызову сопоставлен ответный вызов timeEndPeriod .

    Windows NT/2000/XP : Включена в Windows NT 3.1 и выше.

    Windows 95/98/Me : Включена в Windows 95 и выше.

    Заголовок: Объявлена в Mmsystem.h ; подключать Windows.h.

    Библиотека: Используйте Winmm.lib.

    timeEndPeriod

    Функция timeEndPeriod сбрасывает ранее установленное минимальное разрешение мультимедиа таймера.

    uPeriod — минимальное разрешение таймера в миллисекундах, указанное в предыдущем вызове функции timeBeginPeriod .

    В случае успеха возвращается TIMERR _ NOERROR или TIMERR _ NOCANDO, если разрешение, заданное значением параметра uPeriod , находится вне допустимого диапазона.

    Вызовите эту функцию непосредственно после завершения использования сервисов мультимедиа таймера.

    Вы должны каждому вызову timeBeginPeriod сопоставить вызов timeEndPeriod , определив одинаковое минимальное разрешение в обоих вызовах. Приложение может вызывать функцию timeBeginPeriod многократно, до тех пор, пока каждому ее вызову сопоставлен ответный вызов timeEndPeriod .

    Windows NT /2000/ XP : Включена в Windows NT 3.1 и выше.

    Windows 95/98/ Me : Включена в Windows 95 и выше.

    Заголовок: Объявлена в Mmsystem . h ; подключать Windows . h .

    Библиотека: Используйте Winmm . lib .

    timeGetDevCaps

    Функция timeGetDevCaps запрашивает мультимедиа таймер для определения его разрешения.

    ptc — указатель на структуру типа TIMECAPS . Эта структура заполняется информацией о разрешении мультимедиа таймера.

    cbtc — размер структуры типа TIMECAPS в байтах.

    Возвращается TIMERR_NOERROR в случае успеха или TIMERR_STRUCT, если функция не может вернуть возможности устройства.

    Windows NT /2000/ XP : Включена в Windows NT 3.1 и выше.

    Windows 95/98/ Me : Включена в Windows 95 и выше.

    Заголовок: Объявлена в Mmsystem.h ; подключать Windows.h .

    Библиотека: Используйте Winmm. lib.

    timeGetSystemTime

    Функция timeGetSystemTime извлекает системное время в миллисекундах. Системное время — это время, истекшее с момента старта Windows . Эта функция работает схожим с функцией timeGetTime образом. Смотри описание timeGetTime для подробного описания работы с данными функциями.

    pmmt — указатель на структуру типа MMTIME .

    cbmmt — размер структуры типа MMTIME в байтах.

    Возвращает TIMERR _ NOERROR . Системное время возвращается в качестве значения члена ms структуры типа MMTIME .

    Windows NT /2000/ XP : Включена в Windows NT 3.1 и выше.

    Windows 95/98/ Me : Включена в Windows 95 и выше.

    Заголовок: Объявлена в Mmsystem . h ; подключать Windows . h .

    Библиотека: Используйте Winmm . lib .

    timeGetTime

    Функция timeGetTime извлекает системное время в миллисекундах. Системное время — это время, истекшее с момента старта Windows .

    DWORD timeGetTime (VOID);

    Функция не имеет параметров.

    Функция возвращает системное время в миллисекундах.

    Единственной разницей между этой функцией и функцией timeGetSystemTime является использование timeGetSystemTime структуры типа MMTIME для возвращения системного времени. У функции timeGetTime меньшие по сравнению с timeGetSystemTime накладные расходы.

    Обратите внимание, что значение, возвращаемое функцией timeGetTime , имеет тип DWORD . Возвращаемое значение сбрасывается в нуль каждые 2^32 миллисекунд, что составляет примерно 49.71 дней. Это может вызвать проблемы в коде, который напрямую использует возвращаемое функцией timeGetTime значение в вычислениях, особенно, когда значение используется для контроля выполнения кода. Вы должны всегда в вычислениях использовать разницу между двумя возвращаемыми функцией timeGetTime значениями.

    Windows NT /2000: Точность по умолчанию для функции timeGetTime может быть пять или более миллисекунд, в зависимости от машины. Вы можете использовать функции timeBeginPeriod и timeEndPeriod для увеличения точности timeGetTime . Если вы это сделаете, минимальная разница между двумя успешно возвращенными функцией timeGetTime значениями может быть меньше минимального периода, установленного функциями timeBeginPeriod и timeEndPeriod . Для измерения коротких интервалов времени с высокой точностью используйте функции QueryPerformanceCounter и QueryPerformanceFrequency.

    Windows 95: Точность по умолчанию для функции timeGetTime составляет одну миллисекунду. Другими словами, функция timeGetTime может возвращать значения, отличающиеся друг от друга только на одну миллисекунду. И не имеет значения, были ли вызваны функции timeBeginPeriod и timeEndPeriod.

    Windows NT /2000/XP : Включена в Windows NT 3.1 и выше.

    Windows 95/98/Me : Включена в Windows 95 и выше.

    Заголовок: Объявлена в Mmsystem.h ; подключать Windows.h .

    Библиотека: Используйте Winmm.lib .

    timeGetSystemTime, MMTIME, timeBeginPeriod, timeEndPeriod, QueryPerformanceCounter, QueryPerformanceFrequency.

    timeKillEvent

    Функция timeKillEvent отменяет указанное событие таймера

    uTimerID — идентификатор отменяемого события таймера. Этот идентификатор был возвращен функцией timeSetEvent , когда устанавливалось событие таймера.

    Возвращается TIMERR_NOERROR в случае успеха или MMSYSERR_INVALPARAM, если указанное событие таймера не существует.

    Windows NT /2000/ XP : Включена в Windows NT 3.1 и выше.

    Windows 95/98/ Me : Включена в Windows 95 и выше.

    Заголовок: Объявлена в Mmsystem.h ; подключать Windows.h.

    Библиотека: Используйте Winmm.lib.

    timeSetEvent

    Функция timeSetEvent запускает указанное событие мультимедиа таймера. Мультимедиа таймер выполняется в своем собственном потоке. После активации события, оно вызывает указанную функцию обратного вызова или устанавливает, или вызывает срабатывание указанного события.

    uDelay — задержка события в миллисекундах. Если это значение лежит вне диапазона допустимых значений задержки, поддерживаемых таймером, функция возвращает ошибку.

    uResolution — разрешение событий таймера в миллисекундах. Разрешение увеличивается при уменьшении значений; разрешение, установленное в нуль, показывает, что периодические события будут происходить с наибольшей возможной точностью. Для уменьшения системных издержек, тем не менее, вы должны использовать максимальное значение, соответствующее вашему приложению.

    lpTimeProc — указатель на функцию обратного вызова, которая вызывается по истечению одиночного события или периодически по истечению периодических событий. Если fuEvent определяет флаг TIME_CALLBACK_EVENT_SET или TIME_CALLBACK_EVENT_PULSE, то значение параметра lpTimeProc интерпретируется как дескриптор события. Для любых других значений fuEvent , значение lpTimeProc интерпретируется как указатель на функцию со следующей сигнатурой:

    void ( CALLBACK )( UINT uTimerID , UINT uMsg , DWORD_PTR dwUser , DWORD_PTR dw1 , DWORD_PTR dw2 ).

    dwUser — определяемые пользователем данные.

    fuEvent — тип события таймера. Может принимать одно из следующих значений:

    Событие происходит один раз, после uDelay миллисекунд.

    Событие происходит каждые uDelay миллисекунд.

    Параметр fuEvent также может принимать одно из следующих значений:

    По истечении времени Windows вызывает функцию, определяемую значением параметра lpTimeProc. Поведение по умолчанию.

    По истечении времени Windows вызывает функцию SetEvent для установки события, определяемого значением параметра lpTimeProc. Параметр dwUser игнорируется.

    По истечении времени Windows вызывает функцию PulseEvent для срабатывания события, определяемого значением параметра lpTimeProc. Параметр dwUser игнорируется.

    Передача этого флага предотвращает происхождение события после вызова функции timeKillEvent.

    Возвращается идентификатор события таймера в случае успеха, или ошибка в противном случае. Функция возвращает NULL, если ее вызов завершился неудачей, и событие таймера не было создано. (Идентификатор события также передается в функцию обратного вызова).

    Каждый вызов timeSetEvent для периодических событий таймера требует соответствующего вызова функции timeKillEvent . Создание события с флагами TIME_KILL_SYNCHRONOUS и TIME_CALLBACK_FUNCTION предотвращает происхождение события после вызова функции timeKillEvent .

    Windows NT/2000/XP: Включена в Windows NT 3.1 и выше.

    Windows 95/98/Me: Включена в Windows 95 и выше.

    Заголовок: Объявлена в Mmsystem.h; подключать Windows.h.

    Библиотека: Используйте Winmm.lib.

    PulseEvent, SetEvent, timeKillEvent.

    Выключение системы

    LockWorkStation

    Функция LockWorkStation отправляет запрос на блокировку дисплея рабочей станции. Блокирование рабочей станции защищает ее от несанкционированного использования.

    BOOL LockWorkStation ( VOID );

    Функция не имеет параметров.

    В случае успеха возвращается ненулевое значение. Поскольку функция выполняется асинхронно, ненулевое возвращаемое значение указывает, что операция была инициирована. Оно не указывает, была ли рабочая станция успешно заблокирована.

    В случае неудачи возвращается нуль. Для получения дополнительной информации об ошибке вызовите функцию GetLastError.

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

    Вызов функции приводит к такому же результату, что и нажатие клавиш Ctrl + Alt + Del и щелчок по кнопке » Lock Workstation » («Блокировка»). Для разблокирования рабочей станции пользователь должен войти в систему.

    Windows NT /2000/ XP: Включена в Windows 2000 и выше.

    Windows 95/98/Me: Не поддерживается .

    Заголовок: Объявлена в Winuser.h; подключать Windows.h.

    Библиотека: Используйте User32.lib.

    Api функции windows справочник. Введение в Win32 API

    СПРАВОЧНИК ПО WinAPI

    Описание: function _lcreat(PathName: PChar; Attribute: Integer): Integer;

    Откpывает указанный файл.

    PathName: Полное имя маpшpута DOS в откpываемому файлу.

    Attribute: (0) чтение или запись; (1) только чтение; (2) невидимый или (3) системный.

    Описатель файла DOS в случае успешного завеpшения; -1 — в пpотивном случае. функция находится в файле kernel32.dll

    Из книги Домашний архитектор. Подготовка к ремонту и строительству на компьютере автора Булат Виталий

    Справочник работ и материалов Начнем изучение программы «Мини-Смета» с ознакомления с перечнем работ и материалов, которые могут быть использованы в сметах, а также возможностей их добавления в текущие сметы.Запустите программу и выполните команду меню Ремонт? Работы и

    «Справочник по эфирным маслам» «Справочник по эфирным маслам» (рис. 5.8) представляет подробную информацию о наиболее известных эфирных маслах. Работать с программой просто – в верхней части окна находится алфавит. С помощью стрелок, расположенных справа, его можно

    «Справочник URL» Производитель: Semantica Inc. (http://www.semantica.ru).Статус: бесплатная.Размер дистрибутива: 670 Кбайт.Программа обладает простым и интуитивно понятным интерфейсом, а также развитыми средствами поиска и фильтрации ссылок (рис. 4.19). Удобный механизм в «Справочнике URL»

    Справочник по PHP О этом справочнике Справочник предназначается для людей, уже освоивших азы программирования на языке PHP.Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.В связи с тем, что данный ресурс постоянно

    Справочник по CSS О этом справочнике Справочник предназначается для людей, уже освоивших азы работы с HTML и CSS.Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.В связи с тем, что данный ресурс постоянно пополняется новой

    Справочник по Flash О этом справочнике Справочник предназначается для людей, уже освоивших азы программирования в Flash.Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.В связи с тем, что данный ресурс постоянно пополняется

    16.5. Справочник по termios Интерфейс termios состоит из структуры, набора функций, оперирующих с нею, и множества флагов, которые можно лично устанавливать.#include struct termios < tcflag_t c_iflag; /* флаги режима ввода */ tcflag_t c_oflag; /* флаги режима вывода */ tcflag_t c_cflag; /* флаги управляющего

    Краткий справочник команд PGP. Здесь приведена краткая сводка команд PGP.Зашифровать текстовый файл с открытым ключом получателя: pgp -е textfile her_useridДля подписания текстового файла вашим секретным ключом: pgp -s textfile [-u your_userid]Для подписи текстового файла вашим секретным ключом и,

    Урок № 21. Справочник физических лиц Справочник физических лиц предназначен для ввода, редактирования и хранения информации обо всех физических лицах, работающих или работавших на предприятии. Более того, здесь можно хранить сведения и о кандидатах, которые могут стать

    Урок № 22. Справочник контактных лиц Для ввода, редактирования и хранения информации о контактных лицах в программе ”1С:Бухгалтерия 8” предусмотрено ведение справочника контактных лиц. Отметим, что все контактные лица в программе делятся на три категории: Контактные

    Урок № 23. Справочник банков В справочнике банков осуществляются ввод, редактирование и хранение сведений о банках, в которых имеются счета как у собственной организации, так и у ее контрагентов и прочих юридических и физических лиц.Для перехода в режим работы с данным

    Урок № 25. Справочник номенклатуры В справочнике номенклатуры осуществляются ввод, редактирование и хранение информации обо всех товарно-материальных ценностях, а также работах и услугах, которые используются на предприятии. Без этого справочника обойтись невозможно:

    Русский справочник по Win32 API От изготовителя fb2. Данная книга (кроме всего прочего) содержит таблицы, к сожалению не все читалки могут их воспроизводить.Давайте, протестируем вашу читалку. 1 строка, 1 столбец 1 строка, 2 столбец 1 строка, 3 столбец 2 строка 1 столбец 2 строка 2

    Справочник физических лиц Перед тем, как приступить к эксплуатации программы, следует заполнить ряд основных справочников. Справочник в системе 1С 8.0 представляет собой каталог, в котором хранится та либо иная информация (в зависимости от конкретного справочника),

    Справочник по языку Описание языка PascalABC.NETЯзык программирования PascalABC.NET — это язык Pascal нового поколения, включающий в себя все возможности стандартного языка Pascal, расширения языка Delphi Object Pascal, ряд собственных расширений, а также ряд возможностей, обеспечивающих его

    С помощью WinAPI можно создавать различные оконные процедуры, диалоговые окна, программы и даже игры. Эта, скажем так, библиотека является базовой в освоении программирования , MFC, потому что эти интерфейсы являются надстройками этой библиотеки. Освоив её, Вы без труда будете создавать формы, и понимать, как это происходит.

    Не будем внедряться в теорию. Начнём с того, как создать этот проект в MVS, а в конце статьи будет разобран простой пример.

    Итак. Сначала открываем Visual Studio, затем, нажимаем на вкладку «Файл», далее «Создать проект»:

    Затем, в раскрывающемся списке Visual C++ выбираем пункт Win32, там и будет «Проект Win32». Щелкаем по нему:
    Вводим название проекта, указываем путь и нажимаем «ОК». Далее будет написано: «Добро пожаловать в мастер приложения Win32». Нажимаем далее. По-умолчанию у надписи «Пустой проект» галочка отсутствует. Нам нужно её поставить и убедиться, что у нас «Тип Приложения» — Приложение Windows. Если всё верно, нажимаем – «Готово».

    У нас должен быть пустой проект такого вида:

    Ну а теперь начнём писать простую программу, которая традиционно будет выводить на экран надпись: «Привет, Мир. ».

    Естественно, к проекту нужно добавить файл типа «имя».cpp. Кликаем по «Файлы исходного кода» правой кнопкой мыши, в раскрывающемся списке выбираем вкладку – «Добавить», далее «Создать элемент…». В результате у нас должно появиться такое окно:

    Выбираем «Файл С++», вводим имя, нажимаем «Добавить». Затем открываем этот файл и вставляем в него такой код (подробности далее):

    #include // заголовочный файл, содержащий функции API // Основная функция — аналог int main() в консольном приложении: int WINAPI WinMain(HINSTANCE hInstance, // дескриптор экземпляра приложения HINSTANCE hPrevInstance, // в Win32 не используется LPSTR lpCmdLine, // нужен для запуска окна в режиме командной строки int nCmdShow) // режим отображения окна < // Функция вывода окна с кнопкой "ОК" на экран (о параметрах позже) MessageBox(NULL, L"Привет, мир. ", L"Оконная процедура", MB_OK); return NULL; // возвращаем значение функции >

    Результат должен быть таким:

    Теперь остановимся поподробнее на коде программы.

    В первой строке мы подключаем заголовочный файл windows.h . В нём содержатся все необходимые «апишные» функции. Здесь всё понятно.

    В 4-7 строках у нас описание функции int WINAPI WinMain() .

    Квалификатор WINAPI, нужен для функции WinMain всегда. Просто запомните это. WinMain – название функции. Она имеет четыре параметра. Первый из них – HINSTANCE hInstance (строка 4 ). hInstance является дескриптором экземпляра окна (это некий код оконной процедуры, идентификатор, по которой ОС будет отличать её от остальных окон). Через него можно обращаться к окну в процессе работы в других функциях (об этом позже), что-либо менять в параметрах окна. HINSTANCE является одним из многочисленных типов данных определенных в WinAPI, таким же как int, например. А запись HINSTANCE hInstance говорит нам о том, что мы создаём новую переменную типа HINSTANCE с названием hInstance.

    О типах данным мы поговорим позже, поэтому переходим к следующему параметру: HINSTANCE hPrevInstance (строка 5 ). Как написано в комментариях, в Win32 он не используется, так как он создан для 3.x разрядной системы, из предыдущего понятно, что это дескриптор экземпляра окна. Далее у нас переменная типа LPSTR (строка 6 ) с именем lpCmdLine . Она используется в том случае, если мы запускаем окно через командную строку с прописью параметров. Очень экзотический способ, поэтому мы не будем на нём задерживаться.

    И последний параметр: целочисленный, определяет способ показа окна. Нужен для функции ShowWindow , которая будет описана позже. Например, с помощью него мы можем развернуть окно на весь экран, сделать его определённой высоты, прозрачным или поверх остальных.

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

    Int MessageBox(HWND hWnd, // дескриптор родительского окна LPCTSTR lpText, // указатель на строку с сообщением LPCTSTR lpCaption, // указатель на строку с текстом заголовка UINT uType);// флаги для отображения кнопок, стиля пиктограммы и прочее

    В нашем случае, первому параметру присвоен ноль. Всё потому, что у нас нет родительских окон (оно не запущено какой-нибудь программой).

    Далее у нас идут две переменные типа LPCTSTR: lpText и lpCaption . Первая сообщает информацию, которая будет выведена в окне в текстовом виде. Вторая сообщает, что будет написано в тексте заголовка к окну. Это аналог char *str , но всё же нет. Для того, чтобы текст выводился корректно, нужно перед строкой поставить букву L (UNICODE строка).

    Ну и последний тип данных – UINT – 32-х битное целое без знака. То есть аналог unsigned int . Этому параметру можно передавать некоторые значения (о них тоже позже), за счёт чего можно менять вид кнопки. В нашем случае – это MB_OK — означает, что окно создаёт кнопку с надписью «ОК» и соответствующим действием при её нажатии (закрытием приложения).

    В строке 11 мы возвращаем значение функции, так как она имеет не тип void .

    Таким образом, общее представление о WinAPI теперь есть. Продолжение в следующих разделах.

    Русский справочник по Win32 API

    От изготовителя fb2.

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

    Давайте, протестируем вашу читалку.

    Если, вместо симпатичной таблицы вы увидели такое:

    1 строка, 1 столбец

    1 строка, 2 столбец

    1 строка, 3 столбец

    2 строка 1 столбец

    2 строка 2 столбец

    Значит ваша читалка таблиц не видит, что очень жаль, т.к. в книге их 49.

    Что делать. Ну, я поступаю так. В Mozilla Firefox поставил плагин для чтения fb2, и все проблемы решены, конечно, возможны и другие варианты.

    Из книги Журнал «Компьютерра» № 24 от 27 июня 2006 года автора Журнал «Компьютерра»

    ОГОРОД КОЗЛОВСКОГО: Русский акцент Автор: Козловский ЕвгенийЭтот «Огород» — чисто публицистический. Без какого бы то ни было касательства к новинкам hi-tech. Впрочем, именно одна из таких новинок спровоцировала издевательскую катавасию, которую я намерен здесь описать, —

    «РУССКИЙ ОФИС» – ПОЛЕЗНЫЕ ДОПОЛНЕНИЯ …Как известно, абсолютно идеального комплекта программ в природе не существует. И как бы ни был талантлив и мастеровит Microsoft Office, он умеет далеко не все. Но, к нашему счастью, этот пакет программ отличается не только умом и

    Подход C/Win32 API Традиционно разработка программного обеспечения для операционных систем семейства Windows предполагает использование языка программирования C в сочетании с Windows API (Application Programming Interface – интерфейс программирования приложений). Несмотря на тот факт, что в

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

    Выполнение традиционных процессов Win32 Понятие «процесс» существовало в операционных системах Windows задолго до появления платформы.NET. Упрощенно говоря, термин процесс используется для обозначения множества ресурсов (таких, как внешние библиотеки программного кода и

    Русский Android Компания «Вобис» выпускает коммуникатор на базе Google Android. Модель Highscreen PP5420 построена на процессоре Qualcomm MSM7201А (528 МГц), оснащена 128-Мбайт ОЗУ, 256-Мбайт ПЗУ, 3-дюйм сенсорным экраном с разрешением 240?400, GPS, датчиком пространственных перемещений G-Sensor – все вполне в

    Вирус Win32/Stuxnet: заплат для Windows XP не будет Игорь Осколков Опубликовано 20 июля 2010 года На днях корпорация Microsoft подтвердила наличие уязвимости «нулевого дня» во всех версиях Windows — от 2000 до 7. Причём уязвимость оказалась очень необычной. Началось всего

    Александр Матросов (ESET) о вирусе Win32/Stuxnet Крестников Евгений Опубликовано 21 июля 2010 года Вирус Win32/Stuxnet интересен, прежде всего, своим механизмом распространения, использующим уязвимость в операционных системах Windows: специально сформированный

    ГЛАВА 1 Знакомство с Win32 и Win64 В этой главе вы познакомитесь с семейством операционных систем (ОС) Microsoft Windows и интерфейсом прикладного программирования (Application Programming Interface, API), который используется всеми членами этого семейства. Здесь также кратко описывается новейший

    Архитектура системы управления памятью в Win32 и Win64 Win32 (в данном случае различия между Win32 и Win64 становятся существенными) — это API 32-разрядных ОС семейства Windows. «32-разрядность» проявляет себя при адресации памяти тем, что указатели (LPSTR, LPDWORD и так далее) являются 4-байтовыми

    Переводы стандартов на русский язык? http://www.rol.ru/news/it/helpdesk/xml01.htmРасширяемый язык разметки (XML) 1.0 (вторая редакция). Перевод Радика Усманова, Luxoft (IBS).? http://www.rol.ru/news/it/helpdesk/xslt01.htmЯзык преобразований XSL (XSLT). Версия 1.0. Перевод Радика Усманова, Luxoft

    О научном редакторе перевода на русский язык Кузьменко Дмитрий занимается проектированием и разработкой приложений баз данных уже 16 лет. С InterBase начал работать в 1994 году. В 2002 году Дмитрий основал фирму iBase (www.ibase.ru), которая занимается техническим сопровождением InterBase и

    Программирование на основе Win32 API в Delphi 1. Введение Любую современную программу или программную технологию можно представить как совокупность программных «слоев». Каждый из этих слоев производит свою собственную работу, которая заключается в повышении уровня абстракции

    Windows API Index

    The following is a list of the reference content for the Windows application programming interface (API) for desktop and server applications.

    Using the Windows API, you can develop applications that run successfully on all versions of Windows while taking advantage of the features and capabilities unique to each version. (Note that this was formerly called the Win32 API. The name Windows API more accurately reflects its roots in 16-bit Windows and its support on 64-bit Windows.)

    User Interface

    The Windows UI API create and use windows to display output, prompt for user input, and carry out the other tasks that support interaction with the user. Most applications create at least one window.

    Разбираемся в WinAPI

    Для кого эта статья

    Эта статья адресована таким же, как и я новичкам в программировании на С++ которые по воле случая или по желанию решили изучать WinAPI.
    Хочу сразу предупредить:
    Я не претендую на звание гуру по C++ или WinAPI.
    Я только учусь и хочу привести здесь несколько примеров и советов которые облегчают мне изучение функций и механизмов WinAPI.

    В данной статье я предполагаю что вы уже достаточно ознакомились с С++, что бы уметь создавать классы и перегружать для них различные операторы и что вы уже «прятали» какие-то свои механизмы в класс.

    Создание и использование консоли

    Для отладки Win32 приложения или просто для того что посмотреть как оно там всё внутри происходит я всегда пользуюсь консолью.
    Так как вы создаете GUI приложение, а не консольное, то консоль не подключается. Для того что бы её вызвать в недрах интернета был найден вот этот код

    if (AllocConsole())
    <
    int hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), 4);
    *stdout = *(::_fdopen(hCrt, «w»));
    ::setvbuf(stdout, NULL, _IONBF, 0);
    *stderr = *(::_fdopen(hCrt, «w»));
    ::setvbuf(stderr, NULL, _IONBF, 0);
    std::ios::sync_with_stdio();
    >
    Для удобства советую обернуть его в функцию. Например:
    void CreateConsole()
    <
    if (AllocConsole())
    <
    int hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), 4);
    *stdout = *(::_fdopen(hCrt, «w»));
    ::setvbuf(stdout, NULL, _IONBF, 0);
    *stderr = *(::_fdopen(hCrt, «w»));
    ::setvbuf(stderr, NULL, _IONBF, 0);
    std::ios::sync_with_stdio();
    >

    Вызванная консоль работает только в режиме вывода и работает он также как и в консольных приложениях. Выводите информацию как и обычно — cout/wcout.
    Для работоспособности данного кода необходимо включить в прект следующие файлы:
    #include
    #include #include
    и включить пространство имен std в глобальное пространство имён:
    using namespace std;
    Конечно же, если вы не хотите этого делать, то просто допишите std:: ко всем сущностям которые в ней находятся.

    Наследование объектов для вывода и арифм. операций

    При создании и изучении самих «окошек» мне всегда требовалось выводить в консоль какое-нибудь значение.
    Например:
    Вы получаете размер клиентской области окна с помощью функции GetClientRect куда как параметр передается адрес объекта структуры RECT, что бы заполнить этот объект данными. Если вам нужно узнать размер полученной клиентский области вы просто можете вывести его в уже подключённую консоль

    Но делать так каждый раз (особенно если вам часто приходиться делать что-то подобное) очень неудобно.
    Здесь нам на помощь приходит наследование.
    Создайте класс который открыто наследуется от структуры RECT и перегрузите оператор вывода class newrect:public RECT
    <
    public:
    friend ostream& operator

    Теперь просто выводите обьект с помощью cout/wcout:

    И вам в удобном виде будет выводиться всё так, как вам требуется.
    Так же вы можете сделать с любыми нужными вам операторами.
    Например, если надо сравнивать или присваивать структуры (допустим тот же RECT или POINT) — перегрузите operator==() и operator=() соответственно.
    Если хотите реализовать оператор меньше class BaseWindow
    <
    WNDCLASSEX _wcex;
    TCHAR _className[30];
    TCHAR _windowName[40];
    HWND _hwnd;
    bool _WindowCreation();
    public:
    BaseWindow(LPCTSTR windowName,HINSTANCE hInstance,DWORD style,UINT x,UINT y,UINT height,UINT width);
    BaseWIndow(LPCTSTR windowName,HINSTANCE hInstance);
    const HWND GetHWND()const
    LPCTSTR GetWndName()const
    >;

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

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL