在 SDI MFC 中绘制方网
Posted
技术标签:
【中文标题】在 SDI MFC 中绘制方网【英文标题】:drawing square net in SDI MFC 【发布时间】:2016-06-22 11:26:01 【问题描述】:如何(如国际象棋)? 以及如何确定在特定位置放置更多形状的位置? 我必须使用 (Moveto) 和 (Lineto) 并一一绘制它们? 或使用位图?或更简单的方法? 我尝试过这种方式,但它并不聪明。 谢谢。
COLORREF blueline = RGB(255, 0, 0);
pen1.CreatePen(PS_SOLID, 3, blueline);
pDC->SelectObject(&pen1);
pDC->MoveTo(0,80);
pDC->LineTo(1024, 80);
pDC->SelectObject(&pen1);
【问题讨论】:
绘制到内存DC,然后blit到屏幕上。 你能告诉我更多细节吗? 看看这里:msdn.microsoft.com/en-gb/library/windows/hardware/…。您使用 CMemDC 类。如果您想减少闪烁,这很好。 @AndrewTruckle:所有受支持的 Windows 版本都已经实现了双缓冲。几乎不需要渲染到内存设备上下文。 @AndrewTruckle:这与 MFC 无关。 MFC 仅提供标准 Windows 控件和窗口的包装器。默认情况下,它们在桌面窗口管理器 (DWM) 中是双缓冲的。 【参考方案1】:您可以通过调用CDC::FillSolidRect 来绘制实心矩形。如果您的矩形应该包含更复杂的图案,请改用CDC::FillRect。
您可以使用以下伪代码渲染棋盘格:
for (int x = 0; x < 8; ++x)
for (int y = 0; y < 8; ++y )
// Calculate square position and size
int x0 = x_origin + x * square_width;
int x1 = x_origin + (x + 1) * square_width;
int y0 = y_origin + y * square_height;
int y1 = y_origin + (y + 1) * square_height;
RECT r = x0, y0, x1, y1;
// Pick alternating color
COLORREF color = (x + y) & 1 ? RGB(0, 0, 0) : RGB(255, 255, 255);
// Render square
pDC->FillSolidRect(&r, color);
【讨论】:
@Emadsharifmohseny:既然这是你要求的,我不明白你为什么感到惊讶。这些是方格棋盘的成分。如果这还不够花哨,我还链接了一个 API,它可以用任意复杂的图案填充矩形。 @IInspectable 我认为他在问如何构建“正方形”的“网络”本身。 我正在尝试制作网,而不仅仅是孵化 我认为你没有明白我的意思,顺便说一句,谢谢你的帮助 @Emadsharifmohseny:我只能回答被问到的问题。如果您想要 “象棋” 的东西,而提供 “象棋” 的东西的答案并没有解决您的问题,那么您的意思是问一个不同的问题你做到了。如果您正在寻找网格,MoveTo
和 LineTo
是要使用的调用。以上是关于在 SDI MFC 中绘制方网的主要内容,如果未能解决你的问题,请参考以下文章