VC-6.0-下MFC基于对话框-绘制图形
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC-6.0-下MFC基于对话框-绘制图形
附录表
一、具体步骤:
1、选择菜单栏的“新建”,选择MFC项目名为DrawGraphics,并设置为基于对话框的项目,如图-1、图-2所示;
图-1
图-2
2、按下键盘上的Ctrl+W键,调出类向导,选择“Add Class”,并点击“New”添加一个颜色按钮类CColorButton,继承自CButton类,如图-3所示:
图-3
3、在CColorButton中添加如下成员变量:
COLORREF color; //按钮颜色
CPoint arrays[4]; //按钮顶点坐标
BOOL IsShow; //是
否显示按钮
BOOL IsPressed; //按
钮是否被按下
4、右击CColorButton类,选择Add Virtul function ,重写其DraItem函数,如图-4,图-5所示:
图-4
图-5
5、为其Drawitem函数中添加如下代码:
CRect rect;
GetClientRect(rect);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
arrays[0]=CPoint(rect.left,rect.top); arrays[1]=CPoint(rect.right,rect.top);
arrays[2]=CPoint(rect.right,rect.bottom);
arrays[3]=CPoint(rect.left,rect.bottom);
//设置背景透明
dc.SetBkMode(TRANSPARENT);
if (IsShow)
{
//创建一个位图画刷
CBrush brush(color);
dc.SelectObject(&brush);
CPen pen(PS_NULL,1,color);
dc.SelectObject(&pen);
dc.Rectangle(rect);
if(IsPressed)
{
CPen
pen(PS_DASHDOTDOT,3,RGB(0,0,0));
dc.SelectObject(&pen);
dc.MoveTo(arrays[0]);
for(int i=1;i<4;i++)
{
dc.LineTo(arrays[i]);
}
dc.LineTo(arrays[0]);
}
else
{
CPen pen(PS_DASHDOTDOT,2,color);
dc.SelectObject(&pen);
dc.MoveTo(arrays[0]);
for(int i=1;i<4;i++)
{
dc.LineTo(arrays[i]);
}
dc.LineTo(arrays[0]);
}
//绘制按钮文本
CString str;
GetWindowText(str);
dc.SetTextColor(RGB(255-GetRValue(color), 255-GetGValue(color),255-GetBValue(color))); dc.DrawText(str,CRect(0,0,rect.right,rect.bott om),DT_CENTER|DT_VCENTER|DT_SINGL ELINE);
}
6、为CColorButton添加属性设置函数:
void
CColorButton::SetDrawColor(COLORREF
m_color,BOOL IsShow)
{
this->color = m_color;
this->IsShow=IsShow;
}
7、为CColorButton添加
WM_LBUTTONDOWN和WM_LBUTTONUP 消息,其消息处理函数如下:
void CColorButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
IsPressed = true;
CButton::OnLButtonDown(nFlags, point); }
void CColorButton::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
IsPressed = false;
CButton::OnLButtonUp(nFlags, point);
}
8、为DrawGraphics项目的中的对话框资源拖拽如下控件,如图-6所示,并按表-1设置其相关ID;
图-6
ID 作用及类别
IDC_RADIO_RECT 矩形单选按钮
IDC_RADIO_ROUND 圆形单选按钮
IDC_RADIO_LINE 直线单选按钮
IDC_RADIO_SELF 涂鸦单选按钮
IDC_RADIO_SLOIDLINE 实线单选按钮
IDC_RADIO_DOTTEDLINE 虚线单选按钮
IDC_COMBO_LINEVALUE 线条粗细下拉列表