По своему опыту программирования у меня накопилось множество небольших функций и классов которые 'кочуют' из проекта в проект — это такие общие ф-ции и классы, к которым я так привык, что считаю что они всегда есть. Поэтому большинство моих выложенных здесь исходников программ и используют данный модуль.
    Практически все функции — это просто обёртки над их одноименными Win32 API аналогами. Ну, а функциональность других функций и классов вроде должна быть понятна из их названий. Но я всё-таки приведу описание к некоторым.

   Исходники библиотеки — это 3 файла. Заголовок CommonLib.h где описаны все ф-ции и классы, заголовок CommonLib.hpp содержащий реализацию inline функций, ну и реализация всего остального — в файле CommonLib.cpp. Выкачать всё в виде архива можно здесь.

Криптование
    Пару функций для Base64 и DES/3DES. Подробнее о Base64.


Чуть геометрии
    Размещение окна. Координата. Точка пикселя. Размер.
Всё это описывается с помощью стандартных структур RECT/COORD/POINT/SIZE. А так как лень каждый раз, например, перемещая прямоугольник окна, изменять значения аж 4! :) членов структуры, или, например, приводить точку к координате (2 операции!), то мной и был придуман этот велосипед для чистого API - классы RECTEX/COORDEX/POINTEX/SIZEEX. Я пронаследовался от каждой из структур, добавил свои методы. И так привык к этим расширениям, что теперь, даже когда пишу в MFC/WTL, вовсю ими пользуюсь вместо стандартных CRect/CPoint/CSize, благо они пронаследованы от одних структур.


Оконные функции
   Все ф-ции - это врапперы над одноимёнными API ф-циями, в которых OUT параметр теперь является просто результатом.
   Пример такой функции - GetWindowText. Для меня остаётся загадкой, почему ни в MFC, ни в WTL нет реализации GetWindowText, которая бы сразу возвращала строку. Ведь гораздо проше писать
      CString str = "Window text is [" + ::GetWindowText(hWnd) + "]";  
    
одной строкой, чем тоже самое на MFC
      CString strCaption;
      this->GetWindowText(strCaption);
      CString str = "Window text is [" + strCaption + "]";  
    
в 3 строки. В WTL аналогично MFC...

   Многие мои оконные ф-ции оперируют моими же классами RECTEX и POINTEX. Это такие ф-ции, как преобразование оконных/экранных координат, ф-ции позиционирования окна.


Время и дата.
    Удобные ф-ции для определения системного / локального времени и их конертации.


Около сетевые ф-ции.
    Это такие, как взятие у текущей машины IP адресса, имени хоста, имени машины, текущего пользователя. Также есть ф-ции определения типа файла по его MIME типу и наоборот.


Файлы и каталоги.
    Функции для выбора файла при его открытии/сохранении, выбор директории; определения размера файла; наличие файла/папки; выборка из полного пути только файла или директории; взятие текущего каталога, каталога Windows, системной директории, временного каталога. Есть также функции перечислния файлов по маске и папок.


Рисование
    Это функции для определения размера иконки и битмапы, создание битмапы и маски. Есть также ф-ции переноса контекста изображения, расширяющие стандартные BitBlt/StretchBlt, с целью уменьшения количества входных параметров. Так же есть функции переноса изображения по маске - это мой аналог функции TransparentBlt, только маска задаётся как самой маской, так и прозрачным цветом и множеством точек.


Реестр
    Это полность статический класс. Имея только одну строку вида 'ключ(ветка) \ имя значения' можно сделать как выборку из реестра, так и установку значения. Мне приходилось пока работать только со строковыми значениями, с целым типом и с бинарными данными. Поэтому там и есть только эти методы.
    Также есть методы для удаления ключа или конкретного значения. Для создания ветки и/или ключа со зачением нужно пользоваться методами устанавливающими значение.
    Предусмотрены методы перечисления как ключей, так и значений в заданной ветке. Есть два типа перечисляющих методов - обычное перечисление по индексу (для цикла) или задающей перечисление с пользовательской callback функцией.
   На счёт прав доступа - я непредусматривал. Беруться текущие права, по-умолчанию.
   Все эти методы дублируются одноимёнными методами, в которых параметр ключа задаётся традиционным дескриптором, а не строкой. Так что если нужно работать с прочими правами доступа, создавайте нужный хэндл сами, и вперёд!


Прочее
    Это такие ф-ции как описание ошибки по её коду, доступ к ресурам исполняемого модуля и их сохранение в внешний файл, класс для определения текущей ОС, произвольное форматирование строки и её сериализация.


