Здравствуйте, уважаемые читатели.
Давненько я не делал нового выпуска рассылки, но похоже
никто этого не заметил :)
Ну ладно, вот я подумал про что же такое написать
и решил сделать небольшой выпуск по некоторым функциям
WTL. Итак, приступим.
Некоторые функции WTL
В заголовочных файлах ATL и WTL определенны некоторые
глобальные макросы и функции. Функции и макросы ATL,
насколько я могу судить, документированы в MSDN, а
их собратьев из WTL нужно отлавливать по одному и разбираться
с каждым индивидуально. Вот какой получился список
у меня:
Файл atlapp.h
inline bool AtlIsOldWindows()
Функция проверяет текущую версию Windows и возвращает
TRUE, если версия "старее", чем Windows 2000.
inline HFONT AtlGetDefaultGuiFont()
Возвращает хэндл шрифта по умолчанию, который используется
для таких объектов пользовательского меню, как меню
и диалоговые окна.
inline BOOL AtlInitCommonControls(DWORD
dwFlags)
Функция выполняет начальную инициализацию стандартных
элементов управления. Функция вызывает системную функцию
InitCommonControlsEx и передает ей свой аргумент. Какие
флаги задавать, можно почитать в MSDN. Как гласит MSDN,
вызов InitCommonControlsEx "накопительный". Это значит,
что вызвав эту функцию с одним флагом, потом другие
нужные флаги можно задавать отдельно в последующих
вызовах, а не задавать все нужные флаги в одном вызове,
хотя и так тоже можно поступать.
inline HRESULT AtlGetDllVersion(HINSTANCE
hInstDLL, DLLVERSIONINFO* pDllVersionInfo)
Функция принимает два параметра: хэндл на загруженную
DLL и указатель на структуру DLLVERSIONINFO. Функция
возвращает следующие значения:
- если параметр pDllVersionInfo действительный и в загруженной DLL реализована
функция DllGetVersion (как говорится в MSDN, что эту функцию реализуют большинство
системных DLL), то возвращается значение, возвращенное функцией DllGetVersion
и заполняется структура, указатель на которую был передан.
- если указатель на структуру равен NULL, возвращается константа E_INVALIDARG
- если функция не реализована внутри Dll, то возвращается константа E_NOTIMPL
inline HRESULT AtlGetDllVersion(LPCTSTR
lpstrDllName, DLLVERSIONINFO* pDllVersionInfo)
Функция, аналогичная предыдущей, но принимает не хэндл,
а имя DLL, которую сама загружает и выгружает.
inline HRESULT AtlGetCommCtrlVersion(LPDWORD
pdwMajor, LPDWORD pdwMinor)
Функция возвращает версию commctl32.dll в два параметра,
указатели на которые передаются в функцию. Если один
из параметров равен NULL, то функция возвращает константу
E_INVALIDARG. Функция грузит commctl32.dll,а потом
роется в ней с помощью своей же функции AtlGetDllVersion.
Если в загруженной DLL реализована функция DllGetVersion,
то возвращаются "правильные" значения, а если DllGetVersion
не реализована, то возвращаются значения Major=4 и
Minor=0. В комментарии перед функцией написано:
// Win95/WinNT 4.0 maj=4 min=00
// IE 3.x maj=4 min=70
// IE 4.0 maj=4 min=71
Смысл, думаю, понятен.
inline HRESULT AtlGetShellVersion(LPDWORD pdwMajor,
LPDWORD pdwMinor)
Функция возвращает версию shell32.dll в два параметра, указатели на которые
передаются в функцию. Если один из параметров равен NULL, то функция возвращает
константу E_INVALIDARG. Поведение функции полностью аналогично предыдущей.
В комментарии перед функцией написано:
// IE 3.x, IE 4.0 without Web Integrated Desktop maj=4 min=00
// IE 4.0 with Web Integrated Desktop maj=4 min=71
// IE 4.01 with Web Integrated Desktop maj=4 min=72
inline bool AtlIsAlphaBitmapResource(_U_STRINGorID
image)
Странная функция. Не совсем понятно, что она делает
и зачем нужна, похоже она делает что-то связанное с
ресурсами в Windows XP.
Файл atlmisc.h
inline HACCEL AtlLoadAccelerators(_U_STRINGorID
table)
inline HMENU AtlLoadMenu(_U_STRINGorID menu)
inline HBITMAP AtlLoadBitmap(_U_STRINGorID bitmap)
inline HCURSOR AtlLoadCursor(_U_STRINGorID cursor)
inline HICON AtlLoadIcon(_U_STRINGorID icon)
Каждая из функций загружает ресурс из текущего приложения,
идентификатор которого указан как параметр.
inline HBITMAP AtlLoadBitmapImage(_U_STRINGorID
bitmap, UINT fuLoad = LR_DEFAULTCOLOR)
inline HCURSOR AtlLoadCursorImage(_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR
| LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
inline HICON AtlLoadIconImage(_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR
| LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
Эти функции похожи на предыдущие, за исключением того,
что загружают ресурсы из запущенного приложения с помощью
функции LoadImage. Загрузка функцией LoadImage более
предпочтительна, так как функции, которыми грузятся
ресурсы в предыдущих функциях, вроде LoadBitmap, LoadIcon
и т.д. являются устаревшими по сведениям в MSDN.
inline HBITMAP AtlLoadSysBitmap(LPCTSTR
lpBitmapName)
inline HCURSOR AtlLoadSysCursor(LPCTSTR lpCursorName)
inline HICON AtlLoadSysIcon(LPCTSTR lpIconName)
Загружает системные (OEM) ресурсы, например указатели
мыши в виде руки или иконки в виде восклицательного
знака. Проверка правильности передаваемых значений
(т.е. идентификаторов, которые действительно определены)
производится только в DEBUG версии.
inline HBITMAP AtlLoadSysBitmapImage(WORD
wBitmapID, UINT fuLoad = LR_DEFAULTCOLOR)
inline HCURSOR AtlLoadSysCursorImage(_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR
| LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
inline HICON AtlLoadSysIconImage(_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR
| LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
Функции, аналогичные предыдущим, но ресурсы
загружаются через через функцию LoadImage.
inline int AtlLoadString(UINT
uID, LPTSTR lpBuffer, int nBufferMax)
inline bool AtlLoadString(UINT uID, BSTR& bstrText)
Обе функции грузят строку из ресурсов приложения,
но первая версия строки доступна только в том случае,
если версия ATL меньше, чем 7.
inline HPEN AtlGetStockPen(int
nPen)
inline HBRUSH AtlGetStockBrush(int nBrush)
inline HFONT AtlGetStockFont(int nFont)
inline HPALETTE AtlGetStockPalette(int nPalette)
Возвращает хэндл на некоторые предустановленные объекты
GDI с помощью функции API GetStockObject.
inline bool AtlCompactPath(LPTSTR
lpstrOut, LPCTSTR lpstrIn, int cchLen)
Укорачивает строку, содержащую путь к файлу до количества
символов длиной cchLen, при этом имя файла сохраняется.
Немного слов о классе _U_STRINGorID. Этот микроскопический
класс определен в atlapp.h и весьма полезен. Делает
он вот что: вне зависимости от того как передан параметр
ресурса, он его хранит во внутренней переменной m_lpstr.
Таким образом в месте, где передаются параметры ресурсов
через этот класс, уже нет необходимости помнить, надо
ли использовать MAKEINTRESOURCE или нет.
Файл atltheme.h
inline bool AtlDrawThemeClientEdge(HTHEME
hTheme, HWND hWnd, HRGN hRgnUpdate = NULL, HBRUSH
hBrush = NULL, int nPartID = 0, int nStateID = 0)
Трудно сказать точно что делает эта функция, но судя
по названию занимается отрисовкой специфичных для конкретной
темы частей элементов управления в Windows XP.
Файл atluser.h
inline int AtlMessageBox(HWND
hWndOwner, _U_STRINGorID message, _U_STRINGorID title
= (LPCTSTR)NULL, UINT uType = MB_OK | MB_ICONINFORMATION)
Функция для более удобного вывода popup-сообщений,
если так можно выразиться. В недрах функции вызывается
MessageBox.
Ну вот и все на сегодня. Если вы заметили какую-либо
неточность или Вам есть что добавить, то я всегда буду
рад любым отзывам, которые вы можете кидать мне softonic@narod.ru
В следующем выпуске я планирую рассказать о том, как
работает механизм передачи сообщений по майлслотам
и как им пользоваться, как это делают Winpopup и net
send.
Всего наилучшего. |