在 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 中绘制简单的矩形的主要内容,如果未能解决你的问题,请参考以下文章
利用Microsoft VC++6.0 的MFC 的绘图工具实现简单图形的绘制