VC学习:记录1

1.静态文本控件选择notify属性之后,才可以对单击起反应
2.三选复选框在SetCheck 里0没选中,1选中,其他都是第三种状态。
3.代码init函数里面的优先度比属性里设置的高,感觉好像属性是在处理代码之前就设置好的,然后代码在后面会覆盖它。
4.组合框中的列表框中,要先用GetCurSel()获得索引值,再用GetLBText(索引,字符串)获得内容。VC2010用“;”在数据里把每一行分开,从而加入多行!!!!!!!!!!
5.图像列表不能通过面板添加。只能用代码编辑。用于存储管理相同大小的一组图像。其中的图像通过图像索引访问。
6.OnOK对ID_OK响应, OnCancel对IDCANCEL的响应
7.在属性-配置属性-常规-字符集中选择“使用多字节字符集”就能将char*格式的自动转换成LPCTSTR格式了。不用这个必须要强制转换,但是转完了可能乱码。
8.DoDataExchange相当于数据动态绑定技术,有了控件类和变量之后还想加入新的控制变量,在这里加入声明,可以把新的变量和控件结合起来。

9.如果要处理消息,需要用到消息映射。在头文件类的声明时使用DECLARE_MESSAGE_MAP()。然后要在.cpp文件中加入具体映射。开头用BEGIN_MESSAGE_MAP(本类类名,基类类名),结尾用END_MESSAGE_MAP()。一般情况感觉都会用类向导加入对消息的处理,这两个中间的具体映射会自动加入。

10.动态链接库封装功能函数,不提供源代码的情况下就可以给其他的应用程序使用这些函数。资源共享很方便,换功能或者加新功能只需要换个库就行,也不用下载更新甚至重新安装。

11.#pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义

12.经过大量长时间的尝试和上网对照学习,发现书上包括很多网上的vc6.0的对于动态链接库的创建和引用方法已经不能使用。经过学习和尝试,发现一种较为好用的创建和链接方法。
创建:
首先按照流程, 新建->项目-> win32项目->写名字->确定->下一步,然后
方法一:选中DLL和空项目
可以直接生成空项目,然后自己创建头文件和源文件,里面加入代码,注意头文件和源文件要对应,要用 _declspec(dllexport) 来保证dll文件里可用。有时候还需要自己编写加入dllmain.cpp。但是这种方法过于繁琐,对于其他头文件的支持也不好,用起来比较麻烦,所有代码都要自己加。优点是比较干净,一目了然,不容易出问题。
方法二:选择DLL和导出符号
会给提供好几个基础的头文件和各种已经写好的便于导出、生成的代码,加入时只需要在头文件把“项目名_API”放在函数或者变量声明前,在源文件最后把“项目名_API”放在函数或变量实现前即可,此时“项目名_API”根据不同情况代表“__declspec(dllexport)”或“__declspec(dllimport)”。
然后加入.def文件即可。
关于引用:
打开项目 -> 项目属性 -> 配置属性 -> VC++目录 -> 包含目录 加头文件入.h所在目录的绝对路径,以分号间隔。
打开项目 -> 项目属性 -> 配置属性 -> VC++目录 -> 库目录 加入.lib文件所在目录的绝对路径 。
项目 -> 项目属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项 中加入.lib文件名。
然后最好把.dll文件复制到引用他的文件目录下。
最后在头文件中加入#include。

13.error C2471时:
1. “C/C++” --> "常规” -->”调试信息格式” 设置为 “C7 兼容(/Z7)”
2. “C/C++” --> "代码生成” -->”启用字符串池” 设置为 “是(/GF)”
3. “链接器” --> "调试” -->”生成调试信息” 设置为 “是(/DEBUG)”
发现一般第三个已经是这样,12比较容易出现。

14.CString学习
感觉CString类提供了很多对字符串的便捷操作,功能更人性化,用起来更方便。

