MFC课程设计实验报告(4)

2019-09-02 13:38

MFC—课程设计

}

CLwhDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CShape* p=NULL;

if (pDoc->m_Elements.GetSize() > 0) { }

// TODO: add draw code for native data here

for (int i=0; i < pDoc->m_Elements.GetSize(); i++) { }

p = (CShape*)pDoc->m_Elements[i]; p->Draw(pDC);

9. 鼠标左键消息响应函数

按下Ctrl+W组合键,在弹出的MFC ClassWizard 对话框中选择Message Map,在Class name选择CLwhView类,在Object ID中选择CLwhView,在右边的Messages中为其添加鼠标左键的消息响应函数OnLButtonDown,双击OnLButtonDown函数(参见附表1.函数定义与功能一览表),出现OnLButtonDown()的定义模块,写入以下代码: CType dlg;

if ((nFlags&MK_CONTROL) == MK_CONTROL)//Ctrl键按下

dlg.DoModal();

即可实现在单文档运行界面按下Ctrl+鼠标左键弹出对话框的操作,但是,要实现当弹出对话框按下OK键就可以画出图形的操作,就得利用枚举型传过来的参数进行选择判断(switch语句),然后执行画图操作(以CSquare为例)

if (dlg.DoModal() == IDOK)

{

switch(dlg.m_TuYuanTyp)

16

MFC—课程设计

{

case EnumTuYuanTyp_Square:

{ }

p = new CSquare(dlg.X,dlg.Y,dlg.Width,dlg.LineWidth,

dlg.LineColorR,dlg.LineColorG,dlg.LineColorB, dlg.FillColorR,dlg.FillColorG,dlg.FillColorB);

break;

??

}

}

当不按下Ctrl键,直接按左键,要进行修改图元属性的功能,则也是在此处添加相应代码,对应之前的按下Ctrl键的if语句,写入else语句,添加重新绘图的功能代码即可。(具体见主要代码清单)

10.鼠标右键双击消息响应函数

与添加鼠标左键消息相应的方法一样(参见附表1.函数定义与功能一览表),先在ClassWizard中添加,双击进入定义模块,要实现右键双击删除,并弹出一个警告是否删除的对话框,首先得明白我们基于图元的数据存储在于动态数组m_Elements,所以,要删除图元,只需删除该图元对应数组中存储的数据即可,主要代码如下:

for (int i=0;i < pDoc->m_Elements.GetSize(); i++)

{

p = (CShape*)pDoc->m_Elements[i]; if (p->IsMatched(pntLogical)) {

CCut cut;

if(cut.DoModal()==IDOK) {

17

MFC—课程设计

}

}

pDoc->m_Elements.RemoveAt(i); delete p; Invalidate(); }

11.颜色按钮

CColorDialog类实现了标准的颜色对话框,因此用创建CColorDialog类的对象去调用DoModal()函数,即可显示出对话框,如果DoModal()返回IDOK, 则用GetColor()来获取颜色对话框中选择的颜色值 ,以下是线色按钮的相关代码:

void CType::OnLineColorButton() {

// TODO: Add your control notification handler code here

COLORREF color = RGB(47, 78, 107);// 颜色对话框的初始颜色 CColorDialog colorDlg(color); // 构造颜色对话框,传入初始颜色值 if (IDOK == colorDlg.DoModal()) {

color = colorDlg.GetColor();// 获取颜色对话框中选择的颜色值 SetDlgItemInt(IDC_LineColorR, GetRValue(color)); // 在线色编辑框中显示所选颜色的R分量值

SetDlgItemInt(IDC_LineColorG, GetGValue(color));// 在线色编辑

框中显示所选颜色的G分量值

SetDlgItemInt(IDC_LineColorB, GetBValue(color));// 在线色编辑

框中显示所选颜色的B分量值 } }

18

MFC—课程设计

12.获取鼠标点击处的逻辑坐标

函数:Point();

函数功能:该函数检取光标的位置,以屏幕坐标表示; 函数原型:BOOL GetCursorPos(LPPOINT lpPoint); 参数: IpPoint; (参见附表1.函数定义与功能一览表) POINT结构指针:接收光标的屏幕坐标; 代码如下:

CType::CType(CWnd* pParent /*=NULL*/) {

POINT point;

GetCursorPos(&point); X = point.x;

Y = point.y;

: CDialog(CType::IDD, pParent)

?? }

13.对话框中控件的显示与隐藏

首先要清楚控件的显示与隐藏是基于对其他控件进行操作,在该工程中,要实现我在图元属性组合框中选择“文本”,则出现角度框,而选择其他则不出现角度框,所以,应对该组合框添加消息相应函数,在ClassWizard中,选中IDC_m_ComBox_TuYuanType(参见附表1.函数定义与功能一览表),选择Messages为CBN_CELCHANGE,双击进入定义模块,写入如下代码: void CType::OnSelchangeComBoxTuYuanType() {

// TODO: Add your control notification handler code here int iSel=m_ComBox_TuYuanType.GetCurSel();//得到当前选择的索引值

switch(iSel)

19

MFC—课程设计

}

{ case 0: case 1: case 2: case 3: case 4:

GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);//隐藏角度框 GetDlgItem(IDC_Angle)->ShowWindow(SW_HIDE); break;

case 5:

GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);//显示角度框 GetDlgItem(IDC_Angle)->ShowWindow(SW_SHOW); break;

default: }

Invalidate();

ASSERT(0); break;

14.文档的存取

文档的存储主要通过文档类重载成员函数Serialize来实现。 void COovpExam1Doc::Serialize(CArchive& ar) {

m_Elements.Serialize(ar);//其中m_Elements是文档用来保存图元对象的

数组 }

20


MFC课程设计实验报告(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中数学实施分层教学的研究

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: