在对话框内任意处绘图的问题!

菲斯可儿 2004-11-25 10:54:26
CRect rectClient; // 先生成一个与预加载的图片一样大小的矩形。
rectClient.top=10;
rectClient.left=10;
rectClient.right=10+m_cx;
rectClient.bottom=10+m_cy;
CBrush brush; // 生成一个位图刷子,对目标矩形进行填充。
brush.CreatePatternBrush(&m_bitmap);
dc.FillRect(rectClient,&brush);
问题:
当指定,top=0,left=0,right=m_cx,bottom=m_cy时,正常。
但如果改变这些值,画出的图片不完整。
...全文
147 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
konista 2004-11-25
  • 打赏
  • 举报
回复
有无可能是m_bitmap改变了?
saliors 2004-11-25
  • 打赏
  • 举报
回复
建议直接画位图
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(&m_bitmap);
dc.BitBlt(10,10,10+m_cx,10+m_cy,&MemDC,0,0,SRCCOPY);
要是还要实现填充的功能的话可以用上面的方法在写个函数,很简单。
菲斯可儿 2004-11-25
  • 打赏
  • 举报
回复
自己up一下~
菲斯可儿 2004-11-25
  • 打赏
  • 举报
回复
谢谢楼上的兄弟,我不是这个意思。
111222333111222333111222333
444555666444555666444555666
777888999777888999777888999
111222333111222333111222333
444555666444555666444555666
777888999777888999777888999
如上图:
我要在客户区显示的是
111222333
444555666
777888999
这个图片,
但如果画图不是在客户区顶点等某些特殊位置时,显示的图形就会不正确。
例如显示成:
223331112
556664445
889997778
就是图形显示错位了。
怎么样才能在任何位置开始画图的时候都能正常显示图片呢?

handwolf 2004-11-25
  • 打赏
  • 举报
回复
是不是超出了对话框边界?
mixtrue 2004-11-25
  • 打赏
  • 举报
回复
CBrush::CreatePatternBrush msdn 上说的;

Bitmaps used as fill patterns should be 8 pixels by 8 pixels. If the bitmap is larger, Windows will only use the bits corresponding to the first 8 rows and columns of pixels in the upper-left corner of the bitmap.

用作填充模式的位图应该是8像素×8像素的。如果位图太大,Windows将用该位图的左上角的8行8列的像素来创建填充模式。

mixtrue 2004-11-25
  • 打赏
  • 举报
回复
当填充矩形时,FillRect并不包括矩形的右边和底部。GDI填充到但并不包括右边和底部。不管是在何种模式下,FillRect比较top,bottom,left和right 成员的值。如果bottom小于或等于top,或者right小于等于left,那么矩形将不会被画出。 用这个呢?FillRgn (CRgn* pRgn, CBrush* pBrush )
菲斯可儿 2004-11-25
  • 打赏
  • 举报
回复
不知道我说清楚了没有,就是说,位图刷子总是从客户端(0,0)处开始刷的,如果指定的矩形不在某些特殊的位置,显示出来的就是不完整的图片。
有时候本来应该在上面的部分跑到下面,左面的跑到右面。

不知道有没有做过类似的东西,谢谢指教。
ringphone 2004-11-25
  • 打赏
  • 举报
回复
理解错了,上面是系统的处理,你要的效果应该是FillRect前先SetBrushOrgEx(hDC,0,0,NULL);
ringphone 2004-11-25
  • 打赏
  • 举报
回复
你需要相应改变BRUSH的顶点位置:
int mx = x % m_cx;
int my = y % m_cy;
SetBrushOrgEx(hDC,mx,my,NULL);

x,y为显示图形位置,m_cx,m_cy是图片宽,高
然后再FillRect

15,980

社区成员

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

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