【问题标题】:draw simple rectangle in MFC Dialog-Based在 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();
    }
}

【问题讨论】:

    标签: visual-studio-2010 visual-c++ mfc dialogbasedapp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

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