编写MFC下的单文档程序,绘制矩形,矩形坐上角、右下角坐标由对话框输入。
题目: 编写MFC下的单文档程序,绘制矩形,矩形坐上角、右下角坐标由对话框输入。
思路:使用CDC的Draw3dRect函数可以直接在视图上绘制矩形,只是这个函数需要的是左上角坐标与矩形的长宽,所以我们需要通过左上角坐标与右下角坐标转换计算出矩形长宽。
实现过程:
1. 创建名为drawrect的单文档视图程序
2. 为CDrawrectView类添加成员变量来存放左上角坐标与右下角坐标
3. 在CDrawrectView类的OnDraw函数中根据左上角坐标与右下角坐标绘制矩形
4. 添加对话框资源用来输入左上角坐标与右下角坐标并为这个对话框添加相应的类与成员变量
5. 让CDrawrectView响应OnFileNew函数,在这个函数中弹出对话框要求用户输入左上角坐标与右下角坐标,把用户输入保存到CDrawrectView的相应成员变量中并强迫视图重绘。
关键代码:
void CDrawrectView::OnDraw(CDC* pDC)
{
CDrawrectDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->Draw3dRect(m_nX1, m_nY1, m_nX2 - m_nX1, m_nY2 - m_nY1, RGB(0, 0, 0), RGB(0, 0, 0));
}
void CDrawrectView::OnFileNew()
{
CDlgPosition dlgPosition;
if (dlgPosition.DoModal() == IDOK)
{
m_nX1 = dlgPosition.m_nX1;
m_nY1 = dlgPosition.m_nY1;
m_nX2 = dlgPosition.m_nX2;
m_nY2 = dlgPosition.m_nY2;
}
Invalidate(); //Force view redraw
}
运行结果:
完整代码见附件