MFC绘制矩形
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC绘制矩形相关的知识,希望对你有一定的参考价值。
参考技术A 在MFC中画矩形Visual Studio 2008//首先创建一个MFC工程,名为:Rectangle,在界面上放置一个picture control的控件,其关联变量为:m_showRectangle。
//然后添加鼠标事件,OnLButtonDown,OnLButtonUp,OnMouseMove
//BOOL lButtonDownNotUp=FALSE;
//CPoint regionLeftTopTemp;
//CPoint regionRightBottomTemp;
void CRectangleDlg::OnLButtonDown(UINT nFlags, CPoint point)
lButtonDownNotUp = TRUE;
RECT rect;
m_showRectangle. GetClientRect( &rect ) ;
if( (point. x<rect. right) && (point. x>rect. left) && (point. y<rect. bottom) && (point. y>rect. top) )
regionLeftTopTemp = point;
CDialog::OnLButtonDown(nFlags, point);
void CRectangleDlg::OnMouseMove(UINT nFlags, CPoint point)
RECT rect;
m_showRectangle. GetClientRect( &rect );
if( ( point.x<rect.right ) && ( point.x>rect.left ) && ( point.y<rect.bottom ) && ( point.y>rect.top ) )
if( ( lButtonDownNotUp == TRUE )
regionRightBottomTemp = point;
CDC * pDC = m_showRectangle. GetWindowDC ();
pDC -> Rectangle( CRect( regionLeftTopTemp, regionRightBottomTemp ) ) ;
CDialog::OnMouseMove(nFlags, point);
void CRectangleDlg::OnLButtonUp(UINT nFlags, CPoint point)
lButtonDownNotUp=FALSE;
CDialog::OnLButtonUp(nFlags, point);
本回答被提问者采纳 参考技术B Rectangle (
Coordinates upperLeft,
Coordinates lowerRight
)
Rectangle (
int left,
int top,
int right,
int bottom
)
在view类的OnDraw函数里添加
pDc->Rectangle(); 参数如上 参考技术C 用4下moveto lineto就可以了。 参考技术D rect 也行 brush 也行的 要代码 留言
在 MFC Dialog-Based 中绘制简单的矩形
【中文标题】在 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绘制矩形的主要内容,如果未能解决你的问题,请参考以下文章