在CString中:
要用_T()把字符串包起来才能把字符串看成CString型。
在创建的时候,使用构造器可以:
CString str2(str1) 可以直接把str1的内容复制到str2中。
CString str(_T(内容),数量)可以使str成为一个有’数量’个‘内容’的字符串。
使用过程中:
Left()从左边1开始获取前n个字符。
Mid( int nFirst )从左边第 nFirst+1 个字符开始,获取后面所有的字符。
Mid(nFirst,int n)从左边第 nFirst+1 个字符开始,获取后面n个字符。
Right( int n )从右边1开始获取从右向左前n个字符。
str.MakeLower() 把str全变成小写。
str.MakeUpper()把str全部变成大写。
str.MakeReverse() 把所有字符顺序颠倒。
n1 = str.Replace(_T(str1), _T(str2)) 把str里的str1换成str2,返回换的字符个数到n1。
n2 = str.Delete(位置,数量) 从str里把从‘位置’开始的‘数量’个字符删了,返回字符串长度到n2。
n3 = str.Remove(_T(str1)) 从str里移除str1,返回数量到n3。

CTime和CString都可以比较,其中CTime是比较绝对时间,但是CString最好还是使用它的Compare()和CompareNoCase()来进行比较。

15.按快捷键Ctrl+D,对话框模板上就会显示各个控件的Tab顺序数字。然后按照顺序点击就可以设置点击顺序。也可以在主菜单中选择“Format”->“Tab Order"来进入Tab模板视图。
16. 事件是消息的封装,比如一个单击事件可能包含按下消息、松开消息、点击消息。
17. LP前缀代表long pointer,意思是这是一个指向32位地址长指针。(32位操作系统里sizeof测试指针长度永远是4字节)
18. 标准的 socket 函数是全平台通用的,而加上了 WSA 前缀的函数则是微软定义的,在其他平台上(比如 Linux 等)就不能用了。
19. AfxSOxketInit()函数在内部已经调用了WSAStartup,并且还做了许多其他工作,因此在MFC中调用这个函数比较方便。
20. (./ 当前目录)(…/ 父级目录)(/ 根目录),路径中要用\而不是\。
21. #ifdef no1
语句1
#endif
用作如果已经对no1有定义,那么就执行语句1。
22. #if 表达式
程序段1
#else
程序段2
#endif
用作当表达式值为真(非零)时就编译程序段1,否则编译程序段2。可以事先给定一定条件,使程序在不同的条件下执行不同的功能。
23. L"我的字符串” 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。
strlen(“asd”) = 3而strlen(L"asd") = 6
_T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式。自动的,很方便。

SDI和MDI在结构上的区别在于:
(1)MDI应用程序的框架窗口从CMDIFrameWnd类中派生,而SDI应用程序的框架窗口从CFrameWnd类中派生。
(2)MDI应用程序中包含文档视图的子窗口由CMDIChildWnd派生,而SDI应用程序不存在子框架窗口。
(3)MDI应用程序和SDI应用程序的文档模板类不同。MDI应用程序中使用CMultiDocTemplate类对象,而SDI应用程序使用CSingleDocTemplate类对象。
(4)MDI应用程序至少含有两个菜单资源,而SDI只有一个。
(5)SDI应用程序通常只有一个菜单,而MDI应用程序通常含有两个,一个在没有文档打开时显示,另一个在有文档打开时显示。
(6)SDI应用程序仅有一个框架窗口,而MDI应用程序有两个:一个是顶层框架窗口,另一个是文档窗口。前者和SDI的框架窗口类似,后者则用来包含打开文档的视图。SDI直接砸框架窗口里面打开文档。

OLE/COM
纯粹的数据交换(剪切板)有很多弊端,比如需要解析格式,无法同步数据等等,于是OLE出现了,对象的链接与嵌入(Object Linking and Embedded,OLE)的诞生把原来应用程序的数据交换提高到“对象交换”,这样程序间不但获得数据也同样获得彼此的应用程序对象,并且可以直接使用彼此的数据内容,其实OLE以前就是Microsoft的复合文档技术,它的最初版本只是瞄准复合文档。以我个人理解,OLE所谓的封装就是告诉调用者:我有哪些数据、什么程序可以操作这些数据。而其他程序只要使用OLE技术,就可以方便的获取数据,或者调用相应的程序操作数据。

COM(Component Object Module,对象组件模型)的基本出发点是,让某个软件通过一个通用的机构为另一个软件提供服务。COM是独立于语言的组件体系结构,可以让组件间相互通信。

ColeMessageFilter 可以解决在用OLE操作OFFICE时出现的,因为操作频繁导致的,被呼叫方拒绝接受呼叫问题(HRESULT:0x80010001 (RPC_E_CALL_REJECTED))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值