none
WindowProc消息处理 RRS feed

  • 问题

  • 下面这段代码MessageBox出现无法从const char* 转换为LPCWSTR,如何解决?(不想更改属性内的“使用UNICODE字符集”)

    LRESULT CALLBACK WindowProc(HWND hWnd ,UINT message , WPARAM wParam , LPARAM lParam)
    {
        HDC hDC;
     PAINTSTRUCT PaintSt;
     RECT aRect;
     switch (message)
     {
      case WM_PAINT:
       hDC=BeginPaint(hWnd,&PaintSt);
       GetClientRect(hWnd,&aRect);
       SetBkMode(hDC,TRANSPARENT);
       DrawText(hDC,
             L"This is my test application. ",
          -1,
          &aRect,
          DT_CENTER|
          DT_SINGLELINE|
          DT_VCENTER);
       EndPaint(hWnd,&PaintSt);
       return 0;
      case WM_CHAR:
       char szChar[20];
       sprintf(szChar,"char is %d",wParam);
                MessageBox(hWnd,szChar,"WeiXin",MB_OK);
       return 0;
      case WM_DESTROY:
       PostQuitMessage(0);
       return 0;
      default:
       return DefWindowProc(hWnd,message,wParam,lParam);
     }
    }



    2012年9月14日 5:04

答案

  • 使用您说的这些声明需要添加哪些头文件?

    我在MSDN中输入StringCchPrintf、TCHAR、_T上面好象没有显示它属于哪个头文件,您能简单告诉我有什么好方法来查找类似的一些声明属于哪个头文件吗?

    我是菜鸟正在学习中,非常感谢您的帮助!



    #include <tchar.h>
    #include <strsafe.h>
    如果没记错的话,应该是这两个吧

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年9月15日 14:22
    版主

全部回复

  • WCHAR* MultiByteToWideChar(char* buffer)
    {
    	int iRequiredSize = ::MultiByteToWideChar(CP_ACP, NULL, buffer, -1, NULL, 0);
    	WCHAR* pwchString = new WCHAR[iRequiredSize];
    	::MultiByteToWideChar(CP_ACP, NULL, buffer , -1, pwchString, iRequiredSize);
    	return pwchString;
    }
    This function can help you convert the Multibyte to the Widechar.
    2012年9月15日 0:31
  • 您的工程应该本身就设置的是Unicode编码的吧。

    char szChar[20];
       sprintf(szChar,"char is %d",wParam);
                MessageBox(hWnd,szChar,"WeiXin",MB_OK);
    --》
    TCHAR szChar[20] = {0};
    StringCchPrintf(szChar, _countof(szChar), _T("char is %d"), wParam);
    MessageBox(hWnd, szChar, _T("WeiXin"), MB_OK);


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年9月15日 2:31
    版主
  • 使用您说的这些声明需要添加哪些头文件?

    我在MSDN中输入StringCchPrintf、TCHAR、_T上面好象没有显示它属于哪个头文件,您能简单告诉我有什么好方法来查找类似的一些声明属于哪个头文件吗?

    我是菜鸟正在学习中,非常感谢您的帮助!


    2012年9月15日 3:30
  • 使用您说的这些声明需要添加哪些头文件?

    我在MSDN中输入StringCchPrintf、TCHAR、_T上面好象没有显示它属于哪个头文件,您能简单告诉我有什么好方法来查找类似的一些声明属于哪个头文件吗?

    我是菜鸟正在学习中,非常感谢您的帮助!



    #include <tchar.h>
    #include <strsafe.h>
    如果没记错的话,应该是这两个吧

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年9月15日 14:22
    版主
  • MessageBox改成MessageBoxA就可以了。当前工程是双字的,缺省MessageBox也是双字,LPCSTR当然不能直接变成LPCWSTR,显示调用单字的就可以了。

    MultiByteToWideChar是可以用的,但问题是输入字串的内码,还有内存的分配都非常麻烦。

    2012年9月20日 7:01