mfc中响应鼠标左击加载位图的实现

zxx178239 2014-01-17 05:50:18
在鼠标左击函数中我是这样写的
                CBitmap		*pOldBmp;
CPaintDC dc(this);
CDC dcSelect;
CRect rect(m_ptMoveChess.x, m_ptMoveChess.y, 60, 60);
ScreenToClient(rect);
dcSelect.CreateCompatibleDC(&dc);
m_BoardBmp.LoadBitmapW(IDB_REDGROUND);
pOldBmp = dcSelect.SelectObject(&m_BoardBmp);
dcSelect.FillSolidRect(rect, RGB(192, 192, 192));
dc.StretchBlt(rect.TopLeft().x, rect.TopLeft().y, rect.Width(), rect.Height(), &dcSelect, 0, 0, 60, 60, SRCCOPY);


把位图加载到以(m_ptMoveChess.x, m_ptMoveChess.y)为坐标,60宽,60高的地方

鼠标左击无响应

知道的解决一下

谢了!
...全文
134 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2014-01-18
  • 打赏
  • 举报
回复
左击时画图,不能用: CPaintDC dc(this); 因为窗口是有效的 这个 dc 中 没有 重绘区。 要 用 CClientDC , 或 GetDC
zxx178239 2014-01-18
  • 打赏
  • 举报
回复
引用 3 楼 VisualEleven 的回复:
把你绘图的代码放到OnPaint/OnDraw函数中,在OnLButtonDown记录一下鼠标的坐标,然后调用InvalidateRect()强制刷新。
CBitmap		*pOldBmp;
	CPaintDC	dc(this);
	CDC			dcSelect;
	dcSelect.CreateCompatibleDC(&dc);
	pOldBmp = dcSelect.SelectObject(&m_redSelectBmp);

	dc.BitBlt(x, y, 56, 56, &dcSelect, 0, 0, SRCCOPY);
	dcSelect.SelectObject(&pOldBmp);
	dcSelect.DeleteDC();
(x,y)是加载点的坐标,这段代码我放在OnPaint()里面测试过了,可以加载位图 现在问题是我在对话框上已经画了一个位图, 我在这个位图上左击(x,y)位置加载56,56大小的位图,左击鼠标没反应,是没更新还是什么问题? 可以说一下吗?谢谢
zxx178239 2014-01-18
  • 打赏
  • 举报
回复
引用 7 楼 schlafenhamster 的回复:
“单击一下选中棋” 点击时 hittest 测试到 哪个 棋子 (车,马,炮), 知道 棋子位置后 ,重绘 棋子 颜色 (选中 状态)。。。
我看网上说用TransparentBlt设置位图某一颜色为透明色 TransparentBlt(dc.m_hDC, 0, 0, 56, 56, dcSelect.m_hDC, x, y, 56, 56, RGB(255, 255, 255)); 我这样写没法实现效果,什么原因?
schlafenhamster 2014-01-18
  • 打赏
  • 举报
回复
“单击一下选中棋” 点击时 hittest 测试到 哪个 棋子 (车,马,炮), 知道 棋子位置后 ,重绘 棋子 颜色 (选中 状态)。。。
zxx178239 2014-01-18
  • 打赏
  • 举报
回复
引用 5 楼 schlafenhamster 的回复:
左击时画图,不能用: CPaintDC dc(this); 因为窗口是有效的 这个 dc 中 没有 重绘区。 要 用 CClientDC , 或 GetDC
嗯,谢谢 那么比如我现在加载的位图只是显示四边,位图中间透明,把下面的那块图片选中该怎么写? 就像下象棋,单击一下选中棋那种 说明一下怎么实现?谢谢
Eleven 2014-01-17
  • 打赏
  • 举报
回复
把你绘图的代码放到OnPaint/OnDraw函数中,在OnLButtonDown记录一下鼠标的坐标,然后调用InvalidateRect()强制刷新。
我系麦叔叔 2014-01-17
  • 打赏
  • 举报
回复
CPaintDC dc(this);
        CRect rc;
        GetClientRect(&rc);
        CDC dcMem;
        dcMem.CreateCompatibleDC(&dc);
        CBitmap bmpBackground;
        bmpBackground.LoadBitmap(IDB_BAR);

        BITMAP bitmap;
        bmpBackground.GetBitmap(&bitmap);
        CBitmap* pbmpPri = dcMem.SelectObject(&bmpBackground);
        dc.StretchBlt(0,0,rc.Width(), rc.Height(), &dcMem,0,0,bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);
hdg3707 2014-01-17
  • 打赏
  • 举报
回复
你先单独用一个函数调试出显示位图的代码,然后再放到鼠标左键的消息函数里。 没反映,有可能是尺寸不合适,也可能是位图没有调用成功

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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