Отправляет email-рассылки с помощью сервиса Sendsay

Инвестиции: Вопрос-Ответ

  Все выпуски  

C/C++ Вопрос-Ответ Недокументированные функции (часть 0)


Информационный Канал Subscribe.Ru

Visual C++ - расширенное программирование

Выпуск № 14
Cайт : SoftMaker.com.ru
Архив рассылки : SoftMaker.com.ru
Количество подписчиков : 1191
В этом выпуске
От автора

Здравствуйте уважаемые подписчики !

Наверно, не многие из Вас прочитают данный выпуск в старом, 2004-м году, поэтому всех Вас я искренне поздравляю

С Новым Годом !

Хочу пожелать вам в новом году счастья и творческих успехов !


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

Напомню, что вы можете задавать свои вопросы по C и C++ в рассылке C/C++ Вопрос Ответ.
Также вы можете оперативно обсуждать вопросы программирования в дискуссионном листе Программирование. Форум !!!.

С уважением, Вахтуров Виктор.

Exceptional MFC

Недокументированные функции (часть 0)

Вместо вступления

Сегодня буду краток (раз уж рассылка выходит под новый год, не буду обременять вас, дорогие подписчики, ни пространным вступлением, ни длинным выпуском.
Тема сегодняшнего выпуска - недокументированные функции. Недокументированные функции, которые входят в библиотеку MFC. Под "недокументированностью" здесь я подразумеваю те факты, что эти функции не описаны в документации Microsoft (конкретно - в MSDN). Здесь немного оговорюсь - в поиске по MSDN можно найти упоминания некоторых из этих функций, но не в контексте документации, а обычно в плане описания багов MFC. Не удалось мне найти упоминания о большинстве этих функций и в поисковиках.
Также замечу, что здесь, конечно же описывается совсем не полный перечень функций, которые могут быть полезны, но недокументированы. Я просто взял несколько интересных функций из своих заметок и "задокументировал" :) их здесь. Использовать или не использовать эти функции - дело ваше. Однако, на мой взгляд, многие из них достойны внимания (некоторые я сам интенсивно использую в своих проектах - они просто избавляют от необходимости писать такие же, но свои).
И напоследок - все что здесь описано я "нашел" в исходниках MFC (которые любезно поставляются Microsoft). Так что господа, читайте исходный код !

Работа с окнами

Согласитесь, нижеследующие функции достаточно актуальны в ряде случаев.

Функция AfxGetParentOwner
Декларирована AFXIMPL.H
Реализована WINCORE.CPP

Прототип
HWND AFXAPI AfxGetParentOwner(HWND hWnd);

Комментарии
Если выполнен сабклассинг окна hWnd библиотекой MFC, то возвращается окно Owner-окно MFC (при помощи CWnd::GetOwner). Если нет, то если окно является дочерним другому, возвращается его родитель (::GetParent(hWnd)), иначе - его хозяин (::GetWindow(hWnd, GW_OWNER)).

Функция AfxIsDescendant
Декларирована AFXIMPL.H
Реализована WINFRM.CPP

Прототип
BOOL AFXAPI AfxIsDescendant(HWND hWndParent, HWND hWndChild);

Комментарии
Возвращает TRUE, если окно hWndChild является потомком (даже не прямым (!)) окна hWndParent, и FALSE в противном случае.

Функция _AfxChildWindowFromPoint
Декларирована AFXIMPL.H
Реализована WINUTIL.CPP

Прототип
HWND AFXAPI _AfxChildWindowFromPoint(HWND hWnd, POINT pt);

Комментарии
Находит дочернее окно, в которое "попадает" точка pt.

Работа с именами файлов и каталогов

Функция AfxFullPath
Декларирована AFXIMPL.H
Реализована FILECORE.CPP

Прототип
BOOL AFXAPI AfxFullPath(LPTSTR lpszPathOut, LPCTSTR lpszFileIn);

Комментарии
Возвращает полный путь к файлу (копирует в lpszPathOut) по относительному пути к нему (lpszFileIn).

Функция AfxGetRoot
Декларирована AFXIMPL.H
Реализована FILECORE.CPP

Прототип
void AFXAPI AfxGetRoot(LPCTSTR lpszPath, CString& strRoot);

Комментарии
Определяет корневой каталог вида: x:\ или \\server\share\ для заданного пути (lpszPath).

Функция AfxComparePath
Декларирована AFXIMPL.H
Реализована FILECORE.CPP

Прототип
BOOL AFXAPI AfxComparePath(LPCTSTR lpszPath1, LPCTSTR lpszPath2);

Комментарии
Проверяет "идентичность" переданных путей.

Функция AfxGetFileTitle
Декларирована AFXIMPL.H
Реализована FILECORE.CPP

Прототип
UINT AFXAPI AfxGetFileTitle(LPCTSTR lpszPathName, LPTSTR lpszTitle, UINT nMax);

Комментарии
Выделяет название файла из переданной строки-пути (lpszPathName).

Функция AfxGetModuleShortFileName
Декларирована AFXPRIV.H
Реализована FILECORE.CPP

Прототип
void AFXAPI AfxGetModuleShortFileName(HINSTANCE hInst, CString& strShortName);

Комментарии
Возвращает имя файла модуля, соответствующего дескриптору hInst.

Функция AfxResolveShortcut
Декларирована AFXIMPL.H
Реализована FILECORE.CPP

Прототип
BOOL AFXAPI AfxResolveShortcut(CWnd* pWnd, LPCTSTR pszShortcutFile, LPTSTR pszPath, int cchPath);

Комментарии
"Разрешает" ярлык.
Это подразумевает, что ели есть файл ярлыка, ссылающийся на другой файл, то функция возвратит имя файла, на который ссылается ярлык в строку pszShortcutFile. Также работает "многоуровневое" разрешение (когда ярлык ссылается на ярлык, и.т.д.

Для отладки

Функция AfxIsValidAddress
Декларирована AFX.H
Реализована VALIDADD.CPP

Прототип
BOOL AFXAPI AfxIsValidAddress(const void* lp, UINT nBytes, BOOL bReadWrite = TRUE);

Комментарии
Проверяет блок памяти на доступность для чтения/записи.

Функция AfxIsValidString
Декларирована AFX.H
Реализована VALIDADD.CPP

Прототип
BOOL AFXAPI AfxIsValidString(LPCWSTR lpsz, int nLength = -1);

Комментарии
Проверяет корректность указателя на юникодную строку.

Функция AfxIsValidString
Декларирована AFX.H
Реализована VALIDADD.CPP

Прототип
BOOL AFXAPI AfxIsValidString(LPCSTR lpsz, int nLength = -1);

Комментарии
Проверяет корректность указателя на ASCII-строку.

Функция AfxDumpMemoryLeaks
Декларирована AFX.H
Реализована AFXMEM.CPP

Прототип
BOOL AFXAPI AfxDumpMemoryLeaks();

Комментарии
Выводит отладочную информацию об утечках памяти.
Только для отладки ! В релиз-конфигурации она просто определяется как TRUE.

Функция AfxIsMemoryBlock
Декларирована AFX.H
Реализована AFXMEM.CPP

Прототип
BOOL AFXAPI AfxIsMemoryBlock(const void* p, UINT nBytes, LONG* plRequestNumber = NULL);

Комментарии
Проверяет корректность блока памяти.
Только для отладки ! В релиз-конфигурации она просто определяется как TRUE.

Функция AfxCheckMemory
Декларирована
Реализована

Прототип
BOOL AFXAPI AfxCheckMemory();

Комментарии
Возвращает TRUE, если с памятью "все в порядке". И выводит диагностику, если это не так.
Только для отладки ! В релиз-конфигурации она просто определяется как TRUE.

Книги по C++, Visual C++, MFC
Visual C++ и MFC. Руководство для профессионалов.
Visual C++ и MFC. Руководство для профессионалов.

Автор: А. Мешков, Ю. Тихомиров

Книга посвящена объектно-ориентированному программированию для 32-х разрядных систем Windows семейств 9x и NT с использованием компилятора Visual C++ 6 и библиотеки классов MFC версии 4.23.
Книга содержит исчерпывающую информацию о библиотеке классов MFC и методах создания приложений Windows на основе классов этой библиотеки, а также большое количество наглядных и подробно прокомментированных примеров приложений, полные тексты которых приведены на сопроводительной дискете.

Эта книга - для программистов, владеющих языками С и С++ и имеющих опыт программирования в системе Windows

Страница книги на Озоне
Язык программирования Си.
Язык программирования Си.

Автор: Брайан Керниган, Деннис Ритчи

Это - легендарная книга разработчиков языка Си, давно ставшая классикой для всех изучающих и использующих как Си, так и Си++.
Данная книга переработана и дополнена с учетом стандарта ANSI языка C.
Для настоящего третьего русского издания перевод заново сверен с оригиналом, в него внесены некоторые поправки, учитывающие устоявшиеся за прошедшие годы изменения в терминологии, а так же учтены авторские замечания.
Книга будет полезна всем без исключения: программистам, преподавателям, студентам.

Страница книги на Озоне
Рассылки и дискуссионные листы компьютерной тематики
Рассылки
C/C++ Вопрос-Ответ

Это - интерактивная рассылка !
Здесь Вы можете задать свой вопрос по программированию на C и C++, а также ответить на вопросы других подписчиков.

Дискуссионные листы
Программирование. Форум !!!

Самый популярный дискуссионный лист по программированию на subscribe.ru, существующий с момента открытия сервиса дискуссионных листов !

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

Вебстроительство. Форум !!!

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

Поисковые системы. Форум !!!

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

Хостинг. Обзоры и обсуждения платного и бесплатного хостинга.

Вы ищете хостинг (платный, бесплатный) ? Хотите спросить совета в выборе ? Можете обсудить это здесь. Поделитесь советом, если знаете. Или узнайте больше. Все о хостинге.


Всего доброго. До встречи в следующем номере.

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cppqa
Отписаться

В избранное