none
TextOut 输出的 后面多出乱码? RRS feed

  • 问题

  •  int x,y;
     TCHAR str[20];
     TCHAR Lstr[10];

     x = LOWORD(lParam);  //获取X坐标值
     y = HIWORD(lParam);  //获取Y坐标值

     SetTextColor(hdc,RGB(255,0,0));
     TextOut(hdc,10,10,_T("鼠标坐标:"),strlen("鼠标坐标:"));
     wsprintf(_T(str),_T("X坐标:%d"),x);
     TextOut(hdc,30,30,_T(str),wcslen(str));
     wsprintf(_T(str),_T("Y坐标:%d"),y);
     TextOut(hdc,30,50,_T(str),wcslen(str));

    2009年3月18日 8:01

答案

  •  int x = 0,y = 0;
     TCHAR str[20] = _T("");

     x = LOWORD(lParam);  //获取X坐标值
     y = HIWORD(lParam);  //获取Y坐标值

     SetTextColor(hdc,RGB(255,0,0));
     TextOut(hdc,10,10,_T("鼠标坐标:"), ::lstrlen(_T("鼠标坐标:")));
     wsprintf(str,_T("X坐标:%d"),x);
     TextOut(hdc,30,30,str,::lstrlen(str));
     wsprintf(str,_T("Y坐标:%d"),y);
     TextOut(hdc,30,50,str,::lstrlen(str));


    你错在乱用_T(X)宏。_T就相当于在X前面加个大写的L._T(abc)就是Labc.

    Window里面处理字符统一使用lstrlen, lstrcmp, lstrcat等。



    Hello world
    2009年3月20日 5:53
    版主

全部回复

  • 在str通过wsprintf后添加_T("\0");

    2009年3月19日 3:13
    版主
  •  能具体把代码写出来吗?谢谢

    2009年3月19日 6:02
  •  
    int x,y;  
     TCHAR str[20];  
     TCHAR Lstr[10];  
     
     x = LOWORD(lParam);  //获取X坐标值  
     y = HIWORD(lParam);  //获取Y坐标值  
     
     SetTextColor(hdc,RGB(255,0,0));  
     TextOut(hdc,10,10,_T("鼠标坐标:"),strlen("鼠标坐标:"));  
     int nBufferLength = wsprintf(_T(str),_T("X坐标:%d"),x);  
    if( nBufferLength >= 20)  
    {  
    return;  
    }  
    else  
    {  
        str[nBufferLength] = _T('\0');  
    }  
     TextOut(hdc,30,30,_T(str),wcslen(str));  
    ::ZeroMemory(str, 20 * sizeof(TCHAR));  
     nBufferLength  = wsprintf(_T(str),_T("Y坐标:%d"),y);  
    if( nBufferLength >= 20)  
    {  
    return;  
    }  
    else  
    {  
        str[nBufferLength] = _T('\0');  
    }  
     TextOut(hdc,30,50,_T(str),wcslen(str));  
     
     
    我没编译,大体是这样。
    2009年3月19日 7:39
    版主
  •  先谢谢你噢,我自己去研究下,这个问题弄的我烦

    是不行呀!X输出后面虽然没有乱码,但是X值变成随机了
    Y就是输不出。
    这个随机x,y 我自己也是弄到过,还是谢谢你
    2009年3月19日 8:02
  • 什么意思
    2009年3月20日 1:32
    版主
  •  int x = 0,y = 0;
     TCHAR str[20] = _T("");

     x = LOWORD(lParam);  //获取X坐标值
     y = HIWORD(lParam);  //获取Y坐标值

     SetTextColor(hdc,RGB(255,0,0));
     TextOut(hdc,10,10,_T("鼠标坐标:"), ::lstrlen(_T("鼠标坐标:")));
     wsprintf(str,_T("X坐标:%d"),x);
     TextOut(hdc,30,30,str,::lstrlen(str));
     wsprintf(str,_T("Y坐标:%d"),y);
     TextOut(hdc,30,50,str,::lstrlen(str));


    你错在乱用_T(X)宏。_T就相当于在X前面加个大写的L._T(abc)就是Labc.

    Window里面处理字符统一使用lstrlen, lstrcmp, lstrcat等。



    Hello world
    2009年3月20日 5:53
    版主