在 MFC Dialog-Based 中绘制简单的矩形

Posted

技术标签:

【中文标题】在 MFC Dialog-Based 中绘制简单的矩形【英文标题】:draw simple rectangle in MFC Dialog-Based 【发布时间】:2011-07-09 05:34:18 【问题描述】:

我编写了这段代码来在对话框中绘制一个简单的矩形,我还将 ON_WM_PAINT() 添加到我的消息映射中。但它没有在我的对话中显示任何内容!如果有人能说出我在代码中的错误,我真的很感激:

void Ctest4Dlg::OnPaint()

    if (IsIconic())
    
        CPaintDC dc(this); // device context for painting
        // TODO: Add your message handler code here

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = 2;
        int y = 2;

        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);

        //I want to draw a rectangle 
        dc.Rectangle(10,10,50,50);
    
    else
    
        CDialogEx::OnPaint();
    

【问题讨论】:

【参考方案1】:

看起来您的绘制代码仅在窗口为标志性时运行?你为什么要这么做?

将其放在else 块中,在调用CDialogEx::OnPaint() 之后。

【讨论】:

【参考方案2】:

您的第一个也是最大的错误是尝试直接在对话框中绘图。虽然可以这样做,但这几乎总是一个坏主意。对话框通常应被视为控件的容器。

【讨论】:

对话框的有用性主要取决于它包含控件的能力。但是,没有任何理由说明直接使用它是一个坏主意。如果这是需要的,它会导致什么问题? @Jonathon:直接绘制到对话框似乎会导致可靠地绘制问题。我也不是唯一一个看到它的人。例如,请参阅 Joseph Newcomer 关于同一主题的一些 posts。 嗯...我不时这样做,只是没有任何问题。看起来约瑟夫也没有任何具体的例子。无论如何,对于更多绘图密集型的情况,我会将它放到它自己的子窗口中。 @Saeed:您需要一本书或在线教程来学习 MFC,而不是 Stack Overflow。在这里和那里问几个问题太复杂了。如果您确实设法通过复制和粘贴在 Internet 上找到的一些代码 sn-ps 拼凑出一个程序,那么您很可能不会真正知道您是如何做到的以及它为什么起作用。帮自己一个忙,先学习 Win32 编程。 Charles Petzold 的 Programming Windows 是这方面的规范资源。 虽然我同意在对话框中绘图可能不是最好的方法,并且子类化 CStatic 控件是一个更好的选择,但我并不认为这是一个“答案” ”问题。它并没有真正解释为什么他拥有的代码失败了。我可能会将其作为评论发布。 @Jonathan 的回答是正确的,但如果更深入地解释 正确的 方法可能会更好。

以上是关于在 MFC Dialog-Based 中绘制简单的矩形的主要内容,如果未能解决你的问题,请参考以下文章

MFC 在 for 循环中绘图

利用Microsoft VC++6.0 的MFC 的绘图工具实现简单图形的绘制

在 SDI MFC 中绘制方网

为啥 CDC::LineTo() 不在 Visual C++ 2015 MFC 对话框中绘制?

MFC绘制直线

在mfc中绘制背景