请教bmp图片资源显示成光标的问题

daidodo 2007-07-09 08:18:30
最近在用MFC做一个游戏,其中每个物品都有相应的Bitmap图片资源,显示在Dialog上。现在我想通过鼠标点击拿起物品,并移动物品位置,但是不知道怎么样把光标设置成相应的图片。
主体框架就是在Dialog里定义一个
HCURSOR m_hCursor;
成员,在OnLButtonDown里把它设置成相应的光标句柄,最后在OnSetCursor函数里设置光标。
现在关键就是OnLButtonDown里设置m_hCursor的代码不成功。
我试过LoadCursor,发现如果资源本身是cursor类型的,可以成功;而我的资源都是bmp,它的返回值就是0了(没有hot spot?)。
用CreateCursor创建的似乎是黑白光标,看msdn也没看懂怎么把指定的bmp创建成光标。
msdn在SetCursor文档里还提到用LoadImage,可是我试了几次,不知是传的参数不对还是怎么的,也是不能成功。

现在我也想不到什么别的办法了,暂时用BitBlt把图片画出来,跟着鼠标走,并且在OnMouseMove里不停的
Invalidate();
效果自然是很差了。
望了解MFC的人指点一二,谢谢!:)

void CDlgCharItems::OnPaint()
{
CPaintDC dc(this);
DrawItemCursor(&dc,m_pMouse); //画拿起的物品,暂时用BitBlt实现的
}
void CDlgCharItems::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_pPickedItem){ //鼠标有拿起物品
Invalidate(); //更新物品图片的位置
}else{
//画系统光标
}
}
void CDlgCharItems::OnLButtonDown(UINT nFlags, CPoint point)
{
if(HitTestOnItem()){ //点击在物品上
m_hCursor = AfxGetApp()->LoadCursor(BMP_RES_INDEX);
//m_hCursor还是为0
}
}
BOOL CDlgCharItems::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(nHitTest == HTCLIENT){
::SetCursor(m_hCursor);
return TRUE;
}
return CPropertyDialog::OnSetCursor(pWnd, nHitTest, message);
}
...全文
285 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cleverwyq 2007-07-15
  • 打赏
  • 举报
回复
找个工具把位图导成光标先
systemthink 2007-07-15
  • 打赏
  • 举报
回复
先找本最基礎的書看看,深入VC裏面就有例子

把MSDN好好看一下,你也能發現問題
arrowcy 2007-07-15
  • 打赏
  • 举报
回复
楼上好办法,呵呵
vc就可以实现的,打开位图复制,建立光标,粘贴
然后程序中就直接使用对应的光标资源就可以了
caferd 2007-07-10
  • 打赏
  • 举报
回复
做这些,你还是使用DirectX去做把。GDI包括GDI+都在做游戏上力不从心阿。主要是绘制的速度也无法达到要求阿。如果你是学习做小游戏,那看看DirectX不是收获更大吗
believefym 2007-07-09
  • 打赏
  • 举报
回复
这个不需要这样吧,判断鼠标的状态,如果在drag,进行绘图操作

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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