LRESULT CALLBACK WinProc(HWND hwnd,
UINT message,
WPARAM wparam,
additional message information,
LPARAM lparam) 
{
 ………………
MessageBox(hwnd, lpctstr, _T("WinMain"), MB_OKCANCEL);
}在MessageBox中的第二参数是LPCTSTR类型,而回调函数WinProc的第三个参数是WPARAM类型,他们之间怎么转换啊?
看了许多帖子,也尝试了,但是还是不管用额。

解决方案 »

  1.   

    这个看你传进来是什么参数了
    如果传进来就是CString *
    那么CString res = *(CString *)wparam;根据你传进来的类型来转换
      

  2.   

    WPARAM 是一个32位的整数
    LPCTSTR 也是一个32位的整数你是不是想自定义消息啊?
    然后把WPARAM 传进来一个LPCTSTR指向的字符串那样你在MessageBox的第二个参数直接强制转换一下就行了
    (LPCTSTR)wparam
      

  3.   


    不知道你要的是否是这种效果
    #include <windows.h>#define WM_USERDEF WM_USER+100 // 在此定义消息LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;// LPCTSTR lpStr = TEXT("this is a LPCTSTR string"); // 这里有个字符串
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

    PSTR szCmdLine, int iCmdShow)

    {

        static TCHAR szAppName[] = TEXT ("HelloWin") ;

        HWND   hwnd ;

        MSG    msg ;

        WNDCLASS wndclass ;


    wndclass.style        = CS_HREDRAW | CS_VREDRAW ;

    wndclass.lpfnWndProc  = WndProc ;

        wndclass.cbClsExtra   = 0 ;

        wndclass.cbWndExtra   = 0 ;

        wndclass.hInstance    = hInstance ;

        wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;

    wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;

    wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;

    wndclass.lpszMenuName  = NULL ;

        wndclass.lpszClassName= szAppName ;


        if (!RegisterClass (&wndclass))
            
        {
            
    MessageBox (  NULL, TEXT ("This program requires Windows NT!"),

    szAppName, MB_ICONERROR) ;
            
    return 0 ;
            
        }

        hwnd = CreateWindow( szAppName,      // window class name
            
    TEXT ("The Hello Program"),   // window caption
            
    WS_OVERLAPPEDWINDOW,  // window style
            
    CW_USEDEFAULT,// initial x position
            
    CW_USEDEFAULT,// initial y position
            
    CW_USEDEFAULT,// initial x size
            
    CW_USEDEFAULT,// initial y size
            
    NULL,                 // parent window handle
            
    NULL,            // window menu handle
            
    hInstance,   // program instance handle
            
    NULL) ;      // creation parameters



        ShowWindow (hwnd, iCmdShow) ;

        UpdateWindow (hwnd) ;
        while (GetMessage (&msg, NULL, 0, 0))
            
        {
            
    TranslateMessage (&msg) ;
            
    DispatchMessage (&msg) ;
            
        }

        return msg.wParam ;

    }
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){

        HDC           hdc ;

        PAINTSTRUCT ps ;

        RECT          rect ;

    LPCTSTR lpStr = TEXT("this is a LPCTSTR string"); // 这里有个字符串

        switch (message)
            
        {
            
        case   WM_CREATE:
            
    // PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
            
    return 0 ;
            
    case   WM_LBUTTONDOWN: PostMessage(hwnd,WM_USERDEF,(WPARAM)lpStr,NULL); // 在此发送消息

    return 0; case WM_USERDEF: MessageBox(hwnd,lpStr,TEXT("Info"),MB_OK); // 在此响应消息 return 0;    case   WM_PAINT:
            
    hdc = BeginPaint (hwnd, &ps) ;
            
            
    GetClientRect (hwnd, &rect) ;
            
            
    DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,

    DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
            
    EndPaint (hwnd, &ps) ;
            
    return 0 ;
            
            
            
        case   WM_DESTROY:
            
    PostQuitMessage (0) ;
            
    return 0 ;
            
        }

    return DefWindowProc (hwnd, message, wParam, lParam) ;

    }
      

  4.   

    得看是什么消息, 每个消息的WPARAM的类型是不一样的,也可能是整型, 也可能是字符型.
      

  5.   

    写错了吧,应该是:
    MessageBox(hwnd,(LPTSTR)wParam,TEXT("Info"),MB_OK);
      

  6.   


    您好,
    由于您长时间不结贴,上一次答复已超一个月并且已有最佳答案,本人帮你结贴。
    若是觉得答案不嘉,请放在本版的疑难杂症帖链接:
    http://bbs.csdn.net/topics/390351579。
    如果您有什么意见,请您联系我。