Някои функции на 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]