![]() |
![]() |
|
![]() |
||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||
![]() |
![]() |
Глобальные функции Windows / Библиотеки и функции / Visual C++ |
![]() |
Глобальные функции Windows_CrtCheckMemory
int _CrtCheckMemory(void);
Возвращаемое значение
В случае успешного завершения проверки возвращает значение TRUE. В противном случае возвращает значение FALSE.
Описание
Данная функция производит проверку целостности блока памяти в куче отладки (действует только в отладочной версии приложения). При обнаружении ошибок в целостности кучи отладки или в ее заголовке, а также записи информации за пределами выделенных буферов, функция _CrtCheckMemory выдает отладочное сообщение с указанием выявленной ошибки. Если символ _DEBUG не определен, вызов данной функции удаляется препроцессором.
Поведением функции _CrtCheckMemory можно управлять, устанавливая различные поля во флаге _crtDbgFlag с использование функции _CrtSetDbgFlag. Установка флага _CRTDBG_CHECK_ALWAYS_DF приводит к тому, что функция _CrtCheckMemory вызывается при каждом запросе на выделение памяти. Хотя это и замедляет выполнение приложения, зато ускоряет процесс выявления ошибок. Сброс флага _CRTDBG_ALLOC_MEM_DF отменяет проверку кучи и заставляет функцию _CrtCheckMemory всегда возвращать значение TRUE.
Поскольку данная функция возвращает логическое значение, ее вызов может быть помещен в макрос _ASSERT, что позволит быстро локализовать возникшие ошибки.
Описание данной функции содержится в файле заголовка crtdbg.h.
_CrtDumpMemoryLeaks
int _CrtDumpMemoryLeaks(void);
Возвращаемое значение
В случае обнаружения утечек памяти возвращает значение TRUE. В противном случае возвращает значение FALSE.
Описание
Данная функция производит распечатку информации по всем блокам памяти при обнаружении утечек памяти (действует только в отладочной версии приложения).
Функция _CrtDumpMemoryLeaks проверяет, не возникло ли утечек памяти с момента запуска приложения. При обнаружении утечек памяти производится распечатка содержимого заголовков всех объектов, расположенных в куче, в удобочитаемой форме. Если символ _DEBUG не определен, вызов данной функции удаляется препроцессором.
Данная функция, как правило, вызывается в конце работы приложения для проверки того, что вся выделенная в нем память освобождена. Для автоматического запуска этой функции в конце работы приложения достаточно с использованием функции _CrtSetDbgFlag установить поле _CRTDBG_LEAK_CHECK_DF во флаге _crtDbgFlag.
Для получения информации о текущем состоянии кучи отладки функция _CrtDumpMemoryLeaks вызывает функцию _CrtMemCheckpoint. После этого она производит поиск не освобожденных блоков памяти. При обнаружении такого блока она вызывает функцию _CMemDumpAllObjectsSince, выводящую информацию обо всех блоках памяти, выделенных с момента запуска приложения на исполнение. По умолчанию блоки _CRT_BLOCK не включаются в эту распечатку. Для их включения в распечатку достаточно с использованием функции _CrtSetDbgFlag установить поле _CRTDBG_CHECK_CRT_DF во флаге _crtDbgFlag.
Описание данной функции содержится в файле заголовка crtdbg.h.
_CrtSetDbgFlag
int _CrtSetDbgFlag(int newFlag);
Возвращаемое значение
Возвращает предыдущее состояние флага _crtDbgFlag.
Аргументы
![]() ![]() ![]() ![]() ![]() ![]() ![]() Описание
Данная функция позволяет установить или изменить состояние флага _crtDbgFlag, управляющего режимом работы функций слежения за кучей отладки. (Действует только в отладочной версии приложения). Если символ _DEBUG не определен, вызов данной функции удаляется препроцессором.
Макросы, задающие режим проверки кучи отладки, определяют число вызовов функций malloc, realloc, free и _msize за которыми последует вызов функции _CrtCheckMemory.
Определены следующие макросы, задающие режим проверки кучи отладки:
![]() ![]() ![]() ![]() Описание данной функции содержится в файле заголовка crtdbg.h.
AddFontResource
int AddFontResource(LPCTSTR lpszFilename);
Возвращаемое значение
В случае успешного завершения функции возвращается количество добавленных шрифтов, в противном случае возвращается нулевое значение. В Windows NT более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() Описание
Функция AddFontResource позволяет добавить ресурсы шрифта из указанного файла в системную таблицу шрифтов. После этого данный шрифт может быть использован для вывода текста любым приложением Win32.
Любые приложения, добавляющие или удаляющие шрифты из системной таблицы шрифтов, извещают об этом другие приложения посылкой сообщения WM_FONTCHANGE всем окнам верхнего уровня в операционной системе. Для посылки этого сообщения приложение должно использовать функцию SendMessage, в аргументе hWnd которой должно стоять значение HWND_BROADCAST.
Как только приложение перестает использовать ресурс шрифта, загруженный функцией AddFontResource, оно должно удалить его функцией RemoveFontResource.
AfxBeginThread
CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
CWinThread* AfxBeginThread(CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
Возвращаемое значение
Указатель на созданный данной функцией объект класса потока.
Аргументы
![]() UINT MyControllingFunction(LPVOID pParam); ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Описание
Данная функция позволяет создать новый поток. Первая версия данной функции создает рабочий поток. Вторая версия создает интерфейсный поток.
Функция AfxBeginThread создает новый объект класса CWinThread, вызывает функцию CreateThread для начала исполнения потока, а также возвращает указатель на созданный объект класса потока. В процессе выполнения данной функции производятся все проверки, необходимые для того, чтобы гарантировать, что в случае возникновения ошибки в процессе выполнения данной функции все созданные до этого объекты будут соответствующим образом уничтожены. Для завершения работы потока следует вызвать функцию AfxEndThread из данного потока или выйти из исполняющей функции потока.
AfxCheckError
void AFXAPI AfxCheckError(SCODE sc);
throw CMemoryException*
throw COleException*
Описание
Данная функция проверяет значение своего аргумента на то, что он содержит код ошибки. В случае положительного исхода этой проверки вызывается исключение. Если в качестве аргумента передан код E_OUTOFMEMORY, вызывается исключение CMemoryException. Для этого используется функция AfxThrowMemoryException. В противном случае, с использованием функции AfxThrowOleException, вызывается исключение COleException.
Функция AfxCheckError одинаково работает как в отладочной, так и в распространяемой версиях приложения.
AfxCheckMemory
BOOL AfxCheckMemory();
Возвращаемое значение
Ненулевое, при отсутствии ошибок в памяти, и нулевое в противном случае.
Описание
Данная функция проверяет кучу и выводит сообщения об обнаруженных ошибках. Если ошибки отсутствуют, ничего не выводится.
Производится проверка всех блоков памяти, размещенных в куче, включая блоки, выделенные операцией new. Блоки, выделенные на низком уровне, например, функциями malloc и GlobalAlloc, не проверяются. Список дефектных блоков памяти выводится в окно отладчика.
Если в программе присутствует строка
#define new DEBUG_NEW
то при последующих вызовах функции AfxCheckMemory в выводимую информацию будет включено имя файла и номер строки, в которой был выделен этот блок памяти.
Если приложение содержит классы, сохраняемые в потоке, то приведенная выше строка должно располагаться после последнего вызова макроса IMPLEMENT_SERIAL.
Эта функция работает только в отладочной версии библиотеки MFC.
AfxDumpStack
void AFXAPI AfxDumpStack(DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT);
Аргументы
![]() ![]() ![]() ![]() ![]() ![]() Описание
Данная функция используется для создания образа стека. Каждой функции, содержащейся в стеке, соответствует строка в его образе. Каждая строка образа стека содержит адрес последнего вызова функции, полный путь к модулю, в котором произошел вызов и прототип вызываемой функции. Если вызов функции произошел не по указанному адресу, дополнительно указывается смещение вызова (в результате вызов может произойти не из указанной функции, а совсем из другой функции).
Данная функция имеется как в отладочной, так и в распространяемой версиях библиотеки MFC. Эта функция всегда подключается статически. Даже в тех случаях, когда все остальные функции библиотеки MFC подключаются динамически. В этом случае ее реализация располагается в файле MFCS42.LIB или в его вариантах.
Для обеспечения успешной работы данной функции необходимо обеспечить следующие условия:
приложение должно иметь доступ к каталогу, в котором расположен файл imagehlp.dll. В противном случае будет выдано сообщение об ошибке. Этот файл представляет собой библиотеку динамической компоновки, поставляемую совместно с Platform SDK и Windows;
располагающиеся в стеке модули должны содержать отладочную информацию. В противном случае выдаваемая данной функцией информация будет не столь детальной.
AfxEnableControlContainer
void AfxEnableControlContainer();
Описание
Данная функция вызывается функцией CWinApp::InitInstance, чтобы обеспечить в приложении поддержку элементов управления OLE.
AfxEnableMemoryTracking
BOOL AfxEnableMemoryTracking(BOOL bTrack);
Возвращаемое значение
Возвращает предыдущее значение флага разрешения проверки памяти.
Аргументы
![]() Описание
Позволяет установить или отменить режим трассировки памяти. По умолчанию в отладочной версии приложения MFC установлен режим проверки памяти. Чтобы отменить этот режим, достаточно вызвать функцию AfxEnableMemoryTracking с аргументом FALSE. Для восстановления этого режима необходимо передать в аргументе данной функции значение TRUE.
Эта функция работает только в отладочной версии библиотеки MFC.
AfxEndThread
void AfxEndThread(UINT nExitCode);
Аргументы
![]() Описание
Данная функция используется для завершения текущего потока. Должна вызываться из потока, который необходимо завершить.
GetMessage
BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
Возвращаемое значение
Если данная функция извлекает сообщение отличное от WM_QUIT, то возвращается ненулевая величина. В противном случае возвращается ноль. Если в процессе выполнения функции произошла ошибка, то возвращаемая величина равна -1. Например, ошибка может возникнуть, если аргумент hWnd не является дескриптором окна или аргумент lpMsg не указывает на объект структуры MSG. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() ![]() ![]() Описание
Функция GetMessage получает сообщения из очереди сообщений вызвавшего ее потока и помещает их в объект специальной структуры. Данная функция позволяет получать сообщения для любого окна, принадлежащего данному потоку, и сообщения от потока, посланные функцией PostThreadMessage. При поиске сообщений производится проверка на нахождение их в определенном диапазоне значений. Функция GetMessage не может отыскивать сообщения, направленные другим окнам или приложениям.
Приложение использует возвращаемое данной функцией значение для определения того, нет ли необходимости выйти из главного цикла сообщений приложения и завершить его работу.
Функция GetMessage позволяет получить сообщения, связанные с окном, определенным в аргументе hWnd, или с любым его дочерним окном, как это определено в функции IsChild. Получаемые сообщения должны находиться в диапазоне, заданном аргументами wMsgFilterMin и wMsgFilterMax. Если аргумент hWnd имеет нулевое значение, то функция GetMessage должна получать сообщения для любого окна, принадлежащего данному потоку, и сообщения от потока, посланные функцией PostThreadMessage. Даже в том случае, когда аргумент hWnd имеет нулевое значение, функция GetMessage не позволяет получать сообщения, предназначенные для окон, принадлежащих другим потокам, или от других потоков, кроме вызывающего. Сообщение от потока, направляемое функцией PostThreadMessage имеет нулевое значение параметра hWnd. Если оба аргумента wMsgFilterMin и wMsgFilterMax имеют нулевое значение, то функция GetMessage позволяет получить все возможные сообщения (фильтрация сообщений отсутствует).
В качестве границ диапазона могут использоваться значения WM_KEYFIRST и WM_KEYLAST, позволяющие выделить все сообщения, связанные с клавиатурой, и значения WM_MOUSEFIRST и WM_MOUSELAST, позволяющие выделить все сообщения, связанные с мышью.
Функция GetMessage не удаляет сообщение WM_PAINT из очереди сообщений. Оно остается там пока не будет обработано. Поскольку данная функция может возвращать положительные, нулевые и отрицательные значения, то при написании программы следует избегать использования таких выражений как:
while (GetMessage(lpMsg, hWnd, 0, 0))
{... } поскольку данное выражение не реагирует на величину -1, свидетельствующую о возникновении фатальной ошибки в приложении.
GetWindowContextHelpId
DWORD GetWindowContextHelpId(HWND hwnd);
Возвращаемое значение
Возвращает контекстный идентификатор справки, если такой идентификатор связан с данным окном, и ноль в противном случае.
Аргументы
![]() Описание
Позволяет получить контекстный идентификатор справки для указанного окна, если с данным окном связан контекстный идентификатор справки.
GetWindowRect
BOOL GetWindowRect(HWND hWnd, LPRECT lpRect);
Возвращаемое значение
Ненулевое, если функция завершается успешно, и нулевое в противном случае. Дополнительную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() Описание
Функция GetWindowRect позволяет получить координаты прямоугольника, описывающего указанное окно. Координаты окна измеряются в экранных координатах, нулевая точка которых расположена в левом верхнем углу экрана.
HtmlHelp
HWND HtmlHelp(HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD dwData);
Возвращаемое значение
Дескриптор окна, в котором будет выводиться справочная информация.
Аргументы
![]() ![]() ![]() ![]() Описание
Данная функция используется для вывода справочной информации в формате HTML. Создаваемое ею окно справочной системы является дочерним окном того окна, дескриптор которого передан в качестве аргумента данной функции, автоматически отображается поверх родительского окна и закрывается вместе с ним. Если справочная система будет посылать сообщения, они будут направляться родительскому окну. Для создаваемого окна могут быть заданы стили, координаты, заголовок и режим отображения.
Как уже говорилось выше, аргумент uCommand функции HtmlHelp определяет операцию, производимую данной функцией. Эта операция определяет тип файла, передаваемого в аргументе pszFile, и информацию, передаваемую в аргументе dwData данной функции. Список команд и содержимое аргументов приведены в таблице П2.1.
Таблица П2.1. Команды функции HtmlHelp
AfxGetApp
CWinApp* AfxGetApp();
Возвращаемое значение
Указатель на единственный объект класса CWinApp данного приложения.
Описание
Указатель, возвращаемый данной функцией, может быть использован для доступа к информации о данном приложении, такой, как главная процедура обработки сообщения или объект главного окна программы.
AfxGetResourceHandle
HINSTANCE AfxGetResourceHandle();
Возвращаемое значение
Дескриптор HINSTANCE ресурсов, принадлежащих данному приложению по умолчанию.
Описание
Возвращаемый данной функцией дескриптор может быть использован для непосредственного доступа к ресурсам приложения, например, при вызове функции Windows FindResource.
AfxInitExtensionModule
BOOL AFXAPI AfxInitExtensionModule(AFX_EXTENSION_MODULE& state, HMODULE hModule);
Возвращаемое значение
Если инициализация библиотеки динамической компоновки прошла успешно, возвращает значение TRUE. В противном случае возвращает значение FALSE.
Аргументы
![]() ![]() Описание
Данная функция вызывается в функции DllMain для инициализации библиотеки расширения MFC.
Функция AfxInitExtensionModule копирует HMODULE библиотеки динамической компоновки и сохраняет объекты структуры CRuntimeClass и фабрики объектов (объекты COleObjectFactory) для последующего использования при создании объекта CDynLinkLibrary.
В функции DllMain библиотеки расширения MFC необходимо произвести две операции:
вызвать функцию AfxInitExtensionModule и проверить возвращаемое ею значение;
создать объект класса CDynLinkLibrary, если библиотека динамической компоновки экспортирует объекты CRuntimeClass или имеет собственные пользовательские ресурсы.
При завершении работы процесса или отключении библиотек динамической компоновки вызовом функции AfxFreeLibrary можно вызвать функцию AfxTermExtensionModule для очистки библиотеки расширения MFC.
AfxIsMemoryBlock
BOOL AfxIsMemoryBlock(const void* p, UINT nBytes,
LONG* plRequestNumber = NULL);
Возвращаемое значение
Ненулевое, если блок памяти выделен и имеет указанный размер, и нулевое в противном случае.
Аргументы
![]() ![]() ![]() Описание
Данная функция проверяет адрес в памяти, чтобы убедиться в том, что он соответствует активному блоку памяти, выделенному диагностической версией операции new.
Кроме того, производится проверка соответствия указанного размера блока его истинным размерам. Если функция AfxIsMemoryBlock возвращает ненулевое значение, в переменную, на которую указывает аргумент plRequestNumber, записывается номер блока в последовательности, представляющий собой порядковый номер вызова операции new при создании данного блока.
AfxIsValidAddress
BOOL AfxIsValidAddress(const void* lp, UINT nBytes,
BOOL bReadWrite = TRUE);
Возвращаемое значение
Ненулевое, если указанный блок памяти полностью расположен в области памяти, выделенной данному приложению, и нулевое в противном случае.
Аргументы
![]() ![]() ![]() Описание
Данная функция проверяет указанный блок, чтобы убедиться в том, что он полностью расположен в области памяти, выделенной данному приложению. Эта проверка не ограничивается блоками памяти, выделенными операцией new.
AfxIsValidString
BOOL AfxIsValidString(LPCSTR lpsz, int nLength = -1);
Возвращаемое значение
Ненулевое, если передан указатель на строку указанного размера, и нулевое в противном случае.
Аргументы
![]() ![]() Описание
Данная функция используется для определения того, что переданный ей указатель указывает на корректную строку.
AfxMessageBox
int AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK,
UINT nIDHelp = 0);
int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) -1);
Возвращаемое значение
Если для вывода диалогового окна недостаточно памяти, возвращает нулевое значение. В противном случае возвращает одно из следующих значений:
IDABORT - была нажата кнопка Abort (Прекращение);IDCANCEL - была нажата кнопка Cancel (Отмена); IDIGNORE - была нажата кнопка Ignore (Пропуск); IDNO - была нажата кнопка No (Нет); IDOK - была нажата кнопка OK; IDRETRY - была нажата кнопка Retry (Повторение); IDYES - была нажата кнопка Yes (Да). Аргументы
![]() ![]() ![]() ![]() Описание
Функция AfxMessageBox выводит на экран окно сообщения. Если данное диалоговое окно имеет кнопку Cancel (Отмена), то значение IDCANCEL возвращается не только при нажатии данной кнопки, но и при нажатии клавиши
AfxSetAllocHook
AFX_ALLOC_HOOK AfxSetAllocHook(AFX_ALLOC_HOOK pfnAllocHook);
Возвращаемое значение
Ненулевое, если память следует выделить, и нулевое в противном случае.
Аргументы
![]() Описание
Данная функция задает имя функции обратного вызова, которая будет вызываться перед каждой операцией выделения памяти.
Диспетчер памяти MFC позволяет вызывать пользовательскую функцию обратного вызова, проверяющую корректность выполняемой операции выделения памяти. Пользовательская функция обратного вызова должна иметь следующий формат:
BOOL AFXAPI AllocHook(size_t nSize, BOOL bObject, LONG lRequestNumber);
где:
nSize - размер требуемой области памяти.
bObject - флаг, устанавливаемый в том случае, если выделяется память под объект, производный от класса CObject. lRequestNumber - номер блока в последовательности. Следует помнить о том, что соглашение о вызовах AFXAPI предполагает, что вызываемая функция должна удалить свои аргументы из стека. AfxTermExtensionModule
void AFXAPI AfxTermExtensionModule(AFX_EXTENSION_MODULE& state, BOOL bAll = FALSE);
Аргументы
![]() ![]() Описание
Вызов данной функции позволяет очистить библиотеку расширения MFC при завершении работы процесса или отключении библиотек динамической компоновки вызовом функции AfxFreeLibrary.
Функция AfxTermExtensionModule освобождает всю локальную память, выделенную модулю и удаляет все записи из кэша карты сообщений. Эту функцию необходимо вызывать при динамической загрузке и освобождении библиотеки расширения MFC. Поскольку большинство библиотек динамической компоновки не используют динамической загрузки, а подключаются через импортные библиотеки, использовать для них функцию AfxTermExtensionModule необязательно.
ChooseFont
BOOL ChooseFont(LPCHOOSEFONT lpcf);
Возвращаемое значение
Если пользователь нажимает кнопку OK в диалоговом окне Шрифт, возвращаемое значение не равно нулю. Выбор пользователя фиксируется в объекте структуры CHOOSEFONT.
Если пользователь нажимает кнопку Cancel (Отмена) или закрывает диалоговое окно Шрифт (Font), данная функция возвращает нулевое значение.
Для получения дополнительной информации используется вызов функции CommDlgExtendedError, возвращающей следующие значения: CDERR_FINDRESFAILURE, CDERR_INITIALIZATION, CDERR_LOCKRESFAILURE, CDERR_LOADRESFAILURE, CDERR_LOADSTRFAILURE, CDERR_MEMALLOCFAILURE, CDERR_MEMLOCKFAILURE, CDERR_NOHINSTANCE, CDERR_NOHOOK, CDERR_NOTEMPLATE, CDERR_STRUCTSIZE, CFERR_MAXLESSTHANMIN и CFERR_NOFONTS.
Аргументы
![]() Описание
Функция ChooseFont открывает стандартное диалоговое окно Шрифт (Font), позволяющее пользователю установить атрибуты логического шрифта. Эти атрибуты включают в себя начертание, стиль (жирный, курсив или обычный), размер шрифта, эффекты (подчеркивание, зачеркивание или цвет) и набор символов шрифта.
В диалоговом окне Шрифт для обработки сообщений, посылаемых данному окну может быть использован объект класса CFHookProc. Для использования данного объекта установите флаг CF_ENABLEHOOK в переменной Flags, являющейся членом структуры CHOOSEFONT, поместите указатель на соответствующую функцию обратного вызова в переменную lpfnHook объект структуры CHOOSEFONT.
Функция обратного вызова может посылать диалоговому окну сообщения WM_CHOOSEFONT_GETLOGFONT, WM_CHOOSEFONT_SETFLAGS и WM_CHOOSEFONT_SETLOGFONT для получения от него информации о текущих установках его элементов управления.
CloseHandle
BOOL CloseHandle(HANDLE hObject);
Возвращаемое значение
Ненулевое, если функция успешно завершает свою работу, и нулевое в противном случае. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() Описание
Функция CloseHandle уничтожает дескриптор открытого объекта. Данная функция уничтожает дескриптор объекта, уменьшает счетчик дескрипторов объекта и производит проверку этого счетчика. Как только значение счетчика становится равным нулю, объект удаляется из системы.
Уничтожение дескриптора потока не приводит к завершению связанного с ним потока. Для уничтожения объекта потока необходимо сначала завершить выполнение потока, а затем уничтожить все его дескрипторы.
Функция CloseHandle используется для уничтожения дескрипторов, полученных при вызове функции CreateFile. Для уничтожения дескрипторов, возвращаемых функцией FindFirstFile, используйте функцию FindClose.
Уничтожение недопустимого дескриптора вызывает исключение. Это происходит, например, при повторном уничтожении дескриптора.
CreateEvent
HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName);
Возвращаемое значение
В случае успешного завершения функции возвращается дескриптор объекта события. Если именованный объект события существовал до вызова данной функции, то функция возвращает дескриптор существующего объекта, а функция GetLastError возвращает значение ERROR_ALREADY_EXISTS.
Если в процессе выполнения данной функции возникает ошибка, то возвращается нулевое значение. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() ![]() ![]() ![]() ![]() Описание
Функция CreateEvent позволяет создавать именованные и неименованные объекты событий. Дескриптор, возвращаемый данной функцией, имеет право доступа EVENT_ALL_ACCESS к новому объекту события и может быть использован любой функцией, имеющей в качестве аргумента дескриптор данного объекта.
Любой поток вызывающего процесса может использовать дескриптор объекта события при вызове любой из функций ожидания. Функции ожидания, использующие один объект, возвращают свое значение после того, как будет отмечен соответствующий объект события. Функции ожидания, использующие несколько объектов, могут быть настроены таким образом, чтобы возвращать свое значение после того, как будет отмечен любой из связанных с нею объектов событий, или когда будут отмечены все эти объекты событий. После возвращения значения функцией ожидания ожидающий поток может продолжить свою работу.
Начальное состояние объекта события определяется аргументом bInitialState. Для установления объекта события в отмеченное состояние используется функция SetEvent, а для сброса отмеченного состояния используется функция ResetEvent. Отмеченное состояние объекта события, созданного в режиме ручного сброса, остается таковым до вызова пользователем функции ResetEvent. Пока состояние объекта события остается отмеченным может быть возобновлена работа любого количества ждущих потоков или потоков, которые последовательно запускали операцию ожидания с использованием данного объекта события.
Отмеченное состояние объекта события, созданного в режиме автоматического сброса, остается таковым до возобновления работы одного ожидающего потока. После этого система автоматически сбрасывает отмеченное состояние объекта события. Если ожидающие потоки отсутствуют, состояние объекта события остается отмеченным.
Несколько процессов могут использовать дескрипторы одного объекта события, позволяющего этим процессам осуществлять взаимную синхронизацию. Возможно использование следующих механизмов разделения объектов:
функция CreateProcess создает дочерний процесс, который наследует дескриптор объекта события, если значение аргумента lpEventAttributes в функции CreateEvent допускает это наследование;
процесс может передать дескриптор объекта события в аргументе функции DuplicateHandle создающей дубликат дескриптора, который может использоваться другим процессом;
процесс может передать имя объекта события в аргументе функций OpenEvent или CreateEvent.
Для уничтожения дескриптора используется функция CloseHandle. Система автоматически уничтожает дескриптор при завершении процесса. Объект события уничтожается при уничтожении его последнего дескриптора.
CreateFontIndirect
HFONT CreateFontIndirect(CONST LOGFONT *lplf);
Возвращаемое значение
В случае успешного завершения функции, дескриптор логического шрифта, и нулевое значение в противном случае. В Windows NT более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() Описание
Функция CreateFontIndirect позволяет создать логический шрифт по его параметрам, заданным в объекте структуры LOGFONT. После этого созданный шрифт может выбираться в любой контекст устройства в качестве текущего шрифта.
При выборе созданного шрифта в контекст устройства с использованием функции SelectObject интерфейс графических устройств Windows старается найти среди физических шрифтов такой, который бы максимально соответствовал параметрам заданного логического шрифта. В случае если ему не удается обеспечить полное соответствие, он использует шрифт, чьи параметры максимально соответствуют требуемым.
После того, как приложение закончило работу с данным логическим шрифтом, необходимо вызвать функцию DeleteObject для его уничтожения.
DispatchMessage
LRESULT DispatchMessage(CONST MSG * lpmsg);
Возвращаемое значение
Возвращаемое значение совпадает с возвращаемым значением процедуры окна. Его трактовка зависит от обрабатываемого сообщения. Как правило, оно игнорируется.
Аргументы
![]() Описание Данная функция передает сообщение процедуре окна. Как правило, это сообщение было извлечено до этого функцией GetMessage.
Объект структуры MSG должен содержать корректные значения сообщения. Если переменная lpmsg данного объекта структуры содержит указатель на сообщение WM_TIMER, то ее переменная lParam содержит указатель на функцию, вызываемую вместо процедуры окна.
EnumFontFamilies
int EnumFontFamilies(HDC hdc, LPCTSTR lpszFamily, FONTENUMPROC lpEnumFontFamProc, LPARAM lParam);
Возвращаемое значение
Значение, возвращенное последней функцией обратного вызова. Трактовка этого значения зависит от контекста, в котором была вызвана данная функция.
Аргументы
![]() ![]() ![]() ![]() Описание
Функция EnumFontFamilies нумерует шрифты в указанном семействе шрифтов, доступном на указанном устройстве.
Функции EnumFontFamilies и EnumFontFamProc оставлены для обеспечения совместимости с 16-разрядными версиями Windows. Приложения Win32 должны использовать функцию EnumFontFamiliesEx.
Функция EnumFontFamilies позволяет получить информацию по каждому шрифту, семейство которого указано в аргументе lpszFamily, и передать эту информацию функции, указанной в аргументе lpEnumFontFamProc. Определенная в приложении функция обратного вызова может производить любую обработку полученной информации о шрифте. Нумерация шрифтов продолжается до тех пор, пока не останется необработанных шрифтов или пока функция обратного вызова не возвратит нулевое значение.
FreeLibrary
BOOL FreeLibrary(HMODULE hModule);
Возвращаемое значение
В случае успешного завершения работы возвращает ненулевое значение. В противном случае возвращает нулевое значение. Для получения более подробной информации об ошибке вызовите функцию GetLastError.
Аргументы
![]() Описание
Данная функция уменьшает на единицу счетчик ссылок загруженной библиотеки динамической компоновки. Как только значение этого счетчика достигнет нуля, модуль удаляется из адресного пространства процесса, а его дескриптор становится некорректным.
Каждый процесс поддерживает счетчик ссылок для каждого загруженного им модуля библиотеки динамической компоновки. Значение этого счетчика увеличивается на единицу при каждом вызове функции LoadLibrary и уменьшается на единицу при каждом вызове функции FreeLibrary. После загрузки модуля библиотеки динамической компоновки его счетчик ссылок имеет единичное значение.
При удалении модуля библиотеки динамической компоновки из адресного пространства процесса система вызывает его функцию DllMain (если таковая имеется) с аргументом DLL_PROCESS_DETACH. Это позволяет библиотеке динамической компоновки освободить все ресурсы, выделенные ей процессом. После завершения работы этой функции библиотечный модуль удаляется из адресного пространства процесса. Поэтому не рекомендуется вызывать данную функцию из функции DllMain.
Вызов функции FreeLibrary не оказывает никакого действия на другие процессы, использующие тот же модуль библиотеки динамической компоновки.
GetCurrentDirectory
DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer);
Возвращаемое значение
Если функция завершается успешно, возвращается количество символов, записанное в буфер, исключая завершающий строку нулевой символ. В противном случае возвращается нулевое значение. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Если текстовый буфер, на который указывает аргумент lpBuffer, имеет недостаточный размер, возвращаемое значение определяет требуемый размер буфера, включая байты, необходимые для размещения завершающего строку нулевого символа.
Аргументы
![]() ![]() Описание
Функция GetCurrentDirectory позволяет получить путь к текущему каталогу данного процесса.
GetDlgItem
HWND GetDlgItem(HWND hDlg, int nIDDlgItem);
Возвращаемое значение
В случае успешного завершения функции возвращается дескриптор окна указанного элемента управления. В противном случае возвращается нулевое значение, указывающее на то, что в качестве аргументов данной функции были использованы дескриптор несуществующего диалогового окна или идентификатор несуществующего элемента управления. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() Описание
Функция GetDlgItem позволяет получить дескриптор окна элемента управления в указанном диалоговом окне.
Данная функция может использоваться для любой пары родительского и диалогового окна, а не только в диалоговых окнах. В тех случаях, когда аргумент hDlg определяет родительское окно, а дочернее окно имеет уникальный идентификатор (определяемый аргументом hMenu в функциях CreateWindow или CreateWindowEx при создании дочернего окна), функция GetDlgItem возвращает корректный дескриптор соответствующего дочернего окна.
GetExitCodeThread
BOOL GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
Возвращаемое значение
Ненулевое, если функция успешно завершает свою работу, и нулевое в противном случае. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() Описание
Функция GetExitCodeThread позволяет получить код завершения указанного потока.
Если указанный поток еще не завершил свою работу, код завершения имеет значение STILL_ACTIVE. Если поток завершил свою работу, то его код завершения может иметь следующие значения:
код завершения, указанный в качестве аргумента функции ExitThread или TerminateThread;.
возвращаемое значение исполняющей функции потока;
код завершения процесса потока.
GetLastError
DWORD GetLastError(VOID)
Возвращаемое значение
Данная функция возвращает значение кода последней ошибки, возникшей в вызывающем потоке. Функция устанавливает это значение с помощью вызова функции SetLastError. Раздел Возвращаемое значение справки по каждой функции содержит условия, при которых данная функция устанавливает код последней ошибки.
Поскольку функция SetLastError является исключительно 32-разрядной функцией, функции Win32, представляющие собой скрытый вызов 16-разрядных функций, не устанавливают код последней ошибки. В этих функциях необходимо игнорировать эту величину. К подобным функциям относятся функции работы с окнами, функции GDI и функции работы с устройствами мультимедиа.
Описание
Функция GetLastError возвращает значение кода последней ошибки, возникшей в вызывающем потоке. Каждый поток имеет свой код последней ошибки.
Вызов функции GetLastError должен следовать немедленно после возврата любой функцией значения, свидетельствующего о том, что при ее выполнении произошла ошибка. Это необходимо потому, что некоторые функции вызывают функцию SetLastError(0) в случае своего успешного завершения, что приводит к уничтожению кода ошибки, установленного предыдущей функцией.
Большинство функций Win32 API устанавливают код последней ошибки в случае возникновения ошибки, но некоторые устанавливают его в случае своего нормального завершения. Ошибка при выполнении функции индицируется, обычно следующими кодами ошибки: FALSE, NULL, 0xFFFFFFFF или -1. Все случаи, когда функция вызывает функцию SetLastError при своем нормальном завершении, отмечены в справке по этой функции.
Коды ошибок представляют собой 32-разрядные величины (бит 31 является старшим битом). Бит 29 зарезервирован для кодов ошибок, определяемых пользователем, поэтому при определении собственного кода ошибки пользователь должен установить этот бит в единицу.
Чтобы получить строку, описывающую ошибку, по ее коду нужно вызвать функцию FormatMessage.
GetMenuContextHelpId
DWORD GetMenuContextHelpId(HMENU hmenu);
Возвращаемое значение
Возвращает контекстный идентификатор справки, если такой идентификатор связан с данным меню, и ноль в противном случае.
Аргументы
![]() Описание
Позволяет получить контекстный идентификатор справки для указанного меню.
AfxGetApp
CWinApp* AfxGetApp();
Возвращаемое значение
Указатель на единственный объект класса CWinApp данного приложения.
Описание
Указатель, возвращаемый данной функцией, может быть использован для доступа к информации о данном приложении, такой, как главная процедура обработки сообщения или объект главного окна программы.
AfxGetResourceHandle
HINSTANCE AfxGetResourceHandle();
Возвращаемое значение
Дескриптор HINSTANCE ресурсов, принадлежащих данному приложению по умолчанию.
Описание
Возвращаемый данной функцией дескриптор может быть использован для непосредственного доступа к ресурсам приложения, например, при вызове функции Windows FindResource.
AfxInitExtensionModule
BOOL AFXAPI AfxInitExtensionModule(AFX_EXTENSION_MODULE& state, HMODULE hModule);
Возвращаемое значение
Если инициализация библиотеки динамической компоновки прошла успешно, возвращает значение TRUE. В противном случае возвращает значение FALSE.
Аргументы
![]() ![]() Описание
Данная функция вызывается в функции DllMain для инициализации библиотеки расширения MFC.
Функция AfxInitExtensionModule копирует HMODULE библиотеки динамической компоновки и сохраняет объекты структуры CRuntimeClass и фабрики объектов (объекты COleObjectFactory) для последующего использования при создании объекта CDynLinkLibrary.
В функции DllMain библиотеки расширения MFC необходимо произвести две операции:
вызвать функцию AfxInitExtensionModule и проверить возвращаемое ею значение;
создать объект класса CDynLinkLibrary, если библиотека динамической компоновки экспортирует объекты CRuntimeClass или имеет собственные пользовательские ресурсы.
При завершении работы процесса или отключении библиотек динамической компоновки вызовом функции AfxFreeLibrary можно вызвать функцию AfxTermExtensionModule для очистки библиотеки расширения MFC.
AfxIsMemoryBlock
BOOL AfxIsMemoryBlock(const void* p, UINT nBytes,
LONG* plRequestNumber = NULL);
Возвращаемое значение
Ненулевое, если блок памяти выделен и имеет указанный размер, и нулевое в противном случае.
Аргументы
![]() ![]() ![]() Описание
Данная функция проверяет адрес в памяти, чтобы убедиться в том, что он соответствует активному блоку памяти, выделенному диагностической версией операции new.
Кроме того, производится проверка соответствия указанного размера блока его истинным размерам. Если функция AfxIsMemoryBlock возвращает ненулевое значение, в переменную, на которую указывает аргумент plRequestNumber, записывается номер блока в последовательности, представляющий собой порядковый номер вызова операции new при создании данного блока.
AfxIsValidAddress
BOOL AfxIsValidAddress(const void* lp, UINT nBytes,
BOOL bReadWrite = TRUE);
Возвращаемое значение
Ненулевое, если указанный блок памяти полностью расположен в области памяти, выделенной данному приложению, и нулевое в противном случае.
Аргументы
![]() ![]() ![]() Описание
Данная функция проверяет указанный блок, чтобы убедиться в том, что он полностью расположен в области памяти, выделенной данному приложению. Эта проверка не ограничивается блоками памяти, выделенными операцией new.
AfxIsValidString
BOOL AfxIsValidString(LPCSTR lpsz, int nLength = -1);
Возвращаемое значение
Ненулевое, если передан указатель на строку указанного размера, и нулевое в противном случае.
Аргументы
![]() ![]() Описание
Данная функция используется для определения того, что переданный ей указатель указывает на корректную строку.
AfxMessageBox
int AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK,
UINT nIDHelp = 0);
int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) -1);
Возвращаемое значение
Если для вывода диалогового окна недостаточно памяти, возвращает нулевое значение. В противном случае возвращает одно из следующих значений:
IDABORT - была нажата кнопка Abort (Прекращение);IDCANCEL - была нажата кнопка Cancel (Отмена); IDIGNORE - была нажата кнопка Ignore (Пропуск); IDNO - была нажата кнопка No (Нет); IDOK - была нажата кнопка OK; IDRETRY - была нажата кнопка Retry (Повторение); IDYES - была нажата кнопка Yes (Да). Аргументы
![]() ![]() ![]() ![]() Описание
Функция AfxMessageBox выводит на экран окно сообщения. Если данное диалоговое окно имеет кнопку Cancel (Отмена), то значение IDCANCEL возвращается не только при нажатии данной кнопки, но и при нажатии клавиши
AfxSetAllocHook
AFX_ALLOC_HOOK AfxSetAllocHook(AFX_ALLOC_HOOK pfnAllocHook);
Возвращаемое значение
Ненулевое, если память следует выделить, и нулевое в противном случае.
Аргументы
![]() Описание
Данная функция задает имя функции обратного вызова, которая будет вызываться перед каждой операцией выделения памяти.
Диспетчер памяти MFC позволяет вызывать пользовательскую функцию обратного вызова, проверяющую корректность выполняемой операции выделения памяти. Пользовательская функция обратного вызова должна иметь следующий формат:
BOOL AFXAPI AllocHook(size_t nSize, BOOL bObject, LONG lRequestNumber);
где:
nSize - размер требуемой области памяти.
bObject - флаг, устанавливаемый в том случае, если выделяется память под объект, производный от класса CObject. lRequestNumber - номер блока в последовательности. Следует помнить о том, что соглашение о вызовах AFXAPI предполагает, что вызываемая функция должна удалить свои аргументы из стека. AfxTermExtensionModule
void AFXAPI AfxTermExtensionModule(AFX_EXTENSION_MODULE& state, BOOL bAll = FALSE);
Аргументы
![]() ![]() Описание
Вызов данной функции позволяет очистить библиотеку расширения MFC при завершении работы процесса или отключении библиотек динамической компоновки вызовом функции AfxFreeLibrary.
Функция AfxTermExtensionModule освобождает всю локальную память, выделенную модулю и удаляет все записи из кэша карты сообщений. Эту функцию необходимо вызывать при динамической загрузке и освобождении библиотеки расширения MFC. Поскольку большинство библиотек динамической компоновки не используют динамической загрузки, а подключаются через импортные библиотеки, использовать для них функцию AfxTermExtensionModule необязательно.
ChooseFont
BOOL ChooseFont(LPCHOOSEFONT lpcf);
Возвращаемое значение
Если пользователь нажимает кнопку OK в диалоговом окне Шрифт, возвращаемое значение не равно нулю. Выбор пользователя фиксируется в объекте структуры CHOOSEFONT.
Если пользователь нажимает кнопку Cancel (Отмена) или закрывает диалоговое окно Шрифт (Font), данная функция возвращает нулевое значение.
Для получения дополнительной информации используется вызов функции CommDlgExtendedError, возвращающей следующие значения: CDERR_FINDRESFAILURE, CDERR_INITIALIZATION, CDERR_LOCKRESFAILURE, CDERR_LOADRESFAILURE, CDERR_LOADSTRFAILURE, CDERR_MEMALLOCFAILURE, CDERR_MEMLOCKFAILURE, CDERR_NOHINSTANCE, CDERR_NOHOOK, CDERR_NOTEMPLATE, CDERR_STRUCTSIZE, CFERR_MAXLESSTHANMIN и CFERR_NOFONTS.
Аргументы
![]() Описание
Функция ChooseFont открывает стандартное диалоговое окно Шрифт (Font), позволяющее пользователю установить атрибуты логического шрифта. Эти атрибуты включают в себя начертание, стиль (жирный, курсив или обычный), размер шрифта, эффекты (подчеркивание, зачеркивание или цвет) и набор символов шрифта.
В диалоговом окне Шрифт для обработки сообщений, посылаемых данному окну может быть использован объект класса CFHookProc. Для использования данного объекта установите флаг CF_ENABLEHOOK в переменной Flags, являющейся членом структуры CHOOSEFONT, поместите указатель на соответствующую функцию обратного вызова в переменную lpfnHook объект структуры CHOOSEFONT.
Функция обратного вызова может посылать диалоговому окну сообщения WM_CHOOSEFONT_GETLOGFONT, WM_CHOOSEFONT_SETFLAGS и WM_CHOOSEFONT_SETLOGFONT для получения от него информации о текущих установках его элементов управления.
CloseHandle
BOOL CloseHandle(HANDLE hObject);
Возвращаемое значение
Ненулевое, если функция успешно завершает свою работу, и нулевое в противном случае. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() Описание
Функция CloseHandle уничтожает дескриптор открытого объекта. Данная функция уничтожает дескриптор объекта, уменьшает счетчик дескрипторов объекта и производит проверку этого счетчика. Как только значение счетчика становится равным нулю, объект удаляется из системы.
Уничтожение дескриптора потока не приводит к завершению связанного с ним потока. Для уничтожения объекта потока необходимо сначала завершить выполнение потока, а затем уничтожить все его дескрипторы.
Функция CloseHandle используется для уничтожения дескрипторов, полученных при вызове функции CreateFile. Для уничтожения дескрипторов, возвращаемых функцией FindFirstFile, используйте функцию FindClose.
Уничтожение недопустимого дескриптора вызывает исключение. Это происходит, например, при повторном уничтожении дескриптора.
CreateEvent
HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName);
Возвращаемое значение
В случае успешного завершения функции возвращается дескриптор объекта события. Если именованный объект события существовал до вызова данной функции, то функция возвращает дескриптор существующего объекта, а функция GetLastError возвращает значение ERROR_ALREADY_EXISTS.
Если в процессе выполнения данной функции возникает ошибка, то возвращается нулевое значение. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() ![]() ![]() ![]() ![]() Описание
Функция CreateEvent позволяет создавать именованные и неименованные объекты событий. Дескриптор, возвращаемый данной функцией, имеет право доступа EVENT_ALL_ACCESS к новому объекту события и может быть использован любой функцией, имеющей в качестве аргумента дескриптор данного объекта.
Любой поток вызывающего процесса может использовать дескриптор объекта события при вызове любой из функций ожидания. Функции ожидания, использующие один объект, возвращают свое значение после того, как будет отмечен соответствующий объект события. Функции ожидания, использующие несколько объектов, могут быть настроены таким образом, чтобы возвращать свое значение после того, как будет отмечен любой из связанных с нею объектов событий, или когда будут отмечены все эти объекты событий. После возвращения значения функцией ожидания ожидающий поток может продолжить свою работу.
Начальное состояние объекта события определяется аргументом bInitialState. Для установления объекта события в отмеченное состояние используется функция SetEvent, а для сброса отмеченного состояния используется функция ResetEvent. Отмеченное состояние объекта события, созданного в режиме ручного сброса, остается таковым до вызова пользователем функции ResetEvent. Пока состояние объекта события остается отмеченным может быть возобновлена работа любого количества ждущих потоков или потоков, которые последовательно запускали операцию ожидания с использованием данного объекта события.
Отмеченное состояние объекта события, созданного в режиме автоматического сброса, остается таковым до возобновления работы одного ожидающего потока. После этого система автоматически сбрасывает отмеченное состояние объекта события. Если ожидающие потоки отсутствуют, состояние объекта события остается отмеченным.
Несколько процессов могут использовать дескрипторы одного объекта события, позволяющего этим процессам осуществлять взаимную синхронизацию. Возможно использование следующих механизмов разделения объектов:
функция CreateProcess создает дочерний процесс, который наследует дескриптор объекта события, если значение аргумента lpEventAttributes в функции CreateEvent допускает это наследование;
процесс может передать дескриптор объекта события в аргументе функции DuplicateHandle создающей дубликат дескриптора, который может использоваться другим процессом;
процесс может передать имя объекта события в аргументе функций OpenEvent или CreateEvent.
Для уничтожения дескриптора используется функция CloseHandle. Система автоматически уничтожает дескриптор при завершении процесса. Объект события уничтожается при уничтожении его последнего дескриптора.
CreateFontIndirect
HFONT CreateFontIndirect(CONST LOGFONT *lplf);
Возвращаемое значение
В случае успешного завершения функции, дескриптор логического шрифта, и нулевое значение в противном случае. В Windows NT более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() Описание
Функция CreateFontIndirect позволяет создать логический шрифт по его параметрам, заданным в объекте структуры LOGFONT. После этого созданный шрифт может выбираться в любой контекст устройства в качестве текущего шрифта.
При выборе созданного шрифта в контекст устройства с использованием функции SelectObject интерфейс графических устройств Windows старается найти среди физических шрифтов такой, который бы максимально соответствовал параметрам заданного логического шрифта. В случае если ему не удается обеспечить полное соответствие, он использует шрифт, чьи параметры максимально соответствуют требуемым.
После того, как приложение закончило работу с данным логическим шрифтом, необходимо вызвать функцию DeleteObject для его уничтожения.
DispatchMessage
LRESULT DispatchMessage(CONST MSG * lpmsg);
Возвращаемое значение
Возвращаемое значение совпадает с возвращаемым значением процедуры окна. Его трактовка зависит от обрабатываемого сообщения. Как правило, оно игнорируется.
Аргументы
![]() Описание Данная функция передает сообщение процедуре окна. Как правило, это сообщение было извлечено до этого функцией GetMessage.
Объект структуры MSG должен содержать корректные значения сообщения. Если переменная lpmsg данного объекта структуры содержит указатель на сообщение WM_TIMER, то ее переменная lParam содержит указатель на функцию, вызываемую вместо процедуры окна.
EnumFontFamilies
int EnumFontFamilies(HDC hdc, LPCTSTR lpszFamily, FONTENUMPROC lpEnumFontFamProc, LPARAM lParam);
Возвращаемое значение
Значение, возвращенное последней функцией обратного вызова. Трактовка этого значения зависит от контекста, в котором была вызвана данная функция.
Аргументы
![]() ![]() ![]() ![]() Описание
Функция EnumFontFamilies нумерует шрифты в указанном семействе шрифтов, доступном на указанном устройстве.
Функции EnumFontFamilies и EnumFontFamProc оставлены для обеспечения совместимости с 16-разрядными версиями Windows. Приложения Win32 должны использовать функцию EnumFontFamiliesEx.
Функция EnumFontFamilies позволяет получить информацию по каждому шрифту, семейство которого указано в аргументе lpszFamily, и передать эту информацию функции, указанной в аргументе lpEnumFontFamProc. Определенная в приложении функция обратного вызова может производить любую обработку полученной информации о шрифте. Нумерация шрифтов продолжается до тех пор, пока не останется необработанных шрифтов или пока функция обратного вызова не возвратит нулевое значение.
FreeLibrary
BOOL FreeLibrary(HMODULE hModule);
Возвращаемое значение
В случае успешного завершения работы возвращает ненулевое значение. В противном случае возвращает нулевое значение. Для получения более подробной информации об ошибке вызовите функцию GetLastError.
Аргументы
![]() Описание
Данная функция уменьшает на единицу счетчик ссылок загруженной библиотеки динамической компоновки. Как только значение этого счетчика достигнет нуля, модуль удаляется из адресного пространства процесса, а его дескриптор становится некорректным.
Каждый процесс поддерживает счетчик ссылок для каждого загруженного им модуля библиотеки динамической компоновки. Значение этого счетчика увеличивается на единицу при каждом вызове функции LoadLibrary и уменьшается на единицу при каждом вызове функции FreeLibrary. После загрузки модуля библиотеки динамической компоновки его счетчик ссылок имеет единичное значение.
При удалении модуля библиотеки динамической компоновки из адресного пространства процесса система вызывает его функцию DllMain (если таковая имеется) с аргументом DLL_PROCESS_DETACH. Это позволяет библиотеке динамической компоновки освободить все ресурсы, выделенные ей процессом. После завершения работы этой функции библиотечный модуль удаляется из адресного пространства процесса. Поэтому не рекомендуется вызывать данную функцию из функции DllMain.
Вызов функции FreeLibrary не оказывает никакого действия на другие процессы, использующие тот же модуль библиотеки динамической компоновки.
GetCurrentDirectory
DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer);
Возвращаемое значение
Если функция завершается успешно, возвращается количество символов, записанное в буфер, исключая завершающий строку нулевой символ. В противном случае возвращается нулевое значение. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Если текстовый буфер, на который указывает аргумент lpBuffer, имеет недостаточный размер, возвращаемое значение определяет требуемый размер буфера, включая байты, необходимые для размещения завершающего строку нулевого символа.
Аргументы
![]() ![]() Описание
Функция GetCurrentDirectory позволяет получить путь к текущему каталогу данного процесса.
GetDlgItem
HWND GetDlgItem(HWND hDlg, int nIDDlgItem);
Возвращаемое значение
В случае успешного завершения функции возвращается дескриптор окна указанного элемента управления. В противном случае возвращается нулевое значение, указывающее на то, что в качестве аргументов данной функции были использованы дескриптор несуществующего диалогового окна или идентификатор несуществующего элемента управления. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() Описание
Функция GetDlgItem позволяет получить дескриптор окна элемента управления в указанном диалоговом окне.
Данная функция может использоваться для любой пары родительского и диалогового окна, а не только в диалоговых окнах. В тех случаях, когда аргумент hDlg определяет родительское окно, а дочернее окно имеет уникальный идентификатор (определяемый аргументом hMenu в функциях CreateWindow или CreateWindowEx при создании дочернего окна), функция GetDlgItem возвращает корректный дескриптор соответствующего дочернего окна.
GetExitCodeThread
BOOL GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
Возвращаемое значение
Ненулевое, если функция успешно завершает свою работу, и нулевое в противном случае. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() Описание
Функция GetExitCodeThread позволяет получить код завершения указанного потока.
Если указанный поток еще не завершил свою работу, код завершения имеет значение STILL_ACTIVE. Если поток завершил свою работу, то его код завершения может иметь следующие значения:
код завершения, указанный в качестве аргумента функции ExitThread или TerminateThread;.
возвращаемое значение исполняющей функции потока;
код завершения процесса потока.
GetLastError
DWORD GetLastError(VOID)
Возвращаемое значение
Данная функция возвращает значение кода последней ошибки, возникшей в вызывающем потоке. Функция устанавливает это значение с помощью вызова функции SetLastError. Раздел Возвращаемое значение справки по каждой функции содержит условия, при которых данная функция устанавливает код последней ошибки.
Поскольку функция SetLastError является исключительно 32-разрядной функцией, функции Win32, представляющие собой скрытый вызов 16-разрядных функций, не устанавливают код последней ошибки. В этих функциях необходимо игнорировать эту величину. К подобным функциям относятся функции работы с окнами, функции GDI и функции работы с устройствами мультимедиа.
Описание
Функция GetLastError возвращает значение кода последней ошибки, возникшей в вызывающем потоке. Каждый поток имеет свой код последней ошибки.
Вызов функции GetLastError должен следовать немедленно после возврата любой функцией значения, свидетельствующего о том, что при ее выполнении произошла ошибка. Это необходимо потому, что некоторые функции вызывают функцию SetLastError(0) в случае своего успешного завершения, что приводит к уничтожению кода ошибки, установленного предыдущей функцией.
Большинство функций Win32 API устанавливают код последней ошибки в случае возникновения ошибки, но некоторые устанавливают его в случае своего нормального завершения. Ошибка при выполнении функции индицируется, обычно следующими кодами ошибки: FALSE, NULL, 0xFFFFFFFF или -1. Все случаи, когда функция вызывает функцию SetLastError при своем нормальном завершении, отмечены в справке по этой функции.
Коды ошибок представляют собой 32-разрядные величины (бит 31 является старшим битом). Бит 29 зарезервирован для кодов ошибок, определяемых пользователем, поэтому при определении собственного кода ошибки пользователь должен установить этот бит в единицу.
Чтобы получить строку, описывающую ошибку, по ее коду нужно вызвать функцию FormatMessage.
GetMenuContextHelpId
DWORD GetMenuContextHelpId(HMENU hmenu);
Возвращаемое значение
Возвращает контекстный идентификатор справки, если такой идентификатор связан с данным меню, и ноль в противном случае.
Аргументы
![]() Описание
Позволяет получить контекстный идентификатор справки для указанного меню.
LoadLibrary
HMODULE LoadLibrary(LPCTSTR lpFileName);
Возвращаемое значение
В случае успешного завершения работы возвращает дескриптор модуля. В противном случае возвращает нулевое значение. Для получения дополнительной информации по ошибке вызовите функцию GetLastError.
В Windows 95 ошибки при вызове данной функции возникают в следующих случаях:
при попытке использовать данную функцию для загрузки модуля, содержащего ресурсы с идентификаторами, значения которых превышают 0x7FFF;
при попытке непосредственной загрузки 16-разрядных библиотек динамической компоновки в 32-разрядные приложения;
при загрузке библиотек динамической компоновки с версией подсистемы большей, чем 4.0.
при попытке вызывать в функции DllMain версии Unicode для функции Win32.
Аргументы
![]() Описание
Данная функция помещает указанный исполняемый модуль в адресное пространство вызывающего процесса.
Если указанный модуль еще не располагается в адресном пространстве вызывающего процесса, система вызывает функцию DllMain данной библиотеки динамической компоновки с аргументом DLL_PROCESS_ATTACH. Если эта функция не возвращает значения TRUE, функция LoadLibrary аварийно завершает свою работу и возвращает нулевое значение. В этом случае система немедленно вызывает ту же самую функцию с аргументом DLL_PROCESS_DETACH для удаления модуля. Поэтому функцию LoadLibrary не рекомендуется вызывать в функции DllMain.
Возвращаемый данной функцией дескриптор модуля не является глобальным и не наследуется. Поэтому этот дескриптор не может использоваться другим процессом.
Если файл отсутствует в указанном каталоге, функция аварийно завершает свою работу. При задании каталога следует использовать символ \, а не символ /. Если в файле не указано расширение, по умолчанию к его имени добавляется расширение .dll. Для указания того, что данный файл не имеет расширения необходимо закончить его имя точкой.
Если файл указан без пути, то при его поиске используется стандартная стратегия поиска файлов:
текущий каталог;
системный каталог Windows, путь в который может быть получен с использованием функции GetSystemDirectory;
каталог Windows, путь в который может быть получен с использованием функции GetWindowsDirectory;
каталоги, перечисленные в переменной PATH.
В Windows NT/ 2000 после поиска в системном каталоге 32-разрядной Windows, путь в который может быть получен с использованием функции GetSystemDirectory и имеющий имя SYSTEM32, производится поиск в системном директории 16-разрядной Windows, путь в который не может быть получен с использованием какой-либо функции, и имеющий имя SYSTEM.
MessageBox
int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
Возвращаемое значение
Нулевое, если в системе недостаточно оперативной памяти для создания окна сообщения. В случае успешного завершения функции возвращаемая величина может принимать одно из перечисленных ниже значений:
IDABORT - была нажата кнопка Abort (Прекращение);IDCANCEL - была нажата кнопка Cancel (Отмена); IDIGNORE - была нажата кнопка Ignore (Пропуск); IDNO - была нажата кнопка No (Нет); IDOK - была нажата кнопка OK; IDRETRY - была нажата кнопка Retry (Повторение); IDYES - была нажата кнопка Yes (Да). Если окно сообщения имеет кнопку Cancel (Отмена), функция возвращает значение IDCANCEL независимо от того, была ли нажата кнопка Cancel (Отмена) или клавиша
Аргументы
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Описание
Функция MessageBox создает, отображает и осуществляет интерфейс с окном сообщения. Окно сообщения состоит из определяемого приложением текста, заголовка, предопределенного значка и набора кнопок.
При использовании модального системного окна сообщения для вывода информации о том, что в системе не хватает памяти, значения аргументов lpText и lpCaption нельзя загружать из файла ресурсов (что разрушает всю концепцию использования строковых ресурсов), поскольку в данном случае попытка загрузить ресурс может закончиться безрезультатно.
Если приложение вызывает функцию MessageBox и указывает в аргументе uType комбинацию флагов MB_ICONHAND и MB_SYSTEMMODAL, операционная система отображает окно сообщения вне зависимости от того, имеется ли в системе свободная память. При данной комбинации флагов операционная система ограничивает размер сообщения тремя строками. Система не производит автоматического разбиения текста на строки. Для этого необходимо использовать управляющие символы перевода строки.
Если окно сообщения создается в классе диалогового окна, то в качестве аргумента hWnd следует использовать дескриптор диалогового окна. В качестве данного аргумента нельзя использовать дескриптор дочернего окна, например дескриптор окна элемента управления.
В Windows 95 максимальное число дескрипторов окон составляет 16 384.
OpenEvent
HANDLE OpenEvent(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName);
Возвращаемое значение
В случае успешного завершения функции возвращается дескриптор объекта события. Если в процессе работы функции возникла ошибка, возвращается нулевое значение. Более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() ![]() ![]() ![]() ![]() Описание
Функция OpenEvent возвращает дескриптор существующего именованного объекта события. Данная функция позволяет нескольким процессам открывать дескрипторы одного и того же объекта события. Функция нормально завершает свою работу только в том случае, когда уже существует объект события с таким именем, созданный другим процессом с помощью функции CreateEvent. вызывающий процесс может использовать возвращаемый данной функцией дескриптор в качестве аргумента любой функции, использующей дескриптор объекта события, при условии соблюдения ограничений, налагаемых значением аргумента dwDesiredAccess.
Дескриптор может быть дублирован с использованием функции DuplicateHandle. Для уничтожения дескриптора используется функция CloseHandle. Система автоматически уничтожает дескриптор при завершении процесса. Объект события уничтожается при уничтожении его последнего дескриптора.
RemoveFontResource
BOOL RemoveFontResource(LPCTSTR lpFileName);
Возвращаемое значение
В случае успешного завершения функции возвращается ненулевое значение. В противном случае возвращается нулевое значение. В Windows NT более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() Описание
Функция RemoveFontResource удаляет ресурс из системной таблицы шрифтов, записывая его в указанный файл.
Любые приложения, добавляющие или удаляющие шрифты из системной таблицы шрифтов, извещают об этом другие приложения посылкой сообщения WM_FONTCHANGE всем окнам верхнего уровня в операционной системе. Для посылки этого сообщения приложение должно использовать функцию SendMessage, в аргументе hWnd которой должно стоять значение HWND_BROADCAST.
Если на данный ресурс шрифта имеются ссылки из других приложений, данный ресурс останется загруженным до тех пор, пока не останется использующих его контекстов устройств.
ResetEvent
BOOL ResetEvent(HANDLE hEvent);
Возвращаемое значение
Ненулевое, если работа функции завершилась успешно. Если в процессе работы функции возникла ошибка, возвращается нулевое значение. Более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() Описание
Функция ResetEvent сбрасывает отмеченное состояние объекта события. Состояние объекта события после этого остается неотмеченным до следующего вызова функции SetEvent или PulseEvent. Это неотмеченное состояние блокирует выполнение любых потоков, указавших данный объект события в аргументе функций ожидания.
Данная функция используется преимущественно для ручного сброса состояния объектов. Объекты состояния, для которых определен автоматический сброс, сбрасываются после запуска первого же ожидающего потока.
SetCurrentDirectory
BOOL SetCurrentDirectory(LPCTSTR lpPathName);
Возвращаемое значение
Ненулевое, если сохранение прошло успешно. Если в процессе сохранения возникла ошибка, данная функция возвращает нулевое значение. Более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() Описание
Функция SetCurrentDirectory изменяет рабочий каталог для текущего процесса.
Каждый процесс имеет единственный рабочий каталог, имя которого состоит из двух частей:
имени диска, представляющего собой букву, соответствующую данному диску, за которой стоит символ двоеточия, или имя сервера и разделяемое имя (\\servername\sharename);
имени каталога на этом диске.
SetDIBitsToDevice
int SetDIBitsToDevice(HDC hdc, int XDest, int YDest, DWORD dwWidth, DWORD dwHeight, int XSrc, int YSrc, UINT uStartScan, UINT cScanLines, CONST VOID *lpvBits, CONST BITMAPINFO *lpbmi, UINT fuColorUse);
Возвращаемое значение
В случае успешного завершения работы функции возвращается число установленных строк. В противном случае возвращается нулевое значение.
В Windows NT дополнительную информацию можно получить, вызвав функцию GetLastError.
В Windows 98, Windows NT 5.0 и более поздних версиях: если драйвер не поддерживает работу с файлами в формате JPEG, функция возвращает код ошибки GDI_ERROR.
Аргументы
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Описание
Функция SetDIBitsToDevice выводит аппаратно-независимый битовый образ на устройстве, связанном с указанным контекстом устройства.
В Windows 98 и Windows NT 5.0 возможности данной функции расширены для обеспечения возможности вывода битовых образов в формате JPEG.
Оптимальная скорость вывода битового образа достигается при использовании индексов системной палитры.
Для получения информации о цветах системной палитры приложение может использовать функцию GetSystemPaletteEntries.
Для снижения объема оперативной памяти, необходимой для вывода аппаратно-независимых битовых образов большого размера, приложение может выводить изображение частями, используя несколько последовательных вызовов функции SetDIBitsToDevice, помещая в массив, на который указывает аргумент lpvBits, различные фрагменты выводимого образа.
Функция SetDIBitsToDevice возвращает код ошибки, если она вызывается в фоновом процессе, а активным является приложение MS-DOS, работающее в полноэкранном режиме.
В Windows 98, Windows NT 5.0 и более поздних версиях:
если переменная biCompression объекта структуры BITMAPINFOHEADER имеет значение BI_JPEG, то аргумент lpvBits данной функции указывает на буфер, содержащий изображение в формате JPEG. В этом случае переменная biSizeImage объекта структуры BITMAPINFOHEADER содержит размер буфера изображения. Аргумент fuColorUse должен иметь при этом значение DIB_RGB_COLORS;
если переменная bV4Compression объекта структуры BITMAPV4HEADER имеет значение BI_JPEG, то аргумент lpvBits данной функции указывает на буфер, содержащий изображение в формате JPEG. В этом случае переменная bV4SizeImage объекта структуры BITMAPV4HEADER содержит размер буфера изображения. Аргумент fuColorUse должен иметь при этом значение DIB_RGB_COLORS;
если переменная bV5Compression объекта структуры BITMAPV5HEADER имеет значение BI_JPEG, то аргумент lpvBits данной функции указывает на буфер, содержащий изображение в формате JPEG. В этом случае переменная bV5SizeImage объекта структуры BITMAPV5HEADER содержит размер буфера изображения. Аргумент fuColorUse должен иметь при этом значение DIB_RGB_COLORS.
Описание данной функции содержится в файле заголовка wingdi.h. При работе с данной функцией следует включить в проект библиотеку gdi32.lib.
SetEvent
BOOL SetEvent(HANDLE hEvent);
Возвращаемое значение
Ненулевое, если работа функции завершилась успешно. Если в процессе работы функции возникла ошибка, возвращается нулевое значение. Более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() Описание
Функция SetEvent устанавливает отмеченное состояние объекта события. Состояние объекта события, открытого в режиме ручного сброса, после этого остается отмеченным до следующего вызова функции ResetEvent. Пока состояние объекта события остается отмеченным может быть возобновлена работа любого количества ждущих потоков или потоков, которые последовательно запускали операцию ожидания с использованием данного объекта события.
Состояние объекта события, открытого в режиме автоматического сброса, остается отмеченным до запуска первого же ожидающего потока. После этого система автоматически устанавливает неотмеченное состояние данного объекта. Если ожидающие потоки отсутствуют, состояние объекта остается отмеченным.
SetMenuContextHelpId
BOOL SetMenuContextHelpId(HMENU hmenu, DWORD dwContextHelpId);
Возвращаемое значение
Ненулевое, если функция успешно завершила свою работу, и нулевое в противном случае. Более подробную информацию об ошибке можно получить вызвав функцию GetLastError.
Аргументы
![]() ![]() Описание
Связывает контекстный идентификатор справки с указанным меню. Все команды меню разделяют этот идентификатор. Контекстный идентификатор справки не может быть назначен отдельной команде меню.
SetThreadPriority
BOOL SetThreadPriority(HANDLE hThread, int nPriority);
Возвращаемое значение
Ненулевое, если функция успешно завершила свою работу, и нулевое в противном случае. Более подробную информацию об ошибке можно получить вызвав функцию GetLastError.
Аргументы
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Описание
Функция SetThreadPriority устанавливает значение приоритета для указанного процесса. Это значение, наряду с приоритетом класса процесса потока определяет базовый уровень приоритета потока.
Каждый поток имеет базовый уровень приоритета, определяемый значением приоритета потока и классом приоритета его процесса. Система использует базовый уровень приоритета для всех исполняемых потоков для определения того, какому из них необходимо выделить следующий квант времени центрального процессора. Квант времени выделяется по очереди всем потокам, имеющим одинаковый уровень приоритета, и только в том случае, если нет ни одного запроса на исполнение от потоков высшего уровня приоритета рассматриваются запросы на обслуживание от потоков более низкого уровня приоритета.
Функция SetThreadPriority позволяет установить базовый уровень приоритета относительно класса приоритета его процесса. Например, задание уровня приоритета THREAD_PRIORITY_HIGHEST в функции SetThreadPriority для процесса, имеющего класс приоритета IDLE_PRIORITY_CLASS, устанавливает базовый уровень приоритета равный 6.
Для процессов, имеющих классы приоритетов IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS и HIGH_PRIORITY_CLASS система динамически повышает базовый уровень приоритета, если происходит событие, важное для данного потока. Для процессов, имеющих класс приоритета REALTIME_PRIORITY_CLASS динамическое изменение базового уровня невозможно.
Все потоки запускаются со значением приоритета THREAD_PRIORITY_NORMAL. Для получения и установки класса приоритета используются функции GetPriorityClass e SetPriorityClass. Для получения значения приоритета потока используется функция GetThreadPriority.
Использование классов приоритета процесса позволяет разделять приложения, работающие в реальном времени, обычные и фоновые приложения. Использование значений приоритетов потоков позволяет определить важность выполнения отдельных потоков в приложении. Например, поток, выводящий окно на экран, должен иметь более высокий приоритет, чем поток, осуществляющий интенсивные вычисления.
При установке приоритетов нужно следить за тем, чтобы потоки, имеющие высокий приоритет не занимали бы все имеющееся процессорное время. Потоки, имеющие базовый уровень приоритета выше 11 включаются в нормальную работу операционной системы. Использование класса приоритета процесса REALTIME_PRIORITY_CLASS может нарушить процесс кеширования диска, прекратить работу с мышью и вызвать другие подобные проблемы.
SetWindowContextHelpId
BOOL SetWindowContextHelpId(HWND hwnd, DWORD dwContextHelpId);
Возвращаемое значение
Ненулевое, если функция успешно завершила свою работу, и нулевое в противном случае. Более подробную информацию об ошибке можно получить вызвав функцию GetLastError.
Аргументы
![]() ![]() Описание
Связывает контекстный идентификатор справки с указанным окном. Если дочернее окно не имеет контекстного идентификатора справки, то оно наследует его от родительского окна. Аналогично, если окно принадлежит другому окну и не имеет контекстного идентификатора справки, то оно наследует его от того окна, которому оно принадлежит. Это наследование контекстного идентификатора справки позволяет приложению использовать один контекстный идентификатор справки для диалогового окна и всех его элементов управления.
SetWindowLong
LONG SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong);
Возвращаемое значение
В случае нормального завершения функции - предыдущее значение заменяемой 32-разрядной величины. В противном случае - нулевое значение. Дополнительную информацию об ошибке можно получить вызвав функцию GetLastError.
Если предыдущее значение заменяемой 32-разрядной величины было нулевым, то в случае нормального завершения функции возвращается нулевая величина, но функция не сбрасывает информацию о предыдущей ошибке, что существенно затрудняет вопрос о том, как завершилась работа данной функции. Чтобы избежать неопределенности необходимо вызвать функцию SetLastError(0) перед вызовом функции SetWindowLong. В этом случае об ошибке при выполнении данной функции будет говорить нулевое значение, возвращаемое данной функцией, и ненулевое значение, возвращаемое функцией GetLastError.
Аргументы
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Описание
Функция SetWindowLong изменяет атрибуты указанного окна. Функция записывает 32-разрядную величину в дополнительную память окна по заданному смещению. Функция SetWindowLong возвращает ошибку, если окно, заданное аргументом hWnd не принадлежит тому же самому процессу, что и вызывающий поток. Некоторые окна кэшируют свою память, поэтому изменения, произведенные функцией SetWindowLong вступят в силу только после последующего вызова функции SetWindowPos.
Если в функции SetWindowPos используется индекс GWL_WNDPROC для установки новой процедуры обработки окна, то новая процедура обработки окна должна соответствовать формату функции WindowProc.
Если в функции SetWindowPos используется индекс DWL_MSGRESULT для установки возвращаемого значения процедуры обработки окна, то после этого необходимо непосредственно возвратить значение TRUE. В противном случае при вызове любой функции посылающей сообщение вашему диалоговому окну его собственное сообщение может переписать возвращаемое значение, установленное с использованием индекса DWL_MSGRESULT.
Вызов функции SetWindowLong с индексом GWL_WNDPROC приводит к созданию подкласса класса окна, использованного для создания данного окна. Приложение может создавать подклассы системных классов, но не может создавать подклассы для классов окон, созданных другими процессами. Функция SetWindowLong создает подкласс окна путем изменения процедуры обработки окна, связанной с конкретным классом окна, заставляя приложение вызывать новую процедуру обработки окна вместо старой. Приложение должно передавать все сообщения, не обработанные новой процедурой окна старой процедуре посредством вызова функции CallWindowProc. Это позволяет приложению создавать цепочки процедур обработки окна.
Для резервирования дополнительной памяти окна необходимо задать ненулевое значение величины cbWndExtra, являющейся членом структуры WNDCLASSEX, используемой функцией RegisterClassEx.
Нельзя вызывать функцию SetWindowLong с индексом GWL_HWNDPARENT для замены родительского окна у дочернего окна. Вместо этого следует использовать функцию SetParent.
Sleep
VOID Sleep(DWORD dwMilliseconds);
Аргументы
![]() Описание
Функция Sleep приостанавливает исполнение данного потока на указанный интервал времени. Поток может уступить остаток своего кванта времени при вызове данной функции с нулевым временем ожидания.
Необходимо соблюдать известную осторожность при использовании функции Sleep в программах прямо или косвенно создающих окна. Если поток создает любое окно оно должно обрабатывать сообщения. Сообщения передаются всем окнам в системе. При использовании функции Sleep с бесконечным временем ожидания система может зависнуть. Поэтому, в тех случаях, когда поток создает окна, вместо функции Sleep следует использовать функции MsgWaitForMultipleObjects или MsgWaitForMultipleObjectsEx.
WaitForSingleObject
DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
Возвращаемое значение
Если функция успешно завершает свою работу, то возвращаемое значение указывает на причину завершения работы функции. Оно может принимать одно из следующих значений:
![]() ![]() ![]() Если функция аварийно завершает свою работу, она возвращает значение WAIT_FAILED. Более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() Описание
Функция WaitForSingleObject возвращает свое значение в двух случаях:
когда указанный объект устанавливается в отмеченное состояние;
когда истекает время ожидания.
Данная функция проверяет текущее состояние указанного объекта. Если данный объект находится в неотмеченном состоянии, выполнение потока приостанавливается. В процессе ожидания поток практически не использует процессорное время.
Перед завершением своей работы функция изменяет состояние некоторых объектов синхронизации. Изменения происходят только в том случае, если изменение состояния объекта привело к выходу из функции. Например, счетчик семафора уменьшается на единицу.
Функция WaitForSingleObject может использоваться со следующими объектами:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Необходимо соблюдать известную осторожность при вызове функций ожидания и программ, прямо или косвенно создающих объекты окон. Если поток создает любое окно, оно должно обрабатывать сообщения. Сообщения посылаются всем окнам системы. Поток, использующий функцию ожидания без интервала ожидания, может "подвесить" систему.
WinHelp
BOOL WinHelp(HWND hWndMain, LPCTSTR lpszHelp, UINT uCommand, DWORD dwData);
Возвращаемое значение
Ненулевое, в случае успешного завершения функции, и нулевое в противном случае. Дополнительную информацию по ошибке можно получить, вызвав функцию GetLastError.
Аргументы
![]() ![]() ![]() ![]() Описание
Вызывает справочную систему Windows (Winhelp.exe) и передает ей дополнительную информацию, определяющую характер запрашиваемой справочной информации.
Прежде, чем закрыть окно, запросившее справочную информацию необходимо вызвать функцию WinHelp и передать в аргументе uCommand команду HELP_QUIT. До того, как все приложения не произведут эту операцию справочная система Windows не может быть закрыта. В этой операции нет необходимости, если для вызова справки использовалась команда HELP_CONTEXTPOPUP.
В таблице П2.2 указаны возможные значения аргумента uCommand, предпринимаемые при этом действия и соответствующий ему формат аргумента dwData.
Таблица П2.2. Соответствие значений агументов uCommand и dwData
|
![]() |
![]() |
![]() |
|