MFC实现简单画图形程序Word文件下载.docx

上传人:b****3 文档编号:15971367 上传时间:2022-11-17 格式:DOCX 页数:21 大小:29.32KB
下载 相关 举报
MFC实现简单画图形程序Word文件下载.docx_第1页
第1页 / 共21页
MFC实现简单画图形程序Word文件下载.docx_第2页
第2页 / 共21页
MFC实现简单画图形程序Word文件下载.docx_第3页
第3页 / 共21页
MFC实现简单画图形程序Word文件下载.docx_第4页
第4页 / 共21页
MFC实现简单画图形程序Word文件下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

MFC实现简单画图形程序Word文件下载.docx

《MFC实现简单画图形程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《MFC实现简单画图形程序Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。

MFC实现简单画图形程序Word文件下载.docx

COLORREFm_CurrentBrushColor;

//用于存放当前画刷的颜色。

COLORREFm_CurrentPenColor;

//用于存放当前画笔的颜色.

intnum;

//用于存放从"

Index。

txt"

文件中读取的数字。

intflag=0;

//用于标识:

当为1时,表示按下了"

画图”按钮;

当为2时,表示按下了"

撤消”按钮;

当为3时,表示按下了"

加载历史”按钮,则从文件中读取信息。

intmark;

//用于标识:

当为0时,表示刚画过矩形;

当为1时,表示刚画过圆角矩形;

当为2时,表示刚画过椭圆.

intindex;

//用于存放pta数组的容量。

intflag1=0;

//用于标识,和flag搭配,用来处理多种情况下的窗口重绘问题。

intButtonState=0;

//用于标识,是类CShow和类CMy0910200155Dlg的一个接口,通过其值在1和0之间转换,来处理弹出式对话框的初次绘制和移动时的重绘问题。

三、CMemoryNode类中变量的作用:

COLORREFBrushColor;

COLORREFPenColor;

intMark;

//以上三者为类CMemoryNode的成员变量,分别用来保存

绘图时画刷颜色,画笔颜色和形状。

四、与控件相关联的变量:

CComboBoxm_BrushColor;

//指示画刷颜色组合框.

CComboBoxm_PenColor;

//指示画笔颜色组合框。

CListBoxm_Shape;

//指示形状列表框.

五、应用程序功能的具体实现:

1)初始化过程:

this—〉m_Shape。

AddString(”矩形"

);

//给形状列表框添加一个项目.

this—>

m_PenColor.AddString("

红色"

);

//给画笔颜色框添加一个项目。

this-〉m_BrushColor.AddString(”白色”);

//给画刷颜色框添加一个项目。

(剩余项目的添加方法完全相同,就不再赘述了)

m_PenColor。

SetCurSel(0);

m_BrushColor.SetCurSel(4);

m_Shape。

SetCurSel

(2);

//设置光标初始定位.

m_CurrentBrushColor=RGB(0,0,255);

//画刷颜色设置默认初值为蓝色。

m_CurrentPenColor=RGB(255,0,0);

//画笔颜色设置默认初值为红色.

this->

SetWindowText(”简单画图形程序”);

//设置窗口标题。

RECTrect;

this—>

GetWindowRect(&

rect);

//得到窗体的大小。

CRgnrgn;

rgn.CreateRoundRectRgn(

rect.left+3,rect.top+5,rect.right—2,rect.bottom—2,40,40);

this—〉SetWindowRgn((HRGN)rgn。

GetSafeHandle(),TRUE);

//按要求绘制圆角矩形的窗体。

ifstreaminfile1(”Index.txt"

,ios:

nocreate);

if(!

infile1)this->

GetDlgItem(IDC_BUTTON_LOAD)-〉EnableWindow(FALSE);

//通过”Index。

txt”文件是否存在来决定”加载历史”按钮的状态,如果存在则可用,否则不可用。

2)窗口绘制过程:

此过程调用OnPaint()函数,涉及多种情况下的图形绘制和窗口重绘,是相对比较核心的部分,将在后面具体逐个分析.

六、从某一次程序运行的角度说明各个函数的功能:

首先打开应用程序,系统将自动创建窗体,在窗体弹出的一瞬间,你会发现窗体是圆角形的,其次感觉颜色比较柔和.这归功于初始化中的:

RECTrect;

this—〉GetWindowRect(&

rect);

rgn。

CreateRoundRectRgn(

rect.left+3,rect.top+5,rect。

right-2,rect。

bottom-2,40,40);

this-〉SetWindowRgn((HRGN)rgn.GetSafeHandle(),TRUE);

//绘制圆角矩形的窗体。

和应用类初始化中添加的:

SetDialogBkColor(RGB(80,80,180),RGB(0,0,0));

//设置窗体颜色。

