zoukankan      html  css  js  c++  java
  • 打印断言函数

    在写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" 
    


  • 相关阅读:
    项目成本管理控制成本
    项目成本管理制定预算
    完工尚需绩效指数 TCPI
    第八章 项目质量管理
    第七章:项目成本管理
    项目时间管理制定进度计划
    PV EV AC BAC EAC ETC等计算公式
    项目时间管理控制进度
    淘小宝相册图片批量下载工具
    WebBrowser.Navigate异步运行,使其与其他进程同步的方法
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693726.html
Copyright © 2011-2022 走看看