Някои функции на WTL
Здравейте скъпи читатели.
Мина известно време, откакто пуснах нов бюлетин, но изглежда никой не забеляза :)
Е, добре, така че се замислих за какво да пиша и реших да направя малка версия за някои WTL функции. Така че да започваме.
Някои WTL функции
Някои глобални макроси и функции са дефинирани в заглавните файлове ATL и WTL. ATL функциите и макросите, доколкото мога да разбера, са документирани в MSDN и техните WTL двойници трябва да бъдат уловени един по един и да бъдат разгледани индивидуално. Ето списъка, който измислих:
atlapp.h файл
вграден bool AtlIsOldWindows()
Функцията проверява текущата версия на Windows и връща TRUE, ако версията е "по-стара" от Windows 2000.
вграден HFONT AtlGetDefaultGuiFont()
Получава манипулатора на шрифта по подразбиране, който се използва за потребителски обекти на менюто, като менюта и диалогови прозорци.
вграден BOOL AtlInitCommonControls(DWORD dwFlags)
Функцията извършва инициализация на стандартни контроли. Функцията извиква системната функция InitCommonControlsEx и й предава своя аргумент. Какви флагове да зададете, можете да прочетете в MSDN. Както казва MSDN, извикването на InitCommonControlsEx е „кумулативно“. Това означава, че чрез извикване на тази функция с един флаг, други необходими флагове могат да бъдат зададени отделно в следващите извиквания, вместо да се задават всички необходими флагове в едно извикване, въпреки че това също може да се направи.
вграден HRESULT AtlGetDllVersion(HINSTANCE hInstDLL, DLLVERSIONINFO* pDllVersionInfo)
Функцията приема два параметъра: манипулатор към заредената DLL и указател към структурата DLLVERSIONINFO. Функцията връща следните стойности: - ако параметърът pDllVersionInfo е валиден и функцията е внедрена в заредената DLLDllGetVersion (както казва MSDN, повечето системни DLL изпълняват тази функция), тогава стойността, върната от функцията DllGetVersion, се връща и структурата, към която е предаден указателят, се попълва. - ако указателят към структурата е NULL, се връща константата E_INVALIDARG - ако функцията не е имплементирана в Dll, тогава се връща константата E_NOTIMPL
вграден HRESULT AtlGetDllVersion(LPCTSTR lpstrDllName, DLLVERSIONINFO* pDllVersionInfo)
Функцията е подобна на предишната, но не взема манипулатор, а името на DLL, която сама зарежда и разтоварва.
вграден HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor)
Функцията връща версията на commctl32.dll в два параметъра, указатели към които се предават на функцията. Ако един от параметрите е NULL, тогава функцията връща константата E_INVAL > // Win95/WinNT 4.0 maj=4 min=00 // IE 3.x maj=4 min=70 // IE 4.0 maj=4 min=71 Мисля, че значението е ясно.
inline bool AtlIsAlphaBitmapResource(_U_STRINGorID изображение)
Странна особеност. Не е съвсем ясно какво прави и защо е необходимо, изглежда прави нещо, свързано с ресурсите в Windows XP.
atlmisc.h файл
вграден HACCEL AtlLoadAccelerators(_U_STRINGorID таблица) вграден HMENU AtlLoadMenu(_U_STRINGorID меню) вграден HBITMAP AtlLoadBitmap(_U_STRINGorID bitmap) вграден HCURSOR AtlLoadCursor(_U_STRINGorID курсор) вграден HICON AtlLoadIcon(_U_STRING или IDicon)
Всяка от функциите зарежда ресурс от текущото приложение, чийто ID е зададен като параметър.
вграден HBITMAP AtlLoadBitmapImage(_U_STRINGили > вграден HCURSOR AtlLoadCursorImage(_U_STRINGили > вграден HICON AtlLoadIconImage(_U_STRINGили >
Тези функции са подобни на предишните, с изключение на това, че зареждатресурси от работещо приложение с помощта на функцията LoadImage. Зареждането с функцията LoadImage е за предпочитане, тъй като функциите, които зареждат ресурси в предишни функции, като LoadBitmap, LoadIcon и др. са остарели според MSDN.
вграден HBITMAP AtlLoadSysBitmap(LPCTSTR lpBitmapName) вграден HCURSOR AtlLoadSysCursor(LPCTSTR lpCursorName) вграден HICON AtlLoadSysIcon(LPCTSTR lpIconName)
Зарежда системни (OEM) ресурси, като указатели на мишката или икони с удивителен знак. Валидирането на предадени стойности (т.е. идентификатори, които действително са дефинирани) е валидно само във версията DEBUG.
вграден HBITMAP AtlLoadSysBitmapImage(WORD wBitmap > вграден HCURSOR AtlLoadSysCursorImage(_U_STRINGили > вграден HICON AtlLoadSysIconImage(_U_STRINGили >
Функции, подобни на предишните, но ресурсите се зареждат чрез функцията 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 обекти с помощта на функцията GetStockObject API.
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 nPart >
Трудно е да се каже какво точно прави тази функция, но съдейки по името, тя се занимава с изобразяване на специфични за темата части от контроли в Windows XP.
atluser.h файл
inline int AtlMessageBox(HWND hWndOwner, _U_STRINGили >
Функция за по-удобно извеждане на изскачащи съобщения, така да се каже. Вътре във функцията се извиква MessageBox.
Е, това е всичко за днес. Ако забележите някаква неточност или имате какво да добавите, винаги ще се радвам на всяка обратна връзка, която можете да ми изпратите на [email protected]