如果是第一次使用该程序,那么你将看到"

加载历史”按钮是灰化的,不能使用,这是因为初始化中使用了该语句,

ifstreaminfile1(”Index。

,ios:

:

if(!

infile1)this—〉GetDlgItem(IDC_BUTTON_LOAD)—〉EnableWindow(FALSE);

没有创建过”Index.txt”文件,当然无法读取!

将已有的"

文件删除,然后重新启动系统,会有相同的效果.

你会看到窗口中”形状"

,”画笔颜色”,”填充颜色"

分别默认为”圆角矩形"

,"

红色”,"

蓝色”,这是因为在初始化过程中,已经对相应的变量赋值,而且设置了光标选择:

m_PenColor。

m_BrushColor。

SetCurSel(4);

SetCurSel

(2);

//设置光标初始定位。

m_CurrentBrushColor=RGB(0,0,255);

//画刷颜色设置默认初值为蓝色.

m_CurrentPenColor=RGB(255,0,0);

//画笔颜色设置默认初值为红色。

如果我们想画一个边框为洋红色,填充色为青色的圆角矩形,那么当鼠标点击”画笔颜色”下的"

洋红”时,将触发组合框IDC_COMBO_PEN_COLOR的CBN_SELENDOK消息,将调用,

voidCMy0910200155Dlg:

OnSelendokComboPenColor()

intn=m_PenColor。

GetCurSel();

switch(n)

case0:

m_CurrentPenColor=RGB(255,0,0);

break;

case1:

m_CurrentPenColor=RGB(0,255,0);

case2:

m_CurrentPenColor=RGB(0,0,255);

case3:

m_CurrentPenColor=RGB(255,255,0);

break;

case4:

m_CurrentPenColor=RGB(255,0,255);

case5:

m_CurrentPenColor=RGB(0,255,255);

default:

m_CurrentPenColor=RGB(0,0,0);

}

}

同理可知,当鼠标点击”填充颜色"

下的”青色”时,将触发组合框IDC_COMBO_BRUSH_COLOR的CBN_SELENDOK消息,将调用,

OnSelendokComboBrushColor()

intn=m_BrushColor。

GetCurSel();

case6:

m_CurrentBrushColor=RGB(255,0,0);

case5:

m_CurrentBrushColor=RGB(0,255,0);

case4:

m_CurrentBrushColor=RGB(0,0,255);

case3:

m_CurrentBrushColor=RGB(255,255,0);

case2:

m_CurrentBrushColor=RGB(255,0,255);

case1:

m_CurrentBrushColor=RGB(0,255,255);

default:

m_CurrentBrushColor=RGB(255,255,255);

这两个函数能将光标的选择转换为画笔或画刷的颜色。

不过,当然必须先给组合框添加过一个CBN_SELENDOK消息!

然后点击”形状”下的”圆角矩形”,这时this-〉m_Shape。

GetSel

(1)其值为TRUE,表明”圆角矩形”被选中了,当然,其它两个m_Shape.GetSel(0)和m_Shape.GetSel

(2)都为FALSE.

在画图前,如果你足够细心,你会注意到刚才在选颜色时,如果颜色还没有选定,它周围就会有一个当前颜色的色圈,而当颜色已选定时,色圈就会变为彩色背景,这是因为之前给类CMy0910200155Dlg添加了WM_CTLCOLOR消息,因此当触发该消息时,会调用,

HBRUSHCMy0910200155Dlg:

OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)

{

HBRUSHhbr=CDialog:

OnCtlColor(pDC,pWnd,nCtlColor);

if(pWnd—>

GetDlgCtrlID()==IDC_COMBO_PEN_COLOR)

hbr=:

CreateSolidBrush(this—>

m_CurrentPenColor);

pDC->

SetBkColor(this-〉m_CurrentPenColor);

if(pWnd-〉GetDlgCtrlID()==IDC_COMBO_BRUSH_COLOR)

CreateSolidBrush(this—〉m_CurrentBrushColor);

pDC—>

SetBkColor(this—>

m_CurrentBrushColor);

}

returnhbr;

该方法可以实现控件颜色的改变,考虑到界面的简洁(不是简单)和色彩协调,其它控件的颜色就不必改变了。

做好了这些准备工作,现在我们开始绘图,点击”绘图”按钮,就触发了IDC_BUTTON_DRAW的BN_CLICKED消息,会调用,

voidCMy0910200155Dlg:

OnButtonDraw()

flag=1;

flag1=1;

OnPaint();

this-〉GetDlgItem(IDC_BUTTON_LOAD)->

EnableWindow(FALSE);

在这里,我们只将flag=1和flag1=1条件下的OnPaint()函数展开(系统自己生成的代码我们略去)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1