在写directUi时,用到一些函数断言,记录下:
assert(a != 0); //assert.h,此函数会将错误信息显示在命令行中,在命令行中显示出错的语句和行数
_ASSERTE(a != 0); //crtdbg.h,此宏会显示出在此宏中的语句
_ASSERT(a != 0); //crtdbg.h,此宏不会显示在此宏中的语句,而只是显示出错的行数
这样写:
#ifdef _DEBUG
#define TRACE __Trace
#define TRACEMSG __TraceMsg
#else
#define TRACE
#define TRACEMSG _T("")
#endif
#define lengthof(x) (sizeof(x)/sizeof(*x))
void __Trace(LPCTSTR pstrFormat, ...)
{
#ifdef _DEBUG
TCHAR szBuffer[300] = { 0 };
va_list args;
va_start(args, pstrFormat);
::wvnsprintf(szBuffer, lengthof(szBuffer) - 2, pstrFormat, args);
_tcscat(szBuffer, _T("\n"));
va_end(args);
::OutputDebugString(szBuffer);
#endif
}
LPCTSTR __TraceMsg(UINT uMsg)
{
#ifdef UNICODE
#define MSGDEF(x) if(uMsg==x) return L#x
#else
#define MSGDEF(x) if(uMsg==x) return #x
#endif
MSGDEF(WM_SETCURSOR);
MSGDEF(WM_NCHITTEST);
MSGDEF(WM_NCPAINT);
MSGDEF(WM_PAINT);
MSGDEF(WM_ERASEBKGND);
MSGDEF(WM_NCMOUSEMOVE);
MSGDEF(WM_MOUSEMOVE);
MSGDEF(WM_MOUSELEAVE);
MSGDEF(WM_MOUSEHOVER);
MSGDEF(WM_NOTIFY);
MSGDEF(WM_COMMAND);
MSGDEF(WM_MEASUREITEM);
MSGDEF(WM_DRAWITEM);
MSGDEF(WM_LBUTTONDOWN);
MSGDEF(WM_LBUTTONUP);
MSGDEF(WM_LBUTTONDBLCLK);
MSGDEF(WM_RBUTTONDOWN);
MSGDEF(WM_RBUTTONUP);
MSGDEF(WM_RBUTTONDBLCLK);
MSGDEF(WM_SETFOCUS);
MSGDEF(WM_KILLFOCUS);
MSGDEF(WM_MOVE);
MSGDEF(WM_SIZE);
MSGDEF(WM_SIZING);
MSGDEF(WM_MOVING);
MSGDEF(WM_GETMINMAXINFO);
MSGDEF(WM_CAPTURECHANGED);
MSGDEF(WM_WINDOWPOSCHANGED);
MSGDEF(WM_WINDOWPOSCHANGING);
MSGDEF(WM_NCCALCSIZE);
MSGDEF(WM_NCCREATE);
MSGDEF(WM_NCDESTROY);
MSGDEF(WM_TIMER);
MSGDEF(WM_KEYDOWN);
MSGDEF(WM_KEYUP);
MSGDEF(WM_CHAR);
MSGDEF(WM_SYSKEYDOWN);
MSGDEF(WM_SYSKEYUP);
MSGDEF(WM_SYSCOMMAND);
MSGDEF(WM_SYSCHAR);
MSGDEF(WM_VSCROLL);
MSGDEF(WM_HSCROLL);
MSGDEF(WM_CHAR);
MSGDEF(WM_SHOWWINDOW);
MSGDEF(WM_PARENTNOTIFY);
MSGDEF(WM_CREATE);
MSGDEF(WM_NCACTIVATE);
MSGDEF(WM_ACTIVATE);
MSGDEF(WM_ACTIVATEAPP);
MSGDEF(WM_CLOSE);
MSGDEF(WM_DESTROY);
MSGDEF(WM_GETICON);
MSGDEF(WM_GETTEXT);
MSGDEF(WM_GETTEXTLENGTH);
static TCHAR szMsg[10];
::wsprintf(szMsg, _T("0x%04X"), uMsg);
return szMsg;
}
#
表示为后面的内容加上引号
#define tostring(x) L#x
tostring(abc) == L"abc"