filename, IMAGE"/>

MFC编程基础 2 文档_视图结构应用程序(4)

来源:网络收集 时间:2025-11-14 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xuecool-com或QQ:370150219 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

{ CTESTDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

17

if ( pDoc->filename!="" )

{ HBITMAP hbitmap;

hbitmap=(HBITMAP)LoadImage(NULL,pDoc->filename,

IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

CDC m;

CRect rect;

m.CreateCompatibleDC(pDC);

GetClientRect(rect);

m.SelectObject(hbitmap);

pDC->BitBlt(20,20,rect.Width()-20,rect.Height()-20,&m,0,0,SRCCOPY);

}

}

说明:加载磁盘上的一个.bmp 文件应使用LoadImage() 。其函数原型为:

HANDLE LoadImage(HINSTANCE hinst , LPCTSTR lpszName , UINT uType , int cxDesired , int cyDesired , UINT fuLoad );

其中:hinst 可以用NULL ,lpszName 是图象在磁盘上的文件名,uType 表示图象的类型,fuLoad 的值为LR_LOADFROMFILE 表示从文件中导入位图。

颜色对话框

颜色对话框属于CColorDialog 类。其一般使用形式为:

CColorDialog dlg; // 说明dlg 为CColorDialog 类的对象

dlg.DoModal(); // 打开颜色对话框

COLORREF c= dlg. GetColor(); // 获取用户选择的颜色并赋给 c 说明:

①GetColor() 是CColorDialog 的成员函数,其返回值是用户选择的颜色。

②若用户选择了“取消”,没有选择颜色,则GetColor() 的返回值是对话框的默认值。

【例2.10】编写一个如图所示的应用程序。若用户单击左键,则弹出颜色对话框,用户选择一种颜色后就以鼠标单击处为圆心画一个圆,圆的半径随机产生。

(1)在文档类中添加三个公有的数据成员:

CRect r[100]; // 存放圆的数据

COLORREF c[100]; // 存放对应数组r 的圆的颜色

int n; // 目前圆的数量

(2)在文档类的OnNewDocument() 函数中对数据成员n 进行初始化。

18

n=0;

(3)通过“建立类向导”为视图类添加WM_LBUTTONDOWN 消息处理函数,代码: void CMy0601aView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CMy0601aDoc *pDoc=GetDocument();

CColorDialog dlg;

dlg.DoModal();

pDoc->c[pDoc ->n]=dlg.GetColor();

int r=rand()%50+10;

CRect rect(point.x-r,point.y-r,point.x+r,point.y+r);

pDoc->r[pDoc->n]=rect;

pDoc->n++;

Invalidate();

CView::OnLButtonDown(nFlags, point);

}

(4)在OnDraw() 函数中,用数组 c 的颜色绘出所有的圆

void CMy0601aView::OnDraw(CDC* pDC)

{ CMy0601aDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

CBrush newbrush,*oldbrush;

for(int i=0;in;i++)

{ newbrush.CreateSolidBrush(pDoc->c[i]);

oldbrush=pDC->SelectObject(&newbrush);

pDC->Ellipse(pDoc->r[i]);

pDC->SelectObject(oldbrush);

newbrush.DeleteObject(); // 删除画刷

}

}

字体对话框

字体对话框属于CFontDialog 类。其一般使用形式为:

CFontDialog dlg; // 说明dlg 为CFontDialog 类的对象

dlg.DoModal(); // 打开字体对话框

LOGFONT font; // 说明font 为LOGFONT 类型结构变量

dlg.GetCurrentFont (& font ); // 把用户选择的字体送入变量font 中

COLORREF c= dlg. GetColor(); // 把用户选择的颜色赋给变量 c

Cfont cf; // 说明cf 为Cfont 类的对象

cf.CreateFontIndirect(&font); // 用font 中的数据构造字体

pDC->SelectObject(&cf); // 选用新字体

pDC->SetTextColor(); // 选用新颜色

pDC->TextOut(10,10," 同舟共济自强不息!"); // 用新的字体和颜色输出文字

19

说明:

①LOGFONT 是Visual C++ 定义的结构类型,用于存放有关字体的参数。

②GetCurrentFont () 是字体对话框的成员函数,把字体数据送入font 中。

【例2.11】编写一个如图所示的应用程序。若用户单击左键,则弹出如图所示的字体对话框,然后用用户选择的字体后输出“同舟共济自强不息!”

(1)在文档类中添加两个公有的数据成员:

public:

LOGFONT font; // 存放有关字体的数据

COLORREF c; // 存放字体颜色

(2)通过“建立类向导”为视图类添加WM_LBUTTONDOWN 消息处理函数,代码: void CMy0601aView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CMy0601aDoc *pDoc=GetDocument();

CFontDialog dlg;

dlg.DoModal();

dlg.GetCurrentFont(&pDoc->font);

pDoc->c=dlg.GetColor();

Invalidate();

CView::OnLButtonDown(nFlags, point);

}

(3)在OnDraw() 函数中,用选定的颜色和字体输出文字

void CMy0601aView::OnDraw(CDC* pDC)

{ CMy0601aDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

CFont cf;

cf.CreateFontIndirect(&pDoc->font);

pDC->SelectObject(&cf);

pDC->SetTextColor(pDoc->c);

pDC->TextOut(10,10,"同舟共济自强不息!");

}

20

21 调用自定义对话框

对话框是 Windows 及其应用程序的重要组成元素。 Windows 应用程序不仅可以使用通用对话框,而且还可以调用如第七章中设计的用户自定义对话框。

在文档 / 视图结构应用程序中,设计、调用用户自定义对话框的过程可分为三个阶段:

(1)设计、测试对话框;

(2)创建对话框类;

(3)使用对话框;

下面通过一个实例说明。

【例2.12】 设计一个如图所示的应用程序。若用户单击左键,则弹出输入成绩对话框,选择 OK 后平均成绩和总分在窗口的客户区输出。

(1)设计对话框

①用 AppWizard 生成 SDI 应用程序框架;

②选择“插入 | 资源”命令;

③在弹出“插入资源”对话框中,选定“ Dialog ”,然后选择“新建”;

④ 在 ResourceView 中展开 Dialog ,可以看到新增了 ID 为 IDD_DIALOG1 的资源双击该 ID ,则在窗口中间显示对话框设计界面,在这里进行对话框设计。(保留原有ok 按钮)

⑤ 测试对话框

选择“编排 |TEST ”测试对话框。若符合要求,则对话框设计就完成了

(2)创建对话框类

①若双击对话框设计界面,或在对话框设计界面的快捷菜单中选择“建立类向导”, ②选择“ Create a new class ”,选择“ OK ”。

③在 “ New Class ”对话框中输入对话框类名: CInput 。

将 5 个编辑框都连接到 int 类型的变量。

(3)调用对话框类

首先在视图类的实现文件 TESTView.cpp 中添加对话框类头文件的包含命令: #include "Input.h"

(注意,不能加在最前面,至少第三行或以后)

百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典行业范文MFC编程基础 2 文档_视图结构应用程序(4)在线全文阅读。

MFC编程基础 2 文档_视图结构应用程序(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.70edu.com/fanwen/1298352.html(转载请注明文章来源)
Copyright © 2020-2025 70教育网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:370150219 邮箱:370150219@qq.com
苏ICP备16052595号-17
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:7 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219