103 lines
2.5 KiB
C++
103 lines
2.5 KiB
C++
void myDoTRACE(LPCTSTR lpszFormat, ...);
|
|
|
|
#ifdef _DEBUG
|
|
#define myTRACE myDoTRACE
|
|
#else
|
|
#define myTRACE 1 ? (void)0 : myDoTRACE
|
|
#endif
|
|
|
|
long myRound(double const &x);
|
|
|
|
const CString myGetLastErrorMsg();
|
|
HRESULT myAtlReportError(const CLSID & clsid, LPCTSTR lpszFormat, ...);
|
|
const CString myCString(LPCTSTR lpszFormat, ...);
|
|
|
|
class myTempPEN
|
|
{
|
|
public:
|
|
myTempPEN(HDC hDC, int w, COLORREF clr)
|
|
{
|
|
m_hDC = hDC;
|
|
HPEN hpenNew;
|
|
hpenNew = CreatePen(PS_SOLID, w, clr);
|
|
m_hpenOld = (HPEN)SelectObject(m_hDC, hpenNew);
|
|
}
|
|
~myTempPEN()
|
|
{
|
|
HPEN hpenNew = (HPEN)SelectObject(m_hDC, m_hpenOld);
|
|
DeleteObject(hpenNew);
|
|
}
|
|
private:
|
|
HPEN m_hpenOld;
|
|
HDC m_hDC;
|
|
};
|
|
|
|
#ifdef _DEBUG
|
|
// Niet in release mode want dan werkt NT4 niet meer
|
|
class CneutralGDI
|
|
{
|
|
public:
|
|
CneutralGDI(char *msg)
|
|
{
|
|
strncpy(m_msg, msg, sizeof(m_msg));
|
|
nGDI = GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS);
|
|
nUSER = GetGuiResources(GetCurrentProcess(), GR_USEROBJECTS);
|
|
};
|
|
|
|
~CneutralGDI()
|
|
{
|
|
int nGDIend = GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS);
|
|
int nUSERend = GetGuiResources(GetCurrentProcess(), GR_USEROBJECTS);
|
|
if (nGDI != nGDIend || nUSER != nUSERend)
|
|
{
|
|
myTRACE("\n================================================================");
|
|
myTRACE("\n= Leaking detected in %s.", m_msg);
|
|
myTRACE("\n= Lost %d GDI and %d USER objects",nGDIend - nGDI, nUSERend - nUSER);
|
|
myTRACE("\n================================================================");
|
|
}
|
|
};
|
|
BOOL hasLeak()
|
|
{
|
|
int nGDIend = GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS);
|
|
int nUSERend = GetGuiResources(GetCurrentProcess(), GR_USEROBJECTS);
|
|
return (nGDI != nGDIend || nUSER != nUSERend);
|
|
}
|
|
private:
|
|
int nGDI, nUSER;
|
|
char m_msg[2048];
|
|
};
|
|
#endif
|
|
|
|
class CmyTimer
|
|
{
|
|
public:
|
|
CmyTimer()
|
|
{
|
|
strcpy(m_msg, "Time");
|
|
QueryPerformanceCounter(&startTime);
|
|
CmyTimer::level++;
|
|
};
|
|
CmyTimer(const char*msg)
|
|
{
|
|
strncpy(m_msg, msg, sizeof(m_msg));
|
|
QueryPerformanceCounter(&startTime);
|
|
CmyTimer::level++;
|
|
}
|
|
~CmyTimer()
|
|
{
|
|
level--;
|
|
LARGE_INTEGER endTime;
|
|
LARGE_INTEGER frequency;
|
|
QueryPerformanceFrequency(&frequency);
|
|
QueryPerformanceCounter(&endTime);
|
|
myDoTRACE("\n%*s%s: %.0fms", CmyTimer::level*4, "", m_msg, ((double)(endTime.QuadPart -startTime.QuadPart))/frequency.QuadPart*1000);
|
|
}
|
|
private:
|
|
LARGE_INTEGER startTime;
|
|
char m_msg[2048];
|
|
protected:
|
|
static int level;
|
|
};
|
|
|
|
BOOL isDarkRGB(COLORREF const& clr);
|