本次作业参考了此作者,感谢其分享
https://blog.csdn.net/XTAOTWO/article/details/83421023?utm_source=app
代码如下:
框架类:
void CMainFrame::OnUpdateLine(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(0);
if (type == 1)
{
pCmdUI->SetCheck(1);
pCmdUI->Enable(FALSE);
}
}
void CMainFrame::OnLine()
{
// TODO: 在此添加命令处理程序代码
MessageBox(_T("你选择了划线操作"));
type = 1;
}
void CMainFrame::OnRectangle()
{
// TODO: 在此添加命令处理程序代码
type = 2;
}
void CMainFrame::OnPoint()
{
// TODO: 在此添加命令处理程序代码
type = 3;
}
void CMainFrame::OnUpdateRect(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(0);
if (type == 2)
{
pCmdUI->SetCheck(1);
pCmdUI->Enable(FALSE);
}
}
void CMainFrame::OnUpdatePoint(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(0);
if (type == 3)
{
pCmdUI->SetCheck(1);
pCmdUI->Enable(FALSE);
}
}
视图类
int a = 0;
void CMFCApplication5View::OnDrawLine()
{
// TODO: 在此添加命令处理程序代码
//构造一个DC,传入当前对象.表示在当前对象使用.
/*CClientDC dc(this);
//创建一个画笔.(线的类型, 宽度, 颜色);
CPen pen(PS_SOLID, 1, RGB(255, 0, 255));
//把画笔选到设置描述表当中.覆盖默认画笔.
dc.SelectObject(&pen);
//画直线.
dc.MoveTo(100, 50);
dc.LineTo(200, 200);
//MoveTo() 函数传入的是直线起点的坐标
//LineTo() 函数传入的参数是直线中点的坐标 */
a = 1;
}
void CMFCApplication5View::OnDrawRectangle()
{
/* // TODO: 在此添加命令处理程序代码
//构造一个DC,传入当前对象.表示在当前对象使用.
CClientDC dc(this);
//创建一个画笔.(线的类型, 宽度, 颜色);
CPen pen(PS_SOLID, 1, RGB(255, 0, 255));
//把画笔选到设置描述表当中.覆盖默认画笔.
dc.SelectObject(&pen);
//创建透明画刷,填充矩形内部
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
//将画刷加入设置描述表
dc.SelectObject(pBrush);
//画矩形,传入一个矩形对象,分别为左上右下的边界范围
dc.Rectangle(CRect(200, 200, 300, 300));
dc.LineTo(200, 200);
//MoveTo() 函数传入的是直线起点的坐标
//LineTo() 函数传入的参数是直线中点的坐标 */
a = 2;
}
void CMFCApplication5View::OnDrawPoint()
{
// TODO: 在此添加命令处理程序代码
/*
CClientDC dc(this);
dc.SetPixel(50, 50, RGB(255, 0, 255));*/
a = 3;
}
void CMFCApplication5View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
spoint = point;
CView::OnLButtonDown(nFlags, point);
}
void CMFCApplication5View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
epoint = point;
CClientDC dc(this);
CPen pen(PS_SOLID, 4, RGB(255, 0, 255));
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
switch (a)
{
case(1):
CView::OnLButtonUp(nFlags, point);
dc.SelectObject(&pen);
//画直线.
dc.MoveTo(spoint);
dc.LineTo(epoint);
break;
case(2):
dc.SelectObject(&pen);
//创建透明画刷,填充矩形内部
//将画刷加入设置描述表
dc.SelectObject(pBrush);
//画矩形,传入一个矩形对象,分别为左上右下的边界范围
dc.Rectangle(CRect(spoint, epoint));
break;
case(3):
CView::OnLButtonDown(nFlags, spoint);
break;
}
}
运行后
没有出现理想中的复选框,及当前不可选状态。
还是没弄懂如何出现复选框。。。