VC 60 下MFC基于对话框 绘制图形Word下载.docx
- 文档编号:22931707
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:23
- 大小:145.59KB
VC 60 下MFC基于对话框 绘制图形Word下载.docx
《VC 60 下MFC基于对话框 绘制图形Word下载.docx》由会员分享,可在线阅读,更多相关《VC 60 下MFC基于对话框 绘制图形Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
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)
{
//创建一个位图画刷
CBrushbrush(color);
dc.SelectObject(&
brush);
CPenpen(PS_NULL,1,color);
pen);
dc.Rectangle(rect);
if(IsPressed)
{
CPenpen(PS_DASHDOTDOT,3,RGB(0,0,0));
dc.SelectObject(&
dc.MoveTo(arrays[0]);
for(inti=1;
i<
4;
i++)
{
dc.LineTo(arrays[i]);
}
dc.LineTo(arrays[0]);
}
else
CPenpen(PS_DASHDOTDOT,2,color);
//绘制按钮文本
CStringstr;
GetWindowText(str);
dc.SetTextColor(RGB(255-GetRValue(color),255-GetGValue(color),255-GetBValue(color)));
dc.DrawText(str,CRect(0,0,rect.right,rect.bottom),DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
6、为CColorButton添加属性设置函数:
voidCColorButton:
:
SetDrawColor(COLORREFm_color,BOOLIsShow)
{
this->
color=m_color;
IsShow=IsShow;
7、为CColorButton添加WM_LBUTTONDOWN和WM_LBUTTONUP消息,其消息处理函数如下:
OnLButtonDown(UINTnFlags,CPointpoint)
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
IsPressed=true;
CButton:
OnLButtonDown(nFlags,point);
OnLButtonUp(UINTnFlags,CPointpoint)
IsPressed=false;
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
线条粗细下拉列表
IDC_STATIC_LINEEXAMPLE
显示线条粗细的Picture控件
IDC_CHECK_BORDER
是否有边界复选框
IDC_RADIO_SOLID
填充单选按钮
IDC_RADIO_GRADIENT
渐变单选按钮
IDC_RADIO_NULL
无填充单选按钮
IDC_BUTTON_FORECOLOR
前景色按钮
IDC_BUTTON_BKCOLOR
背景色按钮
IDC_RADIO_PEN
画笔单选按钮
IDC_RADIO_CLEAR
清空画板单选按钮
IDC_STATIC_GRAPHICS
画板区(Picture控件)
表-1
9、打开类向导,按图-7所示,为相关控件添加关联成员:
10、在CDrawGraphicsDlg类的OninitDialog函数中添加初始化代码:
BOOLCDrawGraphicsDlg:
OnInitDialog()
/*.........省略无关代码..........
.....................................................*/
Addextrainitializationhere
CButton*cb;
//设置相关按钮的默认选中状态
cb=(CButton*)GetDlgItem(IDC_RADIO_RECT);
cb->
SetCheck
(1);
cb=(CButton*)GetDlgItem(IDC_RADIO_SLOIDLINE);
cb=(CButton*)GetDlgItem(IDC_CHECK_BORDER);
cb=(CButton*)GetDlgItem(IDC_RADIO_SOLID);
cb=(CButton*)GetDlgItem(IDC_RADIO_PEN);
m_ComboLineValue.SetCurSel(3);
m_ForeColor=RGB(255,0,0);
m_BkColor=RGB(0,0,255);
m_ForeCButton.SetDrawColor(m_ForeColor,TRUE);
//设置前背景色按钮的颜色
m_BkCButton.SetDrawColor(m_BkColor,TRUE);
m_IsPressed=FALSE;
m_nWidth=4;
m_nPenStyle=PS_SOLID;
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
10、为CDrawGraphicsDlg添加WM_LBUTTONDOWN和WM_LBUTTONUP,WM_MOUSEMOVE消息,其消息处理函数如下:
voidCDrawGraphicsDlg:
m_IsPressed=TRUE;
SetCursor(m_Hcursor);
if(IsDlgButtonChecked(IDC_RADIO_SELF))
{
m_pOld=point;
}
elseif(IsDlgButtonChecked(IDC_RADIO_LINE))
m_PointOrigin=point;
}elseif(IsDlgButtonChecked(IDC_RADIO_RECT))
}elseif(IsDlgButtonChecked(IDC_RADIO_ROUND))
CDialog:
ClipCursor(NULL);
//解除鼠标的限定
CClientDCdc(this);
CPenpen(m_nPenStyle,m_nWidth,m_ForeColor);
dc.SelectObject(&
if(IsDlgButtonChecked(IDC_RADIO_LINE))//选择的为画直线
{
dc.SetROP2(R2_NOT);
//逆转当前屏幕颜色来画线的绘图方式
dc.MoveTo(m_PointOrigin);
dc.LineTo(m_pOld);
//擦去上一次的临时线
dc.SetROP2(R2_COPYPEN);
//缺省绘图模式,像素为画笔颜色
dc.LineTo(point);
//绘制固定线
elseif(IsDlgButtonChecked(IDC_RADIO_RECT))//选择的为画矩形
dc.SelectObject(GetStockObject(NULL_BRUSH));
//选择空话刷
dc.SetROP2(R2_NOT);
CRectOldrect(m_PointOrigin,m_pOld);
dc.Rectangle(&
Oldrect);
//清除之前的矩形绘图
dc.SetROP2(R2_COPYPEN);
CBrushbrush(m_BkColor);
dc.SelectObject(&
//画这次的矩形
if(IsDlgButtonChecked(IDC_RADIO_NULL))//如果选择无填充的话,使用空画刷
CRectNowrect(m_PointOrigin,point);
Nowrect);
if(IsDlgButtonChecked(IDC_RADIO_GRADIENT))//如果选择渐变的话,调用渐变函数
DrawGradient(dc.GetSafeHdc(),Nowrect,m_ForeColor,m_BkColor,1);
}elseif(IsDlgButtonChecked(IDC_RADIO_ROUND))//如果选择绘制椭圆
dc.Ellipse(&
if(IsDlgButtonChecked(IDC_RADIO_NULL))
InvalidateMyRect();
//刷新工具区
OnMouseMove(UINTnFlags,CPointpoint)
if(m_IsPressed&
&
point.x>
205)//如果鼠标移动位置到达画板区
CRectrect;
m_Graphics.GetClientRect(&
rect);
m_Graphics.ClientToScreen(&
ClipCursor(rect);
//限定光标在指定矩形
IsDlgButtonChecked(IDC_RADIO_SELF))//如果选择了涂鸦
CPenpen(m_nPenStyle,m_nWidth,m_ForeColor);
//创建画笔
//选入画笔
dc.MoveTo(m_pOld);
//绘制轨迹
//将当前点设置为旧点
elseif(m_IsPressed&
IsDlgButtonChecked(IDC_RADIO_LINE))//如果选择了直线
//逆转当前屏幕颜色来画线的绘图方式
//擦去上一次的线
//绘制这一次的临时线
IsDlgButtonChecked(IDC_RADIO_RECT))//如果选择了矩形
CPenpen(PS_DOT,1,m_ForeColor);
dc.SelectObject(GetStockObject(HOLLOW_BRUSH));
m_pOld=point;
pen.DeleteObject();
}elseif(m_IsPressed&
IsDlgButtonChecked(IDC_RADIO_ROUND))//如果选择了圆
OnMouseMove(nFlags,point);
11、为背景色、前景色、无填充、实线、虚线、边框、清空画板按钮添加按钮单击消息,响应函数如下:
OnButtonBkcolor()
Addyourcontrolnotificationhandlercodehere
CColorDialogcdg;
if(cdg.DoModal()==IDOK)//调用颜色对话框
m_BkColor=cdg.GetColor();
//更改背景色
m_BkCButton.SetDrawColor(m_BkColor,TRUE);
//更改背景色按钮颜色
InvalidateMyRect();
//刷新工具区
OnButtonForecolor()
if(cdg.DoModal()==IDOK)
m_ForeColor=cdg.GetColor();
m_ForeCButton.SetDrawColor(m_ForeColor,TRUE);
OnRadioNull()
if(!
IsDlgButtonChecked(IDC_CHECK_BORDER))//无填充时不能也无边框
CButton*cb=(CButton*)GetDlgItem(IDC_CHECK_BORDER);
cb->
OnRadioSloidline()
CStringstr[9]={"
1px"
"
2px"
3px"
4px"
5px"
6px"
8px"
10px"
12px"
};
m_ComboLineValue.ResetContent();
for(inti=0;
9;
m_ComboLineValue.AddString(str[i]);
OnRadioDottedline()
for(inti=11;
i>
0;
i--)
m_ComboLineValue.DeleteString(i);
m_ComboLineValue.SetCurSel(0);
m_nWidth=1;
m_nPenStyle=PS_DOT;
voidCDrawGraphicsDlg:
OnCheckBorder()
if(IsDlgButtonChecked(IDC_CHECK_BORDER))
m_nPenStyle=PS_SOLID;
else
m_nPenStyle=PS_NULL;
if(IsDlgButtonChecked(IDC_RADIO_NULL))//既不能无边框也不能无填充
CButton*cb=(CButton*)GetDlgItem(IDC_CHECK_BORDER);
OnRadioClear()
Invalidate(TRUE);
12、为选择画笔宽度的下拉列表添加CBN_SELCHAGE消息,消息处理函数如下:
6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 60 下MFC基于对话框 绘制图形 MFC 基于 对话框 绘制 图形