关于VC

程序可看成 = 数据 + 函数
程序中的类和结构,其作用只是为了更好地去组织数据和函数.
数据是用来存储信息,是信息的载体,而函数唯一功用就是去改变内存中的数据,以到达改变信息的目的。
数据在内存都是01表示的二进制串,而数据类型,只是为了更好地去理解及使用二进制数据。


模块化:
通常在一个系统要划分多个模块,也就存在一个模块引用了另一个模块.
为了建立这种关联,必须要引入另一个模块的头文件和lib文件信息.
头文件作用:就是在编译模块时,保证语法的正确性:调用的数据成员及函数名是否申明(函数体可以不存在,因为编译时不需要知道函数地址)
,及参数是否正确等信息。
lib文件作用:就是在连接时,保证函数调用的正常跳转,即在lib找查找调用的函数地址是否存在,
也就是要知道函数体所在的DLL位置或函数索引号,以方便跳转.这时,函数必须要定义.


include头文件:
在定义一个类的头文件中,如果应该引用了其他类信息,
通常引入其他类信息,是通过include其他类头文件信息?另外还有种方法就是class直接申明.
用class是因为通常头文件中通常只是定义指针,
如果定义对象(对象是要计算空间)及其方法的调用(方法调用在编译时是要进行函数符号校验),就不能用class.
如果是继承关系,则用include方式.
现在结合uml中的"聚合"和"组合"两个的概念来理解.
聚合与组合共同点就是:一个对象由其他的对象组合而成.
其主要区别是:聚合就是对象的生命期不一致.组合就是对象的生命期一致.
如果是聚合类,应该就用class,否则就用include.
UML中也有直接(强)依赖和间接(弱)依赖两个概念.include就是强依赖,class或参数或函数体内有引用就是弱依赖.
这样理解,就可以将实际实现与UML的概念符号连通了。

资源文件:
每个工程都会对应一个rc文件,rc文件用来保存菜单/工具条/对话框等等界面资源的描述,而实际的各个资源二进制数据就是存在在res目录下各个资源文件.
如果对RC结构熟悉,可以直接在RC文件中编辑,不需VC的资源编辑器.这些资源在编译后,都是以二进制的形式被打包到dll或exe中.模块被加载到内存后,有唯一的句柄用于标识模块对应资源.
程序通过资源的ID来标识菜单项和工具条某一按钮.为方便程序调用
这些ID都被记录在resource.h头文件中,通常这个文件都被包括在主应用对象申明的头文件中.
一个进程中,只允许有一个当前资源句柄,当一个进程加载多个模块时,每个函数对资源的引用只局限在自己资源内.所以就存在资源切换的处理.如果资源句柄不正确可能导致得到的资源不正确的问题.
 
ID与函数的映射,是通过ON_COMMAND宏来将ID与处理过程指针关联起来并保存到消息映射表中,

命令消息的路由过程:MainFrame->View->Document->MainFrame->Application....

用户消息定义:
除宏外,为防止消息号重复也可以这样定义:
const UINT USER_ADDMESSAGE = ::RegisterWindowMessage("USER_ADDMESSAGE");

同步发送:SendMessage异步发送:::PostMessage

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值