在 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:我只能回答被问到的问题。如果您想要 “象棋” 的东西,而提供 “象棋” 的东西的答案并没有解决您的问题,那么您的意思是问一个不同的问题你做到了。如果您正在寻找网格,MoveToLineTo 是要使用的调用。

以上是关于在 SDI MFC 中绘制方网的主要内容,如果未能解决你的问题,请参考以下文章

在 SDI MFC 应用程序中绘制流程图

在 MFC SDI 应用程序中调用 OnDraw

我们可以在基于对话框的 mfc Visual Studio 2010 中绘制形状(线、圆等)吗?

如何自定义我的按钮?

在mfc中绘制背景

在 mfc 中绘制父对话框