各位大哥:
程序如下:
 void CDtestDlg::Ontest() 
{
// TODO: Add your control notification handler code here
int a=10, b=11;
CString ttt;
         ttt.Format("a = %d, b =%d", a, b);
         MessageBox(ttt);
}请问如何将
         CString ttt;
         ttt.Format("a = %d, b =%d", a, b);
         MessageBox(ttt);
这3句话写成一个通用的宏,宏输入格式要求类似与TRACE这个宏,作用同以上3句话。

解决方案 »

  1.   

    #define MSG_OUT(Arg_a, Arg_b) CString ttt;\
                                  ttt.Format("a = %d, b =%d", (Arg_a), (Arg_b));\
                                  AfxMessageBox(ttt);这样不知道行不行~
    没调试过不确定哦^_^#
      

  2.   

    宏又不能用不定个数的参数
    TRACE是直接定义为::AfxTrace也就是
    void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...);
    所以除非你自己写一个带可变参数的函数
    否则恐怕难以做到吧
      

  3.   

    #define MESSAGEBOXMACRO(a,b) CString ttt;\
                    {\
                        ttt.format ("a = %d,b = %d",a,b);\
                        MessageBox (ttt);\
                    }
      

  4.   

    danyueer(淡月儿:清水上的足音) ( ) 信誉:110  2004-11-13 11:34:00  得分: 0  
     
     
       #define MSG_OUT(Arg_a, Arg_b) CString ttt;\
                                  ttt.Format("a = %d, b =%d", (Arg_a), (Arg_b));\
                                  AfxMessageBox(ttt);这样不知道行不行~
    没调试过不确定哦^_^#写成   
      #define MSG_OUT(Arg_a, Arg_b) {CString ttt;\
                                  ttt.Format("a = %d, b =%d", (Arg_a), (Arg_b));\
                                  AfxMessageBox(ttt);}
    CString ttt;只能在{}起作用,不然可能回造成重复声明错误。  
     
      

  5.   

    哦忘记说了功能要和TRACE是一样的,只是TRACE在调试栏里显示,而我要显示一个对话框
    这句话
    CString ttt;\是无法通过编译的
    应该还是an_bachelor(一個單身漢)说的可能性比较高(实现实在),继续学习研究
      

  6.   

    你可以这样实验:
    #define MSG_OUT(Arg_a, Arg_b) CString s1;
    s1.Format("a = %d, b =%d", (Arg_a), (Arg_b));
    AfxMessageBox(s1);
      

  7.   

    #define OUT(a, b)   CString ttt;\
             ttt.Format("a = %d, b =%d", (a), (b));\
             MessageBox(ttt);
      

  8.   

    那就参考TRACE啊,呵呵,可变参数个数的函数比较困难,呵呵