场景:
1.有时候绘制控件的背景时,控件的大小是不定的,即可以最大化最小化,这样使用固定大小的图片就不合适了。
2.解决办法之一就是使用平铺小图片的方式合并成大的背景图.
方法1:使用图形的Brush..
static void DrawWordBitmap(wxBitmap* dest, wxBitmap* source)
{
wxMemoryDC dc;
dc.SelectObject(*dest);
dc.SetPen(*(wxTRANSPARENT_PEN));
dc.SetBrush(wxBrush(*source));
dc.DrawRectangle(0, 0, dest->GetWidth(),dest->GetHeight());
dc.SelectObject(wxNullBitmap);
}
方法2:使用Blit
int s_width = source->GetWidth();
int d_height = dest->GetHeight();
int d_width = dest->GetWidth();
wxMemoryDC sdc;
wxMemoryDC ddc;
sdc.SelectObject(*source);
ddc.SelectObject(*dest);
if (s_width >= d_width)
{
ddc.Blit(0, 0, d_width, d_height, &sdc, 0, 0, wxCOPY, true);
}
else
{
for (int i = 0; i < d_width;)
{
s_width = ((d_width - i) > s_width) ? s_width : (d_width - i);
ddc.Blit(i, 0, s_width, d_height, &sdc, 0, 0, wxCOPY, true);
i += s_width;
}
}
sdc.SelectObject(wxNullBitmap);
ddc.SelectObject(wxNullBitmap);
本文介绍了解决控件背景图随窗口变化而变化的问题,通过两种方法实现使用小图片平铺生成适应窗口大小的大背景图。第一种方法利用wxBrush设置图形刷子进行绘制;第二种方法使用Blit函数多次绘制小图片直至覆盖整个目标区域。
387

被折叠的 条评论
为什么被折叠?



