VC++技术内幕-学习笔记
VC学习笔记
目录对话框 (1)问题: (1)一、从菜单项调用模式化对话框 (2)二、从菜单项调用非模式对话框 (2)按钮控件 (3)1.问题 (3)2.通过资源创建按钮 (3)3.通过代码动态创建按钮 (3)文本框 (3)多路窗口设计及实现 (3)第一种方法 (3)第二种方法 (5)第十讲 (6)1.实现画点、线、矩形、椭圆的基本功能 (6)2.更改框线(类似图形中的描边线)的颜色(增加下划线的代码) (6)3.改变画刷(类似图形中的填充色) (7)8.在窗口中贴图 (7)第二十讲 (7)USB摄像头捕获 (7)海康威视摄像头 (8)第十二讲 (9)(一)C语言文件操作 (9)1.文件内容写入 (9)2.指定位置写入内容 (9)3.读取文件 (9)4.读取中的乱码问题 (10)5.二进制文件和文本文件的区别(第十二讲00:48-01:04,) (10)6. 98341例子 (10)(二)C++类文件操作用的较少 (10)1.写入文件 (10)2.读取数据 (10)(三)WIN32 API对文件的操作 (11)1.打开或创建文件 (11)2.写入数据 (11)3.读取文件 (11)(四)MFC对文件的操作 (11)1.写文件 (11)2.读文件 (11)3. “另存为”对话框 (11)4.“打开文件”对话框 (12)第五讲文本编程 (12)5.1 插入符 (12)5.1.1 插入符的添加 (12)5.1.2 改变插入符(根据字体大小改变) (12)5.1.3 图形插入符 (12)5.2 输出文字 (12)对话框问题:1、对话框位置用代码如何实现?MoveWindow(200, 200, 233, 200);2、对话框长宽如何获取?//在对话框的10%,10%处显示按钮CRect rcDlg;GetWindowRect(&rcDlg);int DlgHeight = rcDlg.Height()/10;int DlgWidth = rcDlg.Width()/10;m_btn3.Create("预创建按钮中间显示的名字",BS_DEFPUSHBUTTON | WS_OVERLAPPED |WS_VISIBLE | WS_CHILD,CRect(DlgWidth,DlgHeight,350,90),this,123);延伸:GetClientRect是客户区的大小3、如何实现对话框以主窗口为基准进行移动,而不是以屏幕为基准。
VC学习笔记
VC学习笔记写在前面的话:1、VC代码量很大,且有很多是自动生成的,一个人很难做到精通每句代码的作用,不像C 语言那样整个代码可以自己写,而且也清楚每句代码的作用。
VC初学者要做的是知道在哪里添加代码,了解添加代码的作用,哪些代码可修改,哪些代码对应哪个模块。
2、C语言放眼望去,无非是各种流程控制语句,而VC放眼望去,是各种类和对象。
简单的说,类和对象的关系就像整型和整型变量的关系,例如C语言中的“int temp”,int相当于类,temp相当于对象。
我们不能直接操作类int,但是可以操作对象temp。
类只是一个概念、一组特征和行为的抽象的集合,只有将类实例化(定义一个对象)才可以使用。
3、如果遇到了奇怪的编译问题,可以先试下菜单栏的“组建——》清除”,然后再重新编译运行看看。
4、初学VC不建议抱一本书从头看到尾,你也看不下去,就算你看下去也忘了。
一门语言的学习方法不应该是这样的。
建议初学者从读代码改代码学起,每本书里都有实例,就从实例的代码读起,代码里遇到不懂的地方再去翻书查看相关知识点,根据自己的理解看看这样改一下行不行,自己能不能添加一部分类似的模块与代码。
代码读的多了,改的多了,自然就会写了。
写的多了,那么你就可以抱一本书从头读到尾,这时你才能真正理解书中的思想。
基础知识:1、【【“.”是一个运算符,用来访问类的成员,如A.B,调用对象A中的B方法。
】】2、3、如定义一个类“class CUser”,则其构造函数为:CUser (),析构函数为:~CUser () 。
4、VC中单冒号和双冒号的作用1.冒号(:)用法(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{unsigned char a:4;unsigned char c;} ; XXX(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。
『VC++技术内幕』学习笔记
『VC++技术内幕』学习笔记(目录)作者:雷神写在前面:我看的『VC++技术内幕』版本为--潘爱民和王国印译清华大学出版的第四版,因从网上看到此版译的最好。
这篇学习笔记是后补的,因为这本书我已经看到了第三十二章,之前并没有做笔记,只是随意的在书上画了画重点,可是越向后学越觉得前面的知识并没有掌握,所以决定重新来过并补上笔记。
我认为只有踏踏实实的记录下每天的学习心得才能真正的有所收获。
我个人认为学习这本经典之前最好先看看WINDOWS 32位编程的书,至少能用纯SDK写出一些小程序。
『VC++技术内幕』学习笔记(1)作者:雷神我看的『VC++技术内幕』版本为--潘爱民和王国印译清华大学出版的第四版,因从网上看到此版译的最好。
这篇学习笔记是后补的,因为这本书我已经看到了第三十二章,之前并没有做笔记,只是随意的在书上画了画重点,可是越向后学越觉得前面的知识并没有掌握,所以决定重新来过并补上笔记。
我认为只有踏踏实实的记录下每天的学习心得才能真正的有所收获。
我个人认为学习这本经典之前最好先看看WINDOWS 32位编程的书,至少能用纯SDK写出一些小程序。
第一天:WINDOWS应用程序一定要有WinMain函数,该函数用来完成一些特殊的任务,象创建程序的主窗口,主窗口用来处理消息的代码。
MFC将WinMain隐藏在框架中,不象写SDK 程序时可以很容易的找到它。
WINDOWS采用的消息处理机制也交给了程序框架,我们不必担心如何使这些消息和代码联系起来。
并且WINDOWS定义好了一些消息,当窗口被创建时系统就会发送WM_CREATE 消息,当点击鼠标左键时便系统会发送WM_LBUTTONDOWN消息,当用户按下键盘时系统会发送WM_CHAR消息,当用户关闭窗口时系统会发送WM_CLOSE消息,当用户进行菜单项选择或单击按钮时系统回发送WM_COMMAND消息,什么都不做系统还会发送WM_TIMER消息。
先不说别的,先搞清出这几个消息再说。
深入编程内幕VC
VISUAL C++ PUBLISHED一走进VISUAL C++ (4)1理解VC工程 (4)2MFC编程特点 (5)3使用W IZARD (6)二 MFC程序结构分析 (20)1WINDOWS程序工作原理 (20)2建立应用程序 (21)3程序结构剖析 (22)3.1 类CMYAPP (23)3.2 类CMAINFRAME (23)3.3类CMyView与CMyDoc (24)三深入MFC类库 (29)1处理用户输入 (29)1.1 定义对话框资源 (30)1.2 定义对话框类 (32)2有关屏幕输出 (40)2.1 设备上下文工作原理 (40)2.2 实例绘图原理剖析 (40)2.3 绘图操作实现 (41)2.4 有关屏幕映射方式 (43)3 文件处理 (46)3.1 对象持续化简述 (46)3.2 实例分析 (48)3.3 与文件处理关系密切的类CFile (55)4DAO技术 (57)4.1 DAO与ODBC (57)4.2 使用MFC实现DAO技术 (57)5打印 (61)5.3 打印工作的开始和结束 (63)5.4 打印程序实例 (63)四、VC程序调试 (69)1.1 调试环境的建立 (69)1.2调试的一般过程 (71)1.3 如何设置断点 (71)1.4 控制程序的运行 (79)1.5 查看工具的使用 (81)2高级调试技术 (89)2.1 TRACE 宏的利用 (89)2.2 ASSERT宏的利用 (90)2.3 ASSERT_VALID宏的利用以及类的AssertValid()成员函的重载 (90)2.4对象的DUMP函数的利用 (91)3内存漏洞的检查 (91)五VISUAL C++与多媒体 (94)1对声音的处理 (94)1.1媒体控制接口 (94)1.2波形混音器 (108)2多媒体文件I/O (110)3多媒体图形图像技术 (120)4图像合成 (135)5FLC动画 (138)6热点 (170)一走进Visual C++Visual C++作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。
Visual C++ 学习笔记(部分待续)
第一部分Visual C++窗口控件类学习:第一天Visual C++6.0概述Visual C++6.0并不是一种语言,而只是C++语言的编译器,或者说是C++语言的实现工具。
Visual C++集程序代码的编辑、编译、连接、调试等功能于一体,为编程人员提供一个既完整又方便的开发环境。
1、Visual C++ 6.0版本微软公司推出了Visual C++ 6.0的三个版本:Standard(标准版)、Professional(专业版)、Enterprise(企业版)✧Standard:学习版,能帮助用户学习C/C++语言及其他技术,没有提供程序代码的分析、优化及MFC类库的静态链接等。
此版本不适宜进行商业软件的开发。
✧Professional:专业版本除了具有标准版的功能外,还包括更多的工具和更强大的功能。
其适用于商业软件的开发✧Enterprise:企业版是功能最强大的版本。
它不仅在专业版的基础上提供了客户端/服务器程序的开发工具,还包括了Source Safe源代码控制等其他工具。
2、Visual C++ 6.0工作区的三个图标标签Visual C++ 6.0的工作区有三个图标标签,其分别允许用户以三种不同的方法查看应用程序的各个部分。
✧Class View(类视图):将工程中所包含的类、事件、函数及变量等在类视图中以层次的结构排列。
✧Resource View(资源视图):在Visual C++ 6.0中,所有的菜单、图标、光标、图片、对话框等都是以资源的形式进行管理的。
而管理他们的就是Resource V iew资源视图。
在该视图中,用户可以找到应用程序中的各种资源,并且可以编辑他们的ID好以及样式、属性等,包括对话框的设计、图标、菜单等。
✧File V iew(文件视图):在视图包含用户工程中的各种文件,用户可以查看并进行编辑。
3、输出窗口(Output Panel)输出窗口给用户的提示信息有:✧编译程序的进展说明、警告及出错信息。
VC++技术内幕(第四版)笔记
VC++技术内幕(第四版)笔记(1~2章)/***************************************/第一章:Microsoft Windows 和 Visual C++1,Windows应用程序中一定要有WinMain函数,用来完成某些特殊的任务,其中最主要的是创建应用次序的主窗口。
2,DOS下,所有次序的目标模块在创建过程中都被静态连接起来。
而Windows允许动态连接,即一些特定结构的库(DLL)可以在运行过程中被装入和连接,并且被多个应用程序共享。
3,项目是一些相互关联的源文件的集合,这些源文件经过编译、连接,然后被组合在一起形成可执行的Wwindows应用程序或DLL。
4,几个重要Developer Studio创建的中间文件:CLW (支持ClassWizard ) DSP (项目文件)DSW (工作空间文件) NCB (支持ClassView)OPT (保持工作空间的配置) PLG (建立日志文件)5,AppWizard是一个代码生成器,它会按照用户通过对话框指定的特性、类名、及源代码文件名来产生Windows应用程序工作架构。
AppWizard所产生的代码只是一些最基本的代码,它完成的功能完全由应用程序的基类所决定。
/**************************************/第二章:Microsoft基本类库应用程序框架1,按照惯例,MFC库类名用大写“C”打头。
2,类CMyApp的对象theApp就代表一个应用程序。
当运行该应用程序的时候,WINDOWS自动调用程序框架内部的WinMain 函数,WinMain函数会去查找该应用程序的全局构造对象(theApp),该对象是有CWinApp类派生类的对象。
C++中,全局对象在主程序被运行之前就已经构造好了。
3,当WinMain发现该应用程序对象(theApp)时,会自动调用虚拟成员函数CWinApp::InitInstance(),该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。
VC笔记
第1课Windows程序运行原理及程序编写流程1.MFC生成的C++源文件中都有StdAfx.h,此文件包含了常用的AFX函数的声明,其中有afxwin.h,此文件包含了CRECT,CPoint,CWnd等许多类及其方法的声明。
2.Project->Setting->Debug可以加入命令行参数。
3.在SDK中要加入"windows.h"和stdio.h。
因为LoadCursor,MessageBox等函数的声明在这个文件中。
4.创建一个完整的窗口的四个步骤SDK,1设计窗口类,2注册窗口类,3创建窗口,4显示窗口。
5.函数名可以代表函数代码的首地址,即可作为函数指针。
6.要查看VC数据类型,可以在MSDN中输入“BOOL”然后选择“DATA TYPE”。
7.atof将字符串转化为float,atoi将字符串转化为int型。
8.所有从CWnd类派生的类都有m_hWnd句柄。
9.变量的生命周期:可以认为出了包含它的大括号,这个变量的生命周期结束。
所以全局变量的声明位于所有大括号之外。
但是用new声明的变量和用static声明的变量除外。
10.sprintf格式化字符,其头文件为stdio.h,在MFC中格式化字符用CString.Format11.GetDC()与ReleaseDC()要成对使用,否则会内存泄漏。
同样,BeginPaint()与EndPaint()。
12.GetStockObject()得到画笔、画刷、字体、调色板的句柄,使用时必须用类型转换。
13.什么时候用NULL,什么时候用0.答,对指针赋值时用NULL,对变量赋值时用0.14.什么是野指针?答:将指针指向的变量的内存释放后,此指针即变成野指针!如何避免野指针?答:将此指针指向NULL即可。
p=NULL;15.SDK代码流程:#include "windows.h"//包含头文件LoadCursor,TextOut等函数#include "stdio.h"//包含sprintf,printf等函数LRESULT CALLBACK MyProc(...);//声明回调函数int WINAPI WinMain(){WNDCLASS wndcls;//设计窗口类wndcls.hcursor=LoadCursor();//初始化....RegisterClass(&wndcls);//注册窗口类hwnd=CreateWindow(...);//创建窗口ShowWindow(..);//显示窗口UpdateWindow(..);MSG msg;//定义消息结构体while(GetMessage(...))//消息循环{...}return 0;}LRESULT CALLBACK MyProc(...)//实现回调函数{switch(uMsg){case WM_CHAR:break;...}}第2课讲述MFC AppWizard的原理与MFC程序框架的剖析1.在main或WinMain之前,全局变量已经被分配内存并初始化了。
[学习笔记]VC++深入详解
VC++VC++深入详解深入详解深入详解目 录前言............................................................................................................................................1 第1章 Windows 程序内部运行原理........................................................................................1 第2章 掌握C++.......................................................................................................................3 第3章 MFC 框架程序剖析......................................................................................................6 第4章 简单绘图.......................................................................................................................7 第5章 文本编程.....................................................................................................................10 第6章 菜单............................................................................................................................12 第7章 对话框(一).............................................................................................................17 第8章 对话框(二).............................................................................................................21 第9章 定制应用程序外观......................................................................................................23 第10章 绘图控制...................................................................................................................26 第11章 图形的保存和重绘....................................................................................................28 第12章 文件和注册表操作....................................................................................................30 第13章 文档与串行化...........................................................................................................33 第14章 网络编程...................................................................................................................35 第15章 多线程.......................................................................................................................37 第16章 线程同步与异步套接字编程....................................................................................38 第17章 线程间通信...............................................................................................................40 第18章 ActiveX 控件.............................................................................................................42 第19章 动态链接库...............................................................................................................43 第20章 HOOK 和数据库访问.. (46)VC++VC++深入详解深入详解深入详解前言1、偷懒的人学VB,聪明的人学Delphi,真正的程序员学VC。
VC深入详解知识学习记录文本(非常全面)
孙鑫孙鑫VC++视频笔记列表(全)简介第一课Windows程序内部运行机制第二课MFC程序框架的剖析第三课MFC消息映射机制和DC的获取第四课简单字处理软件第五课菜单编程第六课对话框编程1第七课对话框编程2第八课MFC中各类指针的获取第九课应用程序外观修改第十课图形绘制与通用对话框第十一课图形保存和重绘第十二课文件操作第十三课文档和串行化第十四课网络编程第十五课多线程和简单聊天室制作第十六课线程同步与异步套接字编程第十七课进程间通信第十八课ActiveX 控件第十九课动态链接库第二十课Hook钩子函数第0章简介Lesson1:Windows程序运行原理及程序编写流程,窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧,stdcall 与cdecl调用规范的比较,初学者常犯错误及注意事项。
Lesson2:C++经典语法与应用,类的编写与应用,构造与析构函数,函数的重载,类的继承,函数覆盖,基类与派生类的构造函数、析构函数先后调用顺序,如何在派生类构造函数中向基类的构造函数传递参数,this成员变量,类型转换的内幕,虚拟函数与多态性,引用和指针变量的区别与共同处。
VC工程的编译原理与过程,将工程中不同的类拆分到不同的文件中,每一个类由一个.h和.cpp文件共同完成,头文件重复定义问题的解决,培养了学员良好的编程习惯,也为以后分析MFC AppWizard生成的工程奠定了良好基础。
Lesson3:讲述MFC AppWizard的原理与MFC程序框架的剖析。
AppWizard是一个源代码生成工具,是计算机辅助程序设计工具,WinMain在MFC程序中是如何从源程序中被隐藏的,theApp全局变量是如何被分配的,MFC框架中的几个类的作用与相互关系,MFC框架窗口是如何产生和销毁的,对窗口类的PreCreateWidow和OnCreate两个函数的着重分析,Windows窗口与C++中的CWnd类的关系。
C语言学习笔记(1)
VC++6.0学习笔记进入方法:1、建立一个工程文件——新建——(选择)工程——(选择)Win32 Console Application——位置(选择存贮的位置)——工程名称(要用字母、英文、或拼音都可以)——一路确定到完成2、建立一个文件文件——新建——(选择)文件——(选择)C++Source File——文件名(要用字母、英文、或拼音都可以)——确定一、一个简单的程序:#include <stdio.h>main(){printf("Hello everyone!!\n"); (\n表示换行)}注意:每写完一个程序必需先编译(快捷键是:ctrl+F7)然后再输出(快捷键是ctrl+F5)程序:连续执行的一条条指令的集合称为“程序”对于计算机来说,它不能识别由高级语言编写的程序,它只能接受和处理由0和1的代码构成的二进制指令或数据,由于这种形式的指令是面向机器的,因此也被称为“机器语言”所以所有的高级语言编写的程序都要经过编译,编译成二进制代码,这种具有翻译功能的软件称为编译程序。
1.1.2程序设计1、确定数据结构:就是数也数这间的关系列。
2、确定算法:3、编码:4、在计算机上调试程序:5、整理并写出文档资料:1.2算法定义:是指为了解决某个特定的问题而采取的确定且有限的步骤。
1、有穷性2、确定性3、可行性4、有零个或多个输入5、有一个或多个输出1.3结构化程序设计模快化结构结构化程序由三种基本的结构组成1、顺序结构2、选择结构3、循环结构(分为单性循环、直道循环)练习题:1、计算机能直接执行的程序是()A)源程序B)目标程序C)汇编程序D)可执行程序源程序:由高级语言编写的代码叫做源程序。
2、以下叙实中正确的是A)程序设计的任务就是编写程序代码并上机调试B)程序设计的任务就是确定所用的数据结构C)程序设计的任务就是确定所用算法D)以上三种说法都不完整一个简单的程序#include <stdio.h>main(){double a,b,area;a=1.2,b=3.6; /*将矩形的两条边长分别赋给a和b变量*/area=a*b;printf("a=%f,b=%f,auea=%f\n",a,b,area);/*输出矩形的两条边长和面积*/}主意:C语言中一定要区分大小写字母。
VC实用学习记录(自己整理的)
目录1 C++程序设计基础 (2)1.1 总体认识与基本原理: (2)1.2 数据类型 (2)1.3 指针 (2)2 函数及常用函数 (3)2.1 函数基本知识 (3)2.2 内联函数 (3)2.3 函数重载 (3)2.4 变量存储特性 (4)2.5 关于include编译预处理命令的说明 (4)3 类,对象 (4)4 文件操作 (5)5 VC软件操作及相关应用 (5)5.1 编译运行及文件类型 (5)5.2 控制台应用程序 (5)6 windows编程和MFC基础 (5)7 MFC 函数 (7)1 消息处理函数: (7)2 CObject::AssertV alid 成员函数 (7)其它 (7)动态链接库 (7)进程与线程 (8)常用实例代码 (9)1 显示程序背景图片 (9)2 如何不改变文档窗口大小: (12)3 调用对话框 (13)4 显示文字 (13)经验总结 (13)1 C++程序设计基础1.1 总体认识与基本原理:C++是一种强类型的语言,必须严格遵守“先定义后使用”的原则计算机只能识别0和1,所有的字母,符号和数字在计算机看来只有0和1的区别,即断电和通电。
1.2 数据类型分两类:基本数据类型和导出数据类型基本数据类型也称为C++预定义的类型或内置数据类型,包括char,int,float,double,bool 导出数据类型是由基本数据类型构造出来的数据类型,包括数组、指针、引用、结构体、枚举和类等。
bool型:用来声明布尔逻辑变量的;也就是说,变量要么是真,要么是假。
举个例子:bool done = false;while( !done ) {...}bool 布尔类型,值为ture或false常用关键字1 关键字typedef:允许你从一个现有的类型中创建一个新类型.语法:typedef existing-type new-type例: typedef unsigned short int ut;ut m;上述代码表示将unsigned short int简化为ut,然后用ut可以定义变量1.3 指针指针就是用来保存内存地址的变量—>:成员指针运算符,此用来用指针来访问对象的成员的运算符设有一个Human类,代码解释Human *per=new Human; //定义名为per的Human类型的指针,用new关键字在内存中开辟一块区域,存储Human类的一个匿名对象,然后用per指向这块地址cout<<per->getdata(6)<<endl; //per->可以访问对象中的成员2 函数及常用函数2.1 函数基本知识函数是被用来调用的,调用前须先定义,定义前须先声明。
VC学习笔记
VC学习笔记1:按钮的使能与禁止用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;则m_Button1.EnableWindow(true); 使按钮处于允许状态m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示VC学习笔记2:控件的隐藏与显示用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。
例1:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_HIDE ); //隐藏控件例2:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_SHOW ); //显示控件以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。
VC学习笔记3:改变控件的大小和位置用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度、高度;第二种用法给出存放位置的CRect对象;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);第一个参数我不会用,一般设为NULL;x、y控件位置;cx、cy控件宽度和高度;nFlags常用取值:SWP_NOZORDER:忽略第一个参数;SWP_NOMOVE:忽略x、y,维持位置不变;SWP_NOSIZE:忽略cx、cy,维持大小不变;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID 号pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按钮移到窗口的(50,80)处pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER |SWP_NOMOVE ); //把编辑控件的大小设为(100,80),位置不变pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ); //编辑控件的大小和位置都改变以上方法也适用于各种窗口。
VC学习笔记
Vc学习笔记1.名词解析1.1. ATLATL,Active Template Library活动模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。
这种COM 组件可以包含属性页、对话框等等控件。
1.2. DDL数据库模式定义语言DDL(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言。
一个数据库模式包含该数据库中所有实体的描述定义。
这些定义包括结构定义、操作方法定义等。
DDL描述的模式,必须由计算机软件进行编译,转换为便于计算机存储、查询和操纵的格式,完成这个转换工作的程序称为模式编译器。
模式编译器处理模式定义主要产生两种类型的数据:数据字典以及数据类型和结构定义。
数据字典和数据库内部结构信息是创建该模式所对应的数据库的依据,根据这些信息创建每个数据库对应的逻辑结构;对数据库数据的访问、查询也根据模式信息决定数据存取的方式和类型,以及数据之间的关系和对数据的完整性约束。
数据字典是模式的内部信息表示,数据字典的存储方式对不同的DBMS 各不相同。
数据类型和结构的定义,是指当应用程序与数据库连接操作时,应用程序需要了解产生和提取的数据类型和结构。
是为各种宿主语言提供的用户工作区的数据类型和结构定义,使用户工作区和数据库的逻辑结构相一致,减少数据的转换过程,这种数据类型和结构的定义通常用一个头文件来实现。
数据库模式的定义通常有两种方式: 交互方式定义模式和通过数据描述语言DDL 描述文本定义模式。
2.简介2.1. ATL2.1.1.概述自从1993年Microsoft首次公布了COM技术以后,Windows平台上的开发模式发生了巨大的变化,以COM为基础的一系列软件组件化技术将Windows编程带入了组件化时代。
广大的开发人员在为COM带来的软件组件化趋势欢欣鼓舞的同时,对于COM开发技术的难度和烦琐的细节也感到极其的不便。
VC 入门经典学习笔记剖析
VC++入门经典学习笔记一函数这里是源码:A.函数是具有用途的自包含的代码块。
函数名既是函数的标识,用来在程序中调用函数。
如果函数名不在名称空间中定义,它就是全局的,否则就要用名称空间的名称来限定他。
B.函数的主要优点之一是根据需要可以在程序的不同位置执行任意次。
如果不能将代码块封装到函数中,则程序将最终成为庞然大物,因为那样通常需要再程序的不同位置复制相同的代码。
使用函数还可以将程序分为易于管理的代码块,以方便开发和测试,复杂的大型程序如果包含几个小代码块,就比编写为一个大代码块更容易理解和测试。
C.函数头int num(double a,int b);本行由三部分组成:a.返回值的类型(本例中int)b.函数名(本例中num)c.圆括号中的函数形参(本例中是a和b,分别为double和int类型)注意:函数头末尾和函数体右大括号后面都不需要分号。
如果函数没有返回值,则由void来指定返回类型。
(void myNum(int a));简单介绍完函数,下面其实是好几个例子组成的:下面这是main主函数和一些要调用函数的声明:#include "stdafx.h"using std::cin;using std::cout;using std::endl;//1.值传递(pass by value )int _value(int a,int b);//2.地址传递(pass by pointer)int _pointer(int* a);//3.引用传递(pass by reference)int _reference(int &a,int &b);//4.函数返回指针int* _rpointer(int a,int b);//5.函数中的静态变量int _countNum(int a,int b);//6.递归函数调用int _chengNum(int n);int _tmain(int argc, _TCHAR* argv[]){int a{ 5 };int b{ 5 };int _vNum{};int* _pNum{&a};int _rNum{};int* _pRNum{};int _cNum{};//1.值传递printf("调用传值前:a=%d,b=%d,vNum=%d\n", a, b, _vNum);_vNum = _value(a, b);printf("传值后:a=%d,b=%d,vNum=%d\n", a, b, _vNum);//2.地址传递printf("调用传地址前:a=%d,*_pNum=%d\n", a, *_pNum);*_pNum = _pointer(&a);printf("传地址后:a=%d,*_pNum=%d\n", a, *_pNum);//3.引用传递printf("调用传引用前:a=%d,b=%d,_rNum=%d\n", a, b, _rNum);_rNum = _reference(a, b);printf("传引用后:a=%d,b=%d,_rNum=%d\n", a, b, _rNum);//4.函数返回指针_pRNum = _rpointer(a,b);cout << "_pRnum = " << *_pRNum << endl;delete _pRNum; //释放掉内存_pRNum = nullptr;//5.函数中的静态变量_vNum = _countNum(a, b);_vNum = _countNum(a, b);_vNum = _countNum(a, b);_vNum = _countNum(a, b);//6.递归int c{ 5 };_cNum = _chengNum(c);cout << c << "的阶乘是:" << _cNum << endl;system("pause");return 0;}实现被调用的函数1.给函数传递实参:int _value(int a, int b){a += 5; //改变形参a的值b += 5; //改变形参b的值return a + b;}2.地址传递当使用指针作为实参时,按值传递机制仍然像以前一样工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
『VC++技术内幕』学习笔记写在前面:我看的『VC++技术内幕』版本为--潘爱民和王国印译清华大学出版的第四版,因从网上看到此版译的最好。
这篇学习笔记是后补的,因为这本书我已经看到了第三十二章,之前并没有做笔记,只是随意的在书上画了画重点,可是越向后学越觉得前面的知识并没有掌握,所以决定重新来过并补上笔记。
我认为只有踏踏实实的记录下每天的学习心得才能真正的有所收获。
我个人认为学习这本经典之前最好先看看WINDOWS 32位编程的书,至少能用纯SDK写出一些小程序。
第一天:WINDOWS应用程序一定要有WinMain函数,该函数用来完成一些特殊的任务,象创建程序的主窗口,主窗口用来处理消息的代码。
MFC将WinMain隐藏在框架中,不象写SDK 程序时可以很容易的找到它。
WINDOWS采用的消息处理机制也交给了程序框架,我们不必担心如何使这些消息和代码联系起来。
并且WINDOWS定义好了一些消息,当窗口被创建时系统就会发送WM_CREA TE 消息,当点击鼠标左键时便系统会发送WM_LBUTTONDOWN消息,当用户按下键盘时系统会发送WM_CHAR消息,当用户关闭窗口时系统会发送WM_CLOSE消息,当用户进行菜单项选择或单击按钮时系统回发送WM_COMMAND消息,什么都不做系统还会发送WM_TIMER消息。
先不说别的,先搞清出这几个消息再说。
从MSDN中可以很方便的找到关于这几个消息的帮助文档。
WINDOWS提供通用的图形设备接口(GUI),我们通过调用(GDI)函数和硬件打交道,不必理会设备环境,WINDOWS会自动将设备环境结构映射到相应的物理设备,这应该就是设备无关性吧。
动态连接库(DLL)应该是代码重用的典型例子(不知道可不可这样说),把一些模块、自己新编的类单独调试并编译成DLL,及增加代码的可读性也提高了程序模块的灵活性。
用Developer Studio建立项目Developer Studio会创建很多中间文件,这些文件还是有必要说一下的。
APS //支持ResourceViewBSC //浏览器信息文件CLW //支持ClassWizardDSP //项目文件,不能删除和用文本编辑器编辑DSW //工作空间文件,不能删除和用文本编辑器编辑MAK //外部的创建文件NCB //支持ClassViewOPT //保存工作空间的配置PLG //建立日志文件这些文件都有一定的作用,拿CLW来说,如果你有一个新类,需要加到ClassWizard中,除了将相应的.h 和.cpp加到DSP中还需要重新编译CLW。
PLG文件记录着你的项目配置信息。
VC++的源程序浏览器能够使我们从类或函数的角度来了解或编辑程序,而不是直接从文件入手。
在看别人的源代码时如果能熟练的使用源代码浏览器将会事倍功半。
源程序浏览器主要的查看状态有以下几种:Definitions and References——选择任何函数、变量、类型、宏定义可以看到它在项目中的定义,并且在何处和什么地方用到它。
Call Graph/Caller Graph——对于所选择的函数,给出它的调用与被调用函数的图示。
Derived Class Graph/Base Class Graph——给出类层次关系的图形表示,可以看到所选择的类的派生类和基类以及成员。
File Outline——对于所选的文件,列出文件中的类、函数和数据成员,同时还显示它们定义的位置和使用位置。
可见Source Brower比起Class View来功能多了很多也更加好用,以前我就不知道,因为一般的VC++书没有讲或根本没有注意这块,看到讲菜单、操作界面、编辑器时总是跳过,心想“没吃过猪肉还没见过猪跑?这种东西不用学就会”。
可实际上还是应该仔细的看看的。
对于本章学习雷神建议大家在VC++6中用AppWizard生成一个空的程序,然后试着看看都有那些文件,和他们的类层次、函数、宏、结构的定义,我就是这样干的,学编程不动手是不行的。
第二天:Microsoft基本类库应用程序框架◎MFC是C++的Microsoft Windows API,如果想要开发WINDOWS的应用程序当然VC/MFC是开发环境的首选。
◎MFC产生的应用程序使用了标准化的结构。
(我现在还体会不出这点的优势所在,请高手指点)◎MFC产生的应用程序短而运行速度快。
这应该说的是可以很容易的建立动态连接,其实程序还是需要大量的DLL,不过由于WINDOWS上有很多可以用DLL所以应用程序很短,我是这样想的不知对否。
◎VC++工具降低了编码的复杂性。
这点不容质疑比起TC方便太多了。
◎MFC库功能非常丰富。
书上列出了MFC从1.0--4.21的一些特性,我就不废话了,大家应该看看。
这一章节主要介绍了MFC库的优点,其实我本人认为在某些特定环境下其实MFC不一定就象说的那样好。
我想不会有人用纯VC做MIS系统吧,太累了。
我是这样理解编程序的,如果把学编程看成学武的话,C/C++语言及编程思想(OOP)是内功,API是基本功(编程思想是内功、API是基本功这适用于任何WIN32编程,不论Visual C++、Delphi、C++Builder、VB......),VC/MFC应该不同武功其中的一种,不同的学习方法效果不一样,只要下工夫也都可以达到一定的境界。
真正的高手是有着深厚的内功,扎实的基本功,至于武功招数无所谓了,随便一站不丁不八全无破绽,无招胜有招了。
对不住扯远了。
C++可以通过类库来进行扩展,我们除了可以使用随编译器提供的类库外还可以很方便使用软件公司销售的类库产品,甚至可以自己开发。
而应用程序框架是一种类库的超集,它定义了程序的结构。
下面给出两个示例程序(一个是书上的一个是我写的):雷神建议:虽然现在很多书都附CD,CD上有书中所有示例的源代码,但还是应该亲自在VC6用手敲进去。
这样可以加深印象以及感受一下编译除错后程序正确运行时的乐趣,因为是纯手工打造。
自从我敲了近一百个代码示例后,由于笔误的BUG就很少了,打字速度也提高了。
而且最好在原示例代码的基础上做些改动例如别千篇一律的显示HELLO WORLD!换点别的,这样做也可以加深对示例程序的理解。
我的HELLO WORLD用AppWizard向导创建一个显示一个字符串的单文档程序,只需要敲入一行语句,主要是体验MFC的强大功能。
1、打开VC++6从菜单选择NEW,给项目命名为”MyApp01“。
2、选择MFC AppWizard[exe] 选项,除STEP 1选择单文档外其他STEP缺省。
3、在Class View选择CMyApp01View类的OnDraw()成员函数双击会在C++编译器看到以下内容void CMyApp01View::OnDraw(CDC* pDC){CMyApp01Doc* pDoc = GetDocument();ASSERT_V ALID(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_V ALID(pDoc);pDC->TextOut(10,10,"雷神愿意和所有学VC的朋友共同进步!"); //<-----------增加的一行// TODO: add draw code for native data here}完了,就这么简单。
编译运行。
看到了吗?这个程序具备WINDOWS程序的所有特性,例如有菜单、工具条、状态栏、最大化、关闭、甚至还有关于对话框、打印预览.....全了,这就是AppWizard通过MFC动态创建的一个应用程序。
从这个小例子可以看出用VC/MFC 设计WINDOWS程序多么方便。
下面我们看看书上的例子,以便更进一步了解应用程序框架。
书上的例子:1、先建立一个Win32 Application的应用程序。
2、选择Project->Add to project->Files,分别创建一个名为MyApp.h和一个名为MyApp.cpp 的文件。
3、添加代码:(最好照敲以下代码到编译器,别用Ctrl+C/Ctrl+V)//***********************************************// MyApp.h//class CMyApp:public CWinApp //见下②{public:virtual BOOL InitInstance();};class CMyFrame:public CFrameWnd{public:CMyFrame();protected:afx_msg void OnLButtonDown(UINT nFlags,CPoint point);afx_msg void OnPaint();DECLARE_MESSAGE_MAP()};//*****************************************************// MyApp.cpp//#include "afxwin.h"#include "myapp.h"CMyApp theApp;//建立一个CMyAPP对象见下②BOOL CMyApp::InitInstance (){m_pMainWnd=new CMyFrame();m_pMainWnd->ShowWindow (m_nCmdShow);m_pMainWnd->UpdateWindow ();return TRUE;}BEGIN_MESSAGE_MAP(CMyFrame,CFrameWnd)ON_WM_LBUTTONDOWN()ON_WM_PAINT()END_MESSAGE_MAP()CMyFrame::CMyFrame(){Create(NULL,"MYAPP Application");}void CMyFrame::OnLButtonDown (UINT nFlags,CPoint point){TRACE("Entering CMyFrame::OnLButtonDown - %lx,%d,%d\n",(long)nFlags,point.x ,point.y);}void CMyFrame::OnPaint (){CPaintDC dc(this);dc.TextOut (0,0,"Hello World!");}4、编译运行,报错。