Заголовок библиотеки CommonLib





  1. ////////////////////////////////////////////////////////////////////////////////  
  2. // File name: CommonLib.h  
  3. // Author: Sergey Krivulya (Ceргей Кpивуля) - KSerg (SeregaLBN)  
  4. // e-mail: SeregaLBN@gmail.com  
  5. // ICQ: 72099167  
  6. // WWW page: http://kserg77.narod.ru/CommonLib.html  
  7. // Date: 2010 01 12  
  8. //  
  9. // Description: Функции общего назначения.  
  10. ////////////////////////////////////////////////////////////////////////////////  
  11.   
  12. #ifndef __FILE__KSERG_COMMON_LIB__  
  13. #define __FILE__KSERG_COMMON_LIB__  
  14.   
  15. #pragma once  
  16.   
  17. #if !defined(__AFX_H__) && !defined(_WTL_USE_CSTRING) && !defined(__ATLSTR_H__)  
  18.    #include <Windows.h>  
  19.    #include "CStringKS.h"  
  20. #endif  
  21. #include <WindowsX.h>  
  22. #include <ShlObj.h>  
  23. #include <CommDlg.h>  
  24. #include <vector>  
  25.   
  26. #define chDIMOF(Array) (sizeof(Array) / sizeof(Array[0])) // количество элементов в массиве  
  27.   
  28. #ifndef MAKELONGLONG  
  29.    #define MAKELONGLONG(dwLow, dwHigh)  ((LONGLONG)((ULONGLONG(DWORD_PTR(dwLow)) & 0x00000000FFFFFFFFui64) | ((ULONGLONG(DWORD_PTR(dwHigh)) & 0x00000000FFFFFFFFui64) << 32)))  
  30. #endif  
  31.   
  32. #ifndef _ASSERT_EXPR  
  33.    #define _ASSERT_EXPR(a, b) _ASSERTE(((b), (a)))  
  34. #endif  
  35.   
  36. typedef unsigned (__stdcall *PTHREAD_START) (void *); // © Джеффри Рихтер  
  37. #define chBEGINTHREADEX(psa, cbStack, pfnStartAddr,   /* © Джеффри Рихтер*/ \  
  38.    pvParam, fdwCreate, pdwThreadId)                 \  
  39.       ((HANDLE)_beginthreadex(                      \  
  40.          (void *)        (psa),                     \  
  41.          (unsigned)      (cbStack),                 \  
  42.          (PTHREAD_START) (pfnStartAddr),            \  
  43.          (void *)        (pvParam),                 \  
  44.          (unsigned)      (fdwCreate),               \  
  45.          (unsigned *)    (pdwThreadId)))  
  46.   
  47. inline BOOL InitializeCriticalSectionEx(CRITICAL_SECTION &cs, DWORD dwSpinCount = 4000);  
  48.   
  49. // CRC  
  50. UINT32 Crc32(IN const BYTE* buf, IN DWORD len);  
  51. inline UINT32 Crc32(const CString &str);  
  52. inline UINT32 Crc32(LPCTSTR sz);  
  53.   
  54. // Base 64   
  55. BOOL Base64_Code(                                           // Кодирование бинарных данных  
  56.    IN BYTE const *pData,                                    //      на вход  - данные, которые надо зашифровать  
  57.    IN DWORD dwSize,                                         //                 и их размер  
  58.    OUT LPTSTR szCodeData,                                   //      на выход - зашифрованная строка  
  59.    IN OUT DWORD &dwLenInChar);                              //      length in TCHAR (if szCodeData == NULL then return length include EOL)  
  60. BOOL Base64_Decode(                                         // Декодирование бинарных данных  
  61.    IN LPCTSTR szIn,                                         //      На вход  - зашифрованная строка  
  62.    IN int iLenIn,                                           //                 Длина входной строки. Если == -1, то считаю длину сам...  
  63.    OUT BYTE *pData,                                         //      На выход - расшифрованные данные  
  64.    IN OUT DWORD &dwSize);                                   //      IN - размер буфера; OUT - сколько данных записано. Если dwSize==0 - возвращаю нужную длину буфера  
  65. BOOL Base64_Code(                                           // Кодирование бинарных данных  
  66.    IN BYTE const *pData,                                    //      на вход  - данные, которые надо зашифровать  
  67.    IN DWORD dwSize,                                         //                 и их размер  
  68.    OUT CString &strOut);                                    //      на выход - зашифрованная строка  
  69. BOOL Base64_Code  (IN LPCTSTR szIn, OUT CString &strOut);   // Кодирование строки  
  70. BOOL Base64_Decode(IN LPCTSTR szIn, OUT CString &strOut);   // Декодирование строки  
  71. // wrappers  
  72. inline CString Base64_Code(                                 // Кодирование бинарных данных  
  73.    IN BYTE const *pData,                                    //      на вход  - данные, которые надо зашифровать  
  74.    IN DWORD dwSize);                                        //                 и их размер  
  75. inline BOOL Base64_Decode(                                  // Декодирование бинарных данных  
  76.    IN const CString &strIn,                                 //      На вход  - зашифрованная строка  
  77.    OUT BYTE *pData,                                         //      На выход - расшифрованные данные  
  78.    IN OUT DWORD &dwSize);                                   //      IN - размер буфера; OUT - сколько данных записано. Если dwSize==0 - возвращаю нужную длину буфера  
  79. inline CString Base64_Code  (IN LPCTSTR szIn);              // Кодирование строки  
  80. inline CString Base64_Decode(IN LPCTSTR szIn);              // Декодирование строки  
  81.   
  82. // DES  
  83. BOOL EncryptDES(IN const BYTE* pKey, IN DWORD dwSizeKey, IN const BYTE* pData, IN DWORD dwSizeData, IN DWORD dwCryptModeDES, OUT BYTE* pCryptData, IN OUT DWORD &dwSizeCryptData);  
  84. BOOL DecryptDES(IN const BYTE* pKey, IN DWORD dwSizeKey, IN const BYTE* pCryptData, IN DWORD dwSizeCryptData, IN DWORD dwCryptModeDES, OUT BYTE* pDecryptData, IN OUT DWORD &dwSizeDecryptData);  
  85. BOOL Encrypt3DES(IN const BYTE* pKey, IN DWORD dwSizeKey, IN const BYTE* pData, IN DWORD dwSizeData, IN DWORD dwCryptModeDES, OUT BYTE* pCryptData, IN OUT DWORD &dwSizeCryptData);  
  86. BOOL Decrypt3DES(IN const BYTE* pKey, IN DWORD dwSizeKey, IN const BYTE* pCryptData, IN DWORD dwSizeCryptData, IN DWORD dwCryptModeDES, OUT BYTE* pDecryptData, IN OUT DWORD &dwSizeDecryptData);  
  87.   
  88. struct POINTEX: public POINT {  
  89.    POINTEX()                 {x=      y=0   ;}  
  90.    POINTEX(const POINT &p)   {x=p. x; y=p. y;}  
  91.    POINTEX(const SIZE  &p)   {x=p.cx; y=p.cy;}  
  92.    POINTEX(LONG nx, LONG ny) {x=  nx; y=  ny;}  
  93.    POINTEX& operator+= (const POINT &a) {x+=a.x; y+=a.y; return *this;}  
  94.    POINTEX& operator-= (const POINT &a) {x-=a.x; y-=a.y; return *this;}  
  95.    POINTEX& operator*= (LONG val      ) {x*=val; y*=val; return *this;}  
  96.    POINTEX& operator/= (LONG val      ) {x/=val; y/=val; return *this;}  
  97.    operator SIZE() const {SIZE result =   {x,y}; return result;}  
  98.  //operator RECT() const {RECT rect = {0,0,x,y}; return rect;}  
  99. };  
  100.   
  101. inline POINT operator*  (LONG  val     , const POINT &a) {return POINTEX(a.x*val, a.y*val);}  
  102. inline POINT operator*  (const POINT &a, LONG  val     ) {return POINTEX(a.x*val, a.y*val);}  
  103. inline POINT operator/  (const POINT &a, LONG  val     ) {return POINTEX(a.x/val, a.y/val);}  
  104. inline POINT operator+  (const POINT &a, const POINT &b) {return POINTEX(a.x+b.x, a.y+b.y);}  
  105. inline POINT operator-  (const POINT &a, const POINT &b) {return POINTEX(a.x-b.x, a.y-b.y);}  
  106. inline bool  operator== (const POINT &a, const POINT &b) {return (a.x==b.x && a.y==b.y);}  
  107. inline bool  operator!= (const POINT &a, const POINT &b) {return (a.x!=b.x || a.y!=b.y);}  
  108.   
  109. struct SIZEEX: public SIZE {  
  110.    SIZEEX()                 {cx=      cy=0   ;}  
  111.    SIZEEX(const SIZE  &p)   {cx=p.cx; cy=p.cy;}  
  112.    SIZEEX(const POINT &p)   {cx=p. x; cy=p. y;}  
  113.    SIZEEX(const RECT  &p)   {cx=p.right - p.left; cy=p.bottom-p.top;}  
  114.    SIZEEX(LONG nX, LONG nY) {cx=nX  ; cy=nY  ;}  
  115.    SIZEEX& operator+= (const SIZE &a) {cx+=a.cx; cy+=a.cy; return *this;}  
  116.    SIZEEX& operator-= (const SIZE &a) {cx-=a.cx; cy-=a.cy; return *this;}  
  117.    SIZEEX& operator*= (LONG val     ) {cx*=val ; cy*=val ; return *this;}  
  118.    SIZEEX& operator/= (LONG val     ) {cx/=val ; cy/=val ; return *this;}  
  119.    operator POINT() const {POINT result =   {cx,cy}; return result;}  
  120.    operator RECT () const {RECT  rect = {0,0,cx,cy}; return rect;}  
  121. };  
  122.   
  123. inline SIZE operator*  (LONG  val    , const SIZE &a) {return SIZEEX(a.cx*val , a.cy*val );}  
  124. inline SIZE operator*  (const SIZE &a, LONG  val    ) {return SIZEEX(a.cx*val , a.cy*val );}  
  125. inline SIZE operator/  (const SIZE &a, LONG  val    ) {return SIZEEX(a.cx/val , a.cy/val );}  
  126. inline SIZE operator+  (const SIZE &a, const SIZE &b) {return SIZEEX(a.cx+b.cx, a.cy+b.cy);}  
  127. inline SIZE operator-  (const SIZE &a, const SIZE &b) {return SIZEEX(a.cx-b.cx, a.cy-b.cy);}  
  128. inline bool operator== (const SIZE &a, const SIZE &b) {return (a.cx==b.cx && a.cy==b.cy);}  
  129. inline bool operator!= (const SIZE &a, const SIZE &b) {return (a.cx!=b.cx || a.cy!=b.cy);}  
  130.   
  131. struct COORDEX: public COORD {  
  132.    COORDEX()                   {X=     Y=0  ;}  
  133.    COORDEX(const COORD& p)     {X=p.X; Y=p.Y;}  
  134.    COORDEX(SHORT nX, SHORT nY) {X= nX; Y= nY;}  
  135.    COORDEX& operator+= (const COORD &a) {X+=a.X; Y+=a.Y; return *this;}  
  136.    COORDEX& operator-= (const COORD &a) {X-=a.X; Y-=a.Y; return *this;}  
  137.    COORDEX& operator*= (SHORT val     ) {X*=val; Y*=val; return *this;}  
  138.    COORDEX& operator/= (SHORT val     ) {X/=val; Y/=val; return *this;}  
  139. };  
  140.   
  141. inline COORD operator*  (SHORT val     , const COORD &a) {return COORDEX(a.X*val, a.Y*val);}  
  142. inline COORD operator*  (const COORD &a, SHORT val     ) {return COORDEX(a.X*val, a.Y*val);}  
  143. inline COORD operator/  (const COORD &a, SHORT val     ) {return COORDEX(a.X/val, a.Y/val);}  
  144. inline COORD operator+  (const COORD &a, const COORD &b) {return COORDEX(a.X+b.X, a.Y+b.Y);}  
  145. inline COORD operator-  (const COORD &a, const COORD &b) {return COORDEX(a.X-b.X, a.Y-b.Y);}  
  146. inline bool  operator== (const COORD &a, const COORD &b) {return (a.X==b.X && a.Y==b.Y);}  
  147. inline bool  operator!= (const COORD &a, const COORD &b) {return (a.X!=b.X || a.Y!=b.Y);}  
  148.   
  149. struct RECTEX: public RECT {  
  150.     // Перемещение прямоугольника по X и/или Y (без изменений размеров прямоугольника)  
  151.    RECTEX& moveX(LONG x)         {left += x; right += x; return *this;}  
  152.    RECTEX& moveY(LONG y)         {top  += y; bottom+= y; return *this;}  
  153.    RECTEX& move (LONG x, LONG y) {moveX(x); return moveY(y);}  
  154.    RECTEX& move (const SIZE  &p) {return move(p.cx, p.cy);}  
  155.   
  156.    // Выравнивание прямоугольника (без изменений размеров прямоугольника)  
  157.    RECTEX& alignLeft  (LONG l)         {right  += l-left  ; left   = l; return *this;} // выровнять прямоугольник по левой   стороне к заданному значению  
  158.    RECTEX& alignRight (LONG r)         {left   += r-right ; right  = r; return *this;} // выровнять прямоугольник по правой  стороне к заданному значению  
  159.    RECTEX& alignTop   (LONG t)         {bottom += t-top   ; top    = t; return *this;} // выровнять прямоугольник по верхней стороне к заданному значению  
  160.    RECTEX& alignBottom(LONG b)         {top    += b-bottom; bottom = b; return *this;} // выровнять прямоугольник по нижней  стороне к заданному значению  
  161.    RECTEX& alignLT    (LONG x, LONG y) {alignLeft (x); return alignTop   (y);}  
  162.    RECTEX& alignRT    (LONG x, LONG y) {alignRight(x); return alignTop   (y);}  
  163.    RECTEX& alignLB    (LONG x, LONG y) {alignLeft (x); return alignBottom(y);}  
  164.    RECTEX& alignRB    (LONG x, LONG y) {alignRight(x); return alignBottom(y);}  
  165.    RECTEX& alignLT    (const POINT &p) {return alignLT(p.x, p.y);}  
  166.    RECTEX& alignRT    (const POINT &p) {return alignRT(p.x, p.y);}  
  167.    RECTEX& alignLB    (const POINT &p) {return alignLB(p.x, p.y);}  
  168.    RECTEX& alignRB    (const POINT &p) {return alignRB(p.x, p.y);}  
  169.   
  170.    RECTEX& alignCenter(const POINT &c) {return move(SIZEEX(c-center()));}        // совместить центр прямоугольника с заданной точкой центра  
  171.    RECTEX& alignCenter(const RECT  &r) {return alignCenter(RECTEX(r).center());} // совместить центр прямоугольника с центром заданного прямоугольника  
  172.    RECTEX& alignCenter(LONG x, LONG y) {return alignCenter(POINTEX(x,y));}       // совместить центр прямоугольника с заданнымм координатами  
  173.   
  174.    // get/set metods  
  175.    LONG    width () const {return right -left;}  
  176.    LONG    height() const {return bottom-top ;}  
  177.    RECTEX& width (LONG w) {right  = left+w; return *this;}  
  178.    RECTEX& height(LONG h) {bottom = top +h; return *this;}  
  179.   
  180.    POINTEX pointLT() const           {return POINTEX(left , top   );}  
  181.    POINTEX pointRT() const           {return POINTEX(right, top   );}  
  182.    POINTEX pointLB() const           {return POINTEX(left , bottom);}  
  183.    POINTEX pointRB() const           {return POINTEX(right, bottom);}  
  184.    RECTEX& pointLT(LONG x, LONG y)   {left  = x; top    = y; return *this;}  
  185.    RECTEX& pointRT(LONG x, LONG y)   {right = x; top    = y; return *this;}  
  186.    RECTEX& pointLB(LONG x, LONG y)   {left  = x; bottom = y; return *this;}  
  187.    RECTEX& pointRB(LONG x, LONG y)   {right = x; bottom = y; return *this;}  
  188.    RECTEX& pointLT(const POINT& pLT) {return pointLT(pLT.x, pLT.y);}  
  189.    RECTEX& pointRT(const POINT& pRT) {return pointRT(pRT.x, pRT.y);}  
  190.    RECTEX& pointLB(const POINT& pLB) {return pointLB(pLB.x, pLB.y);}  
  191.    RECTEX& pointRB(const POINT& pRB) {return pointRB(pRB.x, pRB.y);}  
  192.   
  193.    POINTEX center()const          {return POINTEX(left+(width()>>1), top+(height()>>1));}  
  194.    RECTEX& center( const POINT&c) {return alignCenter( c );} // совместить центр прямоугольника с заданной точкой центра  
  195.    RECTEX& center( const RECT &r) {return alignCenter( r );} // совместить центр прямоугольника с центром заданного прямоугольника  
  196.    RECTEX& center(LONG x, LONG y) {return alignCenter(x,y);} // совместить центр прямоугольника с заданными координатами  
  197.    SIZEEX  size  ()const          {return SIZEEX(width(), height());}  
  198.    RECTEX& size  ( const SIZE &s) {width(s.cx); return height(s.cy);}  
  199.   
  200.    operator SIZE  () {return size();}  
  201.    operator SIZEEX() {return size();}  
  202.   
  203.    // constructors  
  204.    RECTEX(const POINT &pLT, const POINT pRB) {left=pLT.x  ; top=pLT.y ; right=pRB.x   ; bottom=pRB.y   ;}  
  205.    RECTEX(const RECT &r)                     {left=r.left ; top=r.top ; right=r.right ; bottom=r.bottom;}  
  206.    RECTEX(LONG l, LONG t, LONG r, LONG b)    {left=l      ; top=t     ; right=r       ; bottom=b       ;}  
  207.    RECTEX(const SIZE &size)                  {left=         top=0     ; right=size.cx ; bottom=size.cy ;}  
  208.    RECTEX(LONG width, LONG height)           {left=         top=0     ; right=width   ; bottom=height  ;}  
  209.    RECTEX()                                  {left=         top=        right=          bottom=0       ;}  
  210. };  
  211.   
  212. inline bool operator== (const RECT &a, const RECT &b) {return (a.left==b.left && a.top==b.top && a.right==b.right && a.bottom==b.bottom);}  
  213. inline bool operator!= (const RECT &a, const RECT &b) {return (a.left!=b.left || a.top!=b.top || a.right!=b.right || a.bottom!=b.bottom);}  
  214.   
  215. // не пользуясь неявным преобразованием ftol из CRT (при число -> число)  
  216. inline long  toLong (float);  
  217. inline int   toInt  (float);  
  218. inline float toFloat(long);  
  219. inline float toFloat(int);  
  220. inline int   toInt  (LPCTSTR);  
  221. inline long  toLong (LPCTSTR);  
  222. inline DWORD toDWord(LPCTSTR);  
  223.   
  224. inline long  toLong (float   val, OUT HRESULT&);  
  225. inline int   toInt  (float   val, OUT HRESULT&);  
  226. inline float toFloat(long    val, OUT HRESULT&);  
  227. inline float toFloat(int     val, OUT HRESULT&);  
  228. inline int   toInt  (LPCTSTR str, OUT HRESULT&);  
  229. inline long  toLong (LPCTSTR str, OUT HRESULT&);  
  230. inline DWORD toDWord(LPCTSTR str, OUT HRESULT&);  
  231.   
  232.   
  233. inline RECTEX FindInnerRect (const SIZE  &sizeInner, const SIZE &sizeOutward);  
  234. inline RECTEX FindInnerRect (const RECT  &rectInner, const RECT &rectOutward);  
  235. inline BOOL   PointInRect   (const POINT &point, const RECT &rect   ); // точка внутри прямоугольника?  
  236. inline BOOL   IntersectRect (const RECT  &rect1, const RECT &rect2  ); // пересекаются ли прямоугольники?  
  237. inline bool   PointInPolygon(const POINT &point, const POINT *const polygon, int size); // принадлежность точки фигуре  
  238.   
  239. inline SIZEEX GetScreenSize();  
  240.   
  241. inline RECTEX  ScreenToClient(HWNDconst RECT&);  
  242. inline POINTEX ScreenToClient(HWNDconst POINT&);  
  243. inline RECTEX  ClientToScreen(HWNDconst RECT&);  
  244. inline POINTEX ClientToScreen(HWNDconst POINT&);  
  245.   
  246. inline BOOL MoveWindow(HWNDconst RECT &rect, BOOL bRepaint = TRUE);  
  247. inline BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, const RECT &rect, UINT uFlags);  
  248.   
  249. inline RECTEX GetWindowRect(HWND hWnd);  
  250. inline SIZEEX GetWindowSize(HWND hWnd);  
  251. inline RECTEX GetClientRect(HWND hWnd);  
  252. inline SIZEEX GetClientSize(HWND hWnd);  
  253.   
  254. inline CString  GetClassName     (HWND);  
  255. inline WNDPROC  GetWindowProc    (HWND);  
  256. inline WNDPROC  SetWindowProc    (HWND, WNDPROC pWndProc);  
  257. #ifdef GetWindowStyle // see <WindowsX.h>  
  258.    #undef GetWindowStyle  
  259. inline DWORD    GetWindowStyle   (HWND); // переопределяю дэфайн из 'WindowsX.h'  
  260. #endif  
  261. inline DWORD    SetWindowStyle   (HWNDDWORD lStyle);  
  262. inline DWORD    GetWindowStyleEx (HWND); // есть аналог GetWindowExStyle из 'WindowsX.h'  
  263. inline DWORD    SetWindowStyleEx (HWNDDWORD lStyleEx);  
  264. inline LONG_PTR GetWindowUserData(HWND);  
  265. inline LONG_PTR SetWindowUserData(HWNDLONG_PTR lUserData);  
  266.   
  267. inline POINTEX GetCursorPos();  
  268. inline void ShowCursor();  
  269. inline void HideCursor();  
  270.   
  271. CString SelectFile(BOOL bOpenDialog, HWND hWndOwner, LPCTSTR szDefSelectedFile = NULL, LPCTSTR szDefExt = NULL, LPCTSTR szFilter = _T("All files (*.*)\0*.*\0\0"), LPCTSTR szTitle = NULL, LPCTSTR szInitialDir = NULL, DWORD dwFlags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_PATHMUSTEXIST);  
  272. CString SelectFolder(  
  273.    HWND hwndOwner  = NULL,                   // родительское окно для диалога  
  274.    LPCTSTR szTitle = _T("Open folder"),      // текст на окне  
  275.    DWORD dwFlags   = BIF_BROWSEFORCOMPUTER | BIF_DONTGOBELOWDOMAIN | BIF_EDITBOX,  
  276.    int nFolder     = /** /CSIDL_DRIVES/**/-1/**/); // если -1 - то вызов стандартного диалога выбора папки  
  277.                                              // иначе спецпапка - see CSIDL_... (func SHGetSpecialFolderLocation)  
  278.   
  279.   
  280. ULONGLONG GetFileSizeEx(LPCTSTR szFileName); // размер файла  
  281. DWORD     GetFileSize  (LPCTSTR szFileName); // размер файла  
  282. inline ULONGLONG GetFileSizeEx(HANDLE hFile); // размер файла  
  283.   
  284. BOOL ParseFileName(IN LPCTSTR szFullFileName, OUT CString &strDrive, OUT CString &strDir, OUT CString &strFileName, OUT CString &strExtension);  
  285. CString GetFileDir    (LPCTSTR szFullFileName); // возвращает только путь к файлу без имени файла (путь с наклонной чертой в конце)  
  286. CString GetFileName   (LPCTSTR szFullFileName); // возвращает только имя файла без пути  
  287. CString GetFileVersion(LPCTSTR szFileName, OUT WORD *pwVerMSHigh=NULL, OUT WORD *pwVerMSLow=NULL, OUT WORD *pwVerLSHigh=NULL, OUT WORD *pwVerLSLow=NULL);  
  288. inline BOOL PathExist(LPCTSTR szPath);  
  289. inline BOOL FileExist(LPCTSTR szPath);  
  290. inline CString GetModuleFileName(HMODULE hModule = NULL); // retrieves the full path and filename for the executable file containing the specified module  
  291. inline CString GetModuleDir     (HMODULE hModule); // возвращает путь к модулю без имени модуля (с наклонной чертой в конце)  
  292.   
  293. CString GetWindowText(HWND hWnd, int iMaxLen = -1);  
  294.   
  295. inline BOOL    SetMenuString(HMENU hMenu, UINT uItem, BOOL bByPosition, LPCTSTR szNewText);  
  296. inline CString GetMenuString(HMENU hMenu, UINT uItem, BOOL bByPosition);  
  297.   
  298.        CString GetIPAdress();  
  299.        CString GetHostName();  
  300. inline CString GetComputerName();  
  301. inline CString GetUserName();  
  302.   
  303. inline CString GetCurrentDirectory();  
  304. inline CString GetSystemDirectory();  
  305. inline CString GetWindowsDirectory();  
  306. inline CString GetTempPath();  
  307. //inline CString GetTempFileName(IN LPCTSTR szFile);  
  308.   
  309. inline CString MIMEType2FileType(LPCTSTR szMIMEType);  
  310. inline CString FileType2MIMEType(LPCTSTR szFileType);  
  311.   
  312. inline int rand(int maxDiapason); // генерирует случайное число от 0 до maxDiapason, ВКЛЮЧАЯ верхнюю границу  
  313.   
  314. CString MemCopyAsHex   (LPCVOID pData, DWORD dwSize, BOOL bUsePrefix = FALSE, LPCTSTR szSeparator = NULL);    // представить последовательность байт, например {0xF1, 0x59, 0x00, 0xF7}, как строку "0xF1, 0x59, 0x00, 0xF7" или "F1, 59, 00, F7" или "F15900F7"  
  315. CString MemCopyAsString(LPCVOID pData, DWORD dwSize, TCHAR chSeparatorEOL = _T('\n'), BOOL bUnicode = FALSE); // представить последовательность байт, например {0x38, 0x4D, 0x00, 0x69}, как строку "8M\ni"  
  316. BOOL    StringAsBytes  (IN const CString &str, OUT BYTE *pBuffer, IN OUT DWORD &dwSize); // обратная ф-ции MemCopyAsHex  -  представить строку, например "F15900F7", как строку последовательность байт {0xF1, 0x59, 0x00, 0xF7}  
  317. HRESULT MemBufferToSafeArray(IN const BYTE *pData, IN DWORD dwSize, OUT SAFEARRAY *&sarrData); // через SafeArrayCreate...  
  318. HRESULT SafeArrayToMemBuffer(IN SAFEARRAY *pSarrData, OUT BYTE *&pData, IN OUT DWORD &dwSize);  
  319. CString SafeArrayAsString(IN SAFEARRAY *pSarrData, TCHAR chSeparatorEOL = _T('\n'), BOOL bUnicode = FALSE, OUT HRESULT *phRes = NULL);  
  320.   
  321. void BeepSpeaker(DWORD dwFreq = 500, DWORD dwDuration = 0x25);  
  322.   
  323. inline CString Format(LPCTSTR szFormat, ...);  
  324. #ifndef _UNICODE  
  325.    inline CString AnsiToOem(LPCTSTR);  
  326.    inline CString OemToAnsi(LPCTSTR);  
  327. #endif // _UNICODE  
  328. inline CString Replace(IN const CString &str, IN LPCTSTR szOld, IN LPCTSTR szNew);  
  329. inline CString Replace(IN const CString &str, IN TCHAR    cOld, IN TCHAR    cNew);  
  330. inline CString LoadStringResource(UINT uID);  
  331. std::vector<CString> Split(IN const CString &str, IN LPCTSTR szSeparator, IN LPCTSTR szTrim=NULL);  
  332.   
  333. BOOL SerializeRead (IN HANDLE hFile, OUT      CString &str, UINT iMaxLength = 0x3FF);  
  334. BOOL SerializeWrite(IN HANDLE hFile, IN const CString &str);  
  335.   
  336. inline SAFEARRAYBOUND SafeArrayBound(ULONG cElements, LONG lLbound);  
  337. inline ULONG GetArrSize(const SAFEARRAY &arr); // размер одномерного массива  
  338.   
  339. class COSVersion {  
  340. private:  
  341.    OSVERSIONINFO m_vi;  
  342. public:  
  343.    COSVersion() {  
  344.       m_vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);  
  345.       BOOL bRes = ::GetVersionEx(&m_vi);  
  346.       if (!bRes) memset(&m_vi,0,sizeof(OSVERSIONINFO));  
  347.    }  
  348.    const OSVERSIONINFO& Get() const { return m_vi; }  
  349.    bool IsWin7()      const { return ((m_vi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (m_vi.dwMajorVersion == 6) && (m_vi.dwMinorVersion == 1)); }  
  350.    bool IsVista()     const { return ((m_vi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (m_vi.dwMajorVersion == 6) && (m_vi.dwMinorVersion == 0)); }  
  351.    bool IsWinXP()     const { return ((m_vi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (m_vi.dwMajorVersion == 5) && (m_vi.dwMinorVersion == 1)); }  
  352.    bool IsWin2000()   const { return ((m_vi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (m_vi.dwMajorVersion == 5) && (m_vi.dwMinorVersion == 0)); }  
  353.    bool IsWinNT()     const { return ((m_vi.dwPlatformId == VER_PLATFORM_WIN32_NT) && ((m_vi.dwMajorVersion == 4) || (m_vi.dwMajorVersion == 3))/* && (m_vi.dwMinorVersion == 0)*/); }  
  354.    bool IsWin9598Me() const { return ((m_vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (m_vi.dwMajorVersion == 4)); }  
  355.    bool IsWin95()     const { return ((m_vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (m_vi.dwMajorVersion == 4) && (m_vi.dwMinorVersion == 0)); }  
  356.    bool IsWin98()     const { return ((m_vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (m_vi.dwMajorVersion == 4) && (m_vi.dwMinorVersion == 10)); }  
  357.    bool IsWinMe()     const { return ((m_vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (m_vi.dwMajorVersion == 4) && (m_vi.dwMinorVersion == 90)); }  
  358. };  
  359.   
  360. inline SYSTEMTIME GetSystemTime();  
  361. inline SYSTEMTIME GetLocalTime();  
  362. inline FILETIME   GetSystemTimeAsFileTime();  
  363. inline SYSTEMTIME FileTimeToSystemTime(const FILETIME   &FileTime);  
  364. inline FILETIME   SystemTimeToFileTime(const SYSTEMTIME &SysTime);  
  365. inline FILETIME   FileTimeToLocalFileTime(const FILETIME &FileTime);  
  366. inline CString    SystemTimeToString(SYSTEMTIME st); // через SystemTimeToVariantTime & VariantChangeType  
  367. inline CString    FileTimeToString(const FILETIME &ft);  
  368.   
  369. class CRegistry {  
  370. public:  
  371.    // Agreement:  
  372.    //  
  373.    // HKEY_CURRENT_USER\SOFTWARE\MyProg\szParam = "string"  
  374.    // HKEY_CURRENT_USER\SOFTWARE\MyProg\dwParam = 0x000123  
  375.    //                                             |______|-- Value  
  376.    //                                   |______|------------ ValueName  
  377.    //                   |______________|-------------------- SubKey  
  378.    // |________________________________|-------------------- Key  
  379.    // |________________________________________|------------ KeyName (Key + ValueName)  
  380.    //  
  381.   
  382.    // read methods  
  383.    static CString GetString(IN HKEY hKey, IN LPCTSTR szValueName);                                           // Return value  
  384.    static DWORD   GetDWord (IN HKEY hKey, IN LPCTSTR szValueName);                                           // Return value  
  385.    static DWORD   GetBinary(IN HKEY hKey, IN LPCTSTR szValueName, OUT BYTE *pbValue, IN OUT DWORD &cbValue); // Return error code!!!  
  386.    // write methods  
  387.    static DWORD   SetString(IN HKEY hKey, IN LPCTSTR szValueName, IN LPCTSTR szValue);                       // Return error code  
  388.    static DWORD   SetDWord (IN HKEY hKey, IN LPCTSTR szValueName, IN DWORD   dwValue);                       // Return error code  
  389.    static DWORD   SetBinary(IN HKEY hKey, IN LPCTSTR szValueName, IN const BYTE *pbValue, IN DWORD cbValue); // Return error code  
  390.   
  391.    // read methods  
  392.    static CString GetString(IN LPCTSTR szKeyName);                                               // Return value.         Example - "HKEY_CURRENT_USER\\SOFTWARE\\strParam"  
  393.    static DWORD   GetDWord (IN LPCTSTR szKeyName);                                               // Return value.         Example - "HKEY_CURRENT_USER\\SOFTWARE\\dwParam"  
  394.    static DWORD   GetBinary(IN LPCTSTR szKeyName, OUT BYTE *pbValue, IN OUT DWORD &dwSizeValue); // Return error code!!!. Example - "HKEY_CURRENT_USER\\SOFTWARE\\bnParam", you byte array for result, size byte array.  
  395.    // write methods  
  396.    static DWORD   SetString(IN LPCTSTR szKeyName, IN LPCTSTR szValue);                       // Return error code. Example - "HKEY_CURRENT_USER\\SOFTWARE\\strParam", "value"  
  397.    static DWORD   SetDWord (IN LPCTSTR szKeyName, IN DWORD   dwValue);                       // Return error code. Example - "HKEY_CURRENT_USER\\SOFTWARE\\dwParam", 123  
  398.    static DWORD   SetBinary(IN LPCTSTR szKeyName, IN const BYTE *pbValue, IN DWORD cbValue); // Return error code. Example - "HKEY_CURRENT_USER\\SOFTWARE\\bnParam", you byte array, size byte array.  
  399.   
  400.    // delete methods  
  401.    static BOOL DeleteKey  (IN HKEY     hKey, IN LPCTSTR szSubKey);  
  402.    static BOOL DeleteKey  (IN LPCTSTR szKey, IN LPCTSTR szSubKey);  
  403.    static BOOL DeleteValue(IN HKEY     hKey, IN LPCTSTR szValueName);  
  404.    static BOOL DeleteValue(IN LPCTSTR szKeyName);  
  405.   
  406.    // is exist  
  407.    static BOOL ExistKey  (IN HKEY     hKey);  
  408.    static BOOL ExistKey  (IN LPCTSTR szKey);     // Example - "HKEY_CURRENT_USER\\SOFTWARE\\MyProg\\"  
  409.    static BOOL ExistValue(IN HKEY     hKey, IN LPCTSTR szValueName, OUT LPDWORD pdwRegType = NULL);  
  410.    static BOOL ExistValue(IN LPCTSTR szKeyName, OUT LPDWORD pdwRegType = NULL); // Example - "HKEY_CURRENT_USER\\SOFTWARE\\MyProg\\param"  
  411.   
  412.    static BOOL CRegistry::GetKeyPath(IN HKEY hKey, OUT CString &strKeyPath);  
  413.   
  414.    // find methods  
  415.    typedef BOOL (CALLBACK* SUBKEYENUMPROC   )(IN HKEY hKey, IN LPCTSTR szKey, IN DWORD dwIndex, IN LPCTSTR szSubKey, IN LPVOID lpUserData); // if return FALSE -> stop enumerators  
  416.    typedef BOOL (CALLBACK* VALUENAMEENUMPROC)(IN HKEY hKey, IN LPCTSTR szKey, IN DWORD dwIndex, IN LPCTSTR szValueName, IN DWORD dwType, IN LPVOID lpUserData); // if return FALSE -> stop enumerators  
  417.   
  418.    static BOOL    EnumSubKeyName(IN HKEY     hKey, IN SUBKEYENUMPROC lpEnumFunc, IN LPVOID lpUserData);  
  419.    static BOOL    EnumSubKeyName(IN LPCTSTR szKey, IN SUBKEYENUMPROC lpEnumFunc, IN LPVOID lpUserData);  
  420.    static CString EnumSubKeyName(IN HKEY     hKey, IN DWORD dwIndex);  
  421.    static CString EnumSubKeyName(IN LPCTSTR szKey, IN DWORD dwIndex); // example - "HKEY_CURRENT_USER\\SOFTWARE", 1  or  "HKEY_CURRENT_USER\\SOFTWARE\\", 1  
  422.   
  423.    static BOOL    EnumValueName (IN HKEY     hKey, IN VALUENAMEENUMPROC lpEnumFunc, IN LPVOID lpUserData);  
  424.    static BOOL    EnumValueName (IN LPCTSTR szKey, IN VALUENAMEENUMPROC lpEnumFunc, IN LPVOID lpUserData);  
  425.    static CString EnumValueName (IN HKEY     hKey, IN DWORD dwIndex, OUT DWORD &dwType);  
  426.    static CString EnumValueName (IN LPCTSTR szKey, IN DWORD dwIndex, OUT DWORD &dwType); // example - "HKEY_CURRENT_USER\\SOFTWARE", 1  or  "HKEY_CURRENT_USER\\SOFTWARE\\", 1  
  427. };  
  428.   
  429. inline HINSTANCE GetModuleInstance();  
  430. inline HINSTANCE GetResourceInstance();  
  431. inline HINSTANCE __stdcall GetInstanceFromAddress(PVOID pEip); // возвращает HINSTANCE модуля, из которого была вызвана эта функция (© Alex Fedotov rsdn)  
  432. inline HINSTANCE __stdcall GetCurrentInstance();               // возвращает HINSTANCE модуля, из которого была вызвана эта функция (© Alex Fedotov rsdn)  
  433.   
  434. inline CString GUID2String(IN REFGUID guid);  
  435.        BOOL    String2GUID(IN LPCTSTR szGUID, OUT GUID &guid); // example - {00000000-0000-0000-C000-000000000046} to IID_IUnknown  
  436. inline GUID    String2GUID(IN LPCTSTR szGUID); // при ошибке вернёт {FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}  
  437. inline GUID    CoCreateGuid();  
  438.   
  439. // Описание ошибки, если есть. (Возможен пустой ответ)  
  440. CString ErrCode2Str(IN DWORD dwErrCode = ::GetLastError(), DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) );  
  441. CString ErrCode2Str(IN HMODULE hModule, IN DWORD dwErrCode, DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) );  
  442. CString ErrCode2Str(IN LPCTSTR lpModuleName, IN DWORD dwErrCode, DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) );  
  443.        CString WinInetErrCode2Str(IN DWORD dwErrCode, DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) ); // from WinInet.dll  \__ Почти одно и тоже...  
  444. inline CString WinHttpErrCode2Str(IN DWORD dwErrCode, DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) ); // from WinHttp.dll  /  
  445. CString DosError2Str(int iDosErr);  
  446.   
  447. typedef BOOL (CALLBACK* FILEENUMPROC)(IN LPCTSTR szDirName, IN LPCTSTR szFileName  , IN UINT iPos, IN LPVOID lpUserData); // if return FALSE -> stop enumerators  
  448. typedef BOOL (CALLBACK* DIRENUMPROC )(IN LPCTSTR szDirName, IN LPCTSTR szSubDirName, IN UINT iPos, IN LPVOID lpUserData); // if return FALSE -> stop enumerators  
  449. BOOL EnumFiles (IN LPCTSTR szDirName, IN LPCTSTR szMask, IN FILEENUMPROC lpEnumFunc, IN LPVOID lpUserData); // перечисление файлов  
  450. BOOL EnumSubDir(IN LPCTSTR szDirName,                    IN  DIRENUMPROC lpEnumFunc, IN LPVOID lpUserData); // перечисление поддиректорий  
  451.   
  452. inline CString Locale(WORD wIDLanguage, LCTYPE LCType = LOCALE_SLANGUAGE);  
  453.   
  454. inline HMODULE GetLibrary(IN LPCTSTR szDLL, IN BOOL bAsDataFile, OUT BOOL &bLoadLibrary); // найти загруженную библиотеку, а если нет - самому загрузить  
  455.   
  456. inline void alert(LPCTSTR); // аналог JScript alert'а  
  457. inline void alert(int);  
  458. inline void alert(double);  
  459.   
  460. inline void AtomicMax32(IN OUT volatile LONG     &lVal, IN LONG     lMayBeNewMax);  
  461. //inline void AtomicMax64(IN OUT volatile LONGLONG &lVal, IN LONGLONG lMayBeNewMax);  
  462. inline void AtomicMin32(IN OUT volatile LONG     &lVal, IN LONG     lMayBeNewMin);  
  463. //inline void AtomicMin64(IN OUT volatile LONGLONG &lVal, IN LONGLONG lMayBeNewMin);  
  464.   
  465. #include "CommonLib.hpp"  
  466.   
  467. #endif // __FILE__KSERG_COMMON_LIB__  
подсвечено http://www.thecomplex.plus.com/highlighter.html



Hosted by uCoz