消息处理函数返回值LRESULT数据类型转换成int类型

zyfu0000 2009-02-19 04:21:19
在《3D游戏引擎编程》中有两个这样的函数:
void* GetSelectedItem(HWND hWnd)
{
WPARAM wParam=(WPARAM)((int)(DWORD)SendMessage(hWnd,CB_GETCURSEL,0,0)); //返回ComboBox中的被选中项的索引
return ((void*)SendMessage(hWnd,CB_GETITEMDATA,wParam,0));
}

void AddItem(HWND hWnd,char *ch,void *pData)
{
WPARAM wParam=(WPARAM)((int)(DWORD)SendMessage(hWnd,CB_ADDSTRING,0,(LPARAM)ch));
SendMessage(hWnd,CB_SETITEMDATA,wParam,(LPARAM)pData);
}

SendMessage()函数的返回值是LRESULT,是32位数据类型,而int也是32位数据类型,为什么由LRESULT转换成int要先转换成DWORD?
如果是因为LRESULT是UINT_PTR,而DWORD是unsigned 32位?
...全文
368 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
云风 2009-02-21
  • 打赏
  • 举报
回复
没区别!
typedef _W64 unsigned int UINT_PTR
oyljerry 2009-02-21
  • 打赏
  • 举报
回复
先转换为DWORD,无符号,然后再转换...

UINT_PTR UINT
http://www.huarw.com/program/bbs/Cbbs/200604/1520494.html
zyfu0000 2009-02-20
  • 打赏
  • 举报
回复
一直不明白 UINT_PTR 与UINT有什么区别 能将一下吗?
tiancaiak 2009-02-20
  • 打赏
  • 举报
回复
额,上面说错咧,LRESULT就是long类型
tiancaiak 2009-02-20
  • 打赏
  • 举报
回复
我试了下,直截转换也不会报错啊,不过
#define LRESULT LONG_PTR
typedef _W64 long LONG_PTR, *PLONG_PTR;

也就是说LRESULT是long的指针类型

8,324

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