【发布时间】:2012-09-01 04:43:20
【问题描述】:
我想画网格,如下图。
我知道一个技巧,可以通过绘制 6 条垂直和水平线而不是 6 x 6 小矩形来绘制它。
但是如果我想要更小的缩放(查看图片的缩放),线条很多。例如,假设我的视图窗口大小为 800 x 600,并查看大小为 400 x 300 的图片(因此放大为 2)。将有 400 x 300 大小为 2 x 2 的矩形(每个矩形代表一个像素)。
如果我绘制每个单元格(在一个循环中,比如 400 x 300 次),它会非常慢(当我移动窗口时......)。 使用技巧可以解决问题。
我仍然很好奇在winapi GDI(+)中是否有更好的方法来完成这项任务。比如DrawGrid(HDC hdc, int x, int y, int numOfCellsH, int numOfCellsV)?
另一个问题是:如果我不调整大小、移动窗口或不更改放大倍数,则不会更改网格。所以即使我不断更新图片(抓屏),也不需要重新绘制网格。但是我使用StretchBlt和BitBlt来截屏(到内存DC然后是窗口的hdc),如果我没有在内存DC中重绘网格,那么网格就会消失。有没有办法让网格粘在那里并更新屏幕截图的位图?
ps:这不是一个真正的问题。由于我想在缩放不小于 10 时绘制网格(因此每个单元格的大小为 10 x 10 或更大)。在这种情况下,最多可以绘制 100 + 100 = 200 条线,而且速度很快。我只是好奇是否有更快的方法。
【问题讨论】:
-
你仍然只需要画 700 条线。很快地做到这一点是微不足道的。画 700 条线真的有问题吗?
-
@David,我已经提到这对我来说不是问题。但是我没有权利知道是否有更好的方法吗?
-
其实 SO 更喜欢关于真实实际问题的问题。我不认为 GDI 特别慢。我怀疑你会做得比它好得多。
标签: c winapi gdi+ gdi grid-layout