通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>编程开发>>VC编程>>正文 新版上线![旧版]
注:打开慢时请稍等

『VC++技术内幕』学习笔记(3)

http://www.iyit.net  日期:2006-5-23 11:49:38  来源:本站整理转载   点击:
参加讨论第三篇:消息映射和视图类

   在写了两篇笔记后有很多朋友给我发信,和我交流一些在学习过程中的问题。但由于我也是一个初学者,对一些问题自己也没有把握,所以实在不敢做答,但我会尽量尽我所能和大家一起研究,谢谢大家的鼓励和信任。

   在开始先补充一下上一篇的内容“内容窗口的创建”,兼答天歌网友的问题(如果天歌兄弟能看到的话 )。为了简化我们看一个更简单代码,只有一个文件,创建一个空白的窗口,什么也不做。注意哦:真写程序时还是要分成.h和.cpp两个文件比较清晰。
   前几步和『VC++技术内幕』学习笔记(2)中的一样,下面是代码:

//**********************************
// MyApp.cpp

#include "afxwin.h" //afxwin.h会调用windows.h是MFC编程的途径,只要用到MFC就一定要包含它。

class CMyApp:public CWinApp //从CWinApp继承一个类
{
public:
virtual BOOL InitInstance();//重载InitInstance虚函数
};

class CMyFrame:public CFrameWnd //从CFrameWnd继承一个类
{};


CMyApp myApp; //最后又激活应用程序的构造函数

BOOL CMyApp::InitInstance ()
{
m_pMainWnd=new CMyFrame;
//new 激活了CMyFrame类构造函数CFrameWnd(),构造函数调又用CREATE()
//m_pMainWnd在MFC的定义CWnd* m_pMainWnd;// main window (usually same AfxGetApp()->m_pMainWnd)
//m_pMainWnd保存窗口的位置
((CMyFrame * )m_pMainWnd)->Create(NULL,"一个MFC应用程序:空白窗口"); //创建窗口
m_pMainWnd->ShowWindow(m_nCmdShow); //显示在屏幕上
return TRUE;
}

   如果还不明白建议查看MSDN或看看侯大师的深入浅出。关于这个问题就说到这,最后对天歌朋友的学习态度表示敬意。

下面进入正体,让我们继续来看看MFC的消息映射。

   MFC是通过一些宏来将特定的消息影射到派生类相应的成员函数上,这种体制的好处是允许某些非窗口类(如文档类)来控制命令消息。且不需要C++作任何扩展。
   MFC的消息控制函数要求提供函数原形、函数体以及消息映射中的入口。真的很麻烦,还好用Class Wizard可以很容易的将上面说到的东西加到我们的类中。例如只要在Class Wizard中添加WM_LBUTTONDOWN消息,则相应的代码便加在合适的地方。怎么样简单多了吧。
   应用程序除了包含应用程序框架类外,一般还要包含文档和视图类。这种文档-视图结构是应用框架的核心。我一直做MIS开发,当然不是用VC用的是VB,所以看到这我很不自觉的想到了后台数据库和界面的关系,这个例子可能不是很恰当,但却能很好的帮助我们理解文档和视图。文档好比后台的数据库,视图就是界面上显示的内容,同一个数据库可以用不同的界面显示,但由于所有的界面内容都是从数据库中数据得来,所以当数据库发生变化时所有的相关界面显示都会跟着改变。越来越觉得不恰当,不过实在想不出别的例子了。我们的应用程序实际上就是通过视图对文档进行一系列操作,不单指输出。下面我们看看视图类。
   视图是一个从CView类派生的类的对象,在屏幕上显示的窗口就是一种。对象的行为完全由类的成员函数和数据成员决定,其中及包括派生类中的特定函数,也包括基类的标准函数,所以了解MFC类库的结构以及各类的标准成员函数是多么重要啊,别怕麻烦找来MFC的源码读读,看多少算多少,但肯定不白看,这是雷神的经验。

记得上一篇的我的例子吗

1、打开VC++6从菜单选择NEW,给项目命名为”MyApp01“。
2、选择MFC AppWizard[exe] 选项,除STEP 1选择单文档外其他STEP缺省。
此时MFC应用程序框架便帮我们完成了应用程序,你可以执行它,它会在屏幕上显示一个典型的WINDOWS风格的空白窗口。

我们来看一下项目程序所在目录下的文件:

myapp01.dsp //项目文件
myapp01.dsw //工作空间文件
myapp01.rc //资源描述文件
myapp01View.cpp //包含CMyAppView类成员函数的视图类实现文件 重点
myapp01View.h //包含CMyAppView类成员函数的视图类头文件 重点
myapp01.opt //二进制文件,告诉Developer Studio本项目的哪些文件是打开的,又是如何排列的
readme.txt //用来解释所产生的所有文件,未列出的myapp01Doc.cpp、myapp01Doc.h、StdAfx.cpp、StdAfx.h....在这里都可以找到相应解释。
resource.h //包含#define常量定义的头文件

   仔细研究一下myapp01View.cpp和myapp01View.h文件,程序核心CMyAppView类在这两个文件中定义,就是我们今天要学的视图类。要想看到CMyAppView类的全貌,应该用Source Browser查看,选择CMyApp01View,按Alt+F12,选择Base Class and Members 选项。我们会看到CMyAppView类的层次关系(从哪来得),以及所有成员函数,包括从基类继承的(在Class View中不能显示父类的成员函数)。我们发现实际上你什么也不用做就拥有了一个有着强大功能的类。

   下面我们看一下CMyAppView类的OnDraw成员函数,它是虚函数作用是每当窗口需重绘时应用程序框架会调用它。它的原型是这样的(在myapp01View.h可以找到)

virtual void OnDraw(CDC* pDC); // overridden to draw this view

   参数是CDC类的指针,WINDOWS是通过和窗口相关联的设备环境(CDC类的对象就是设备环境)和显示硬件进行通讯。有了这个指针我们便可以调用CDC类的成员函数来完成各种绘制工作,如上一篇用到的textout()还有一些Ellipse()、Polygon()、BitBlt()等等在MSDN中有好长的一篇,它是直接从CObject派生的,好了我们开始在OnDraw()里添加一些绘图工作。

3、在Class View选择CMyApp01View类的OnDraw()成员函数双击会在C++编译器看到以下内容

void CMyApp01View::OnDraw(CDC* pDC)
{
CMyApp01Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
在 // TODO: add draw code for native data here的位置增加一行代码
void CMyApp01View::OnDraw(CDC* pDC)
{
CMyApp01Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(10,10,"雷神愿意和所有学VC的朋友共同进步!");
pDC->SelectStockObject (DKGRAY_BRUSH); //选择刷子
pDC->Ellipse (CRect(20,40,120,140)); //画圆,CRect是MFC库提供的一个表示WINDOWS矩形类
pDC->Rectangle (CRect(220,240,120,140)); //画矩形
// TODO: add draw code for native data here
}

编译运行,成功了吧。先到这吧。另外以后的文章将同时贴在写作区。
(未完待续)

编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:『VC++技术内幕』学习笔记(2)
下一篇:『VC++技术内幕』学习笔记(4)
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
用VC++自制王码五笔输入法安装包  在VC++项目中为MDI主框架窗口添加位图 VC++编程实现对火焰的计算机动态仿真
VC下ADO开发实践之一 VC制作具有声音效果的动画桌面精灵 VC中如何等比例缩放图像
在VC中调用DirectShow全屏播放视频 『VC++技术内幕』学习笔记(10) 『VC++技术内幕』学习笔记(9)
『VC++技术内幕』学习笔记(7) 『VC++技术内幕』学习笔记(6) 『VC++技术内幕』学习笔记(5)
『VC++技术内幕』学习笔记(4) 『VC++技术内幕』学习笔记(2) 『VC++技术内幕』学习笔记(1)
『VC++技术内幕』学习笔记(目录) 如何利用VC的Remote Debug功能 如何把VC++代码转换成VB代码?
VC编程实现IE风格的界面 在VC中如何将数据导入Word中 VC++实现拨号上网程序详解
VC一点通:实现文件夹的缩略图显示 VC下TabCtrl的控制问题解决办法 VC高级学习:编程本质论
最新更新 热点排行 推荐新闻
用VC++自制王码五笔输入法安装包 
在线资源指导
实用组件介绍
如何以最佳方式购买组件
ActiveX和OCX组件资源
用VC++自制王码五笔输入法安装包 
在线资源指导
实用组件介绍
如何以最佳方式购买组件
ActiveX和OCX组件资源
建立安装程序
收 集 文 件
理解各种打包类型
打包应用程序
向应用程序增加基于HTML的帮助
VC++实现对远程计算机屏幕的监视
用VC++6.0的Sockets API实现一个聊天室
多线程技术在VC++串口通信程序中的应用
用VC++制作一个简单的局域网消息发送工
用VC 6.0实现串行通信的三种方法
优秀公益广告作品欣赏(8)
java数据类型转换
Windows XP专业版IIS连接数的更改
新开放QQ免费挂级网站
优秀公益广告作品欣赏(7)
免费在QQ上看在线电影电视听音乐
WEB服务器配置全攻略(三)
QQ珊瑚虫外挂4.0版本发布!
免费把QQ炫铃设为本机QQ的系统提示音
Office2007简体中文版浮出水面 美图抢
微软将在华推分期付款,充值卡PC 可低价
 AMD处理器AM2测试 风扇竟运行7分钟
exeplorer.exe错误的问题的总结、解决
ASP.NET 2.0 中的异步页功能应用
硬盘坏道修复及数据恢复宝典
免费登录搜索引擎入口大全
搜索引擎注册九大秘法
小心摄像头成为黑客偷窥你的眼睛
内存混插常见问题和解决方法
Office2007简体中文版浮出水面 美图抢
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息