VC++深入详解学习笔记(非常全面)
Visual C# 从入门到精通学习笔记
Author:I94Self E_mail:I94Self@ OICQ:200762716Please reserve author's info!第一部分C#编程基础第1章C#入门一、开发、运行环境1、快速应用开发工具(Rapid Application Development,RAD);可以从/downloads下载。
2、Visual 是一个集成开发环境;3、软件开发工具(Software Development Kit,SDK)。
二、.NET平台简介一、).NET框架的组成(两种看法)1、服务器(比如BizTalk和SQL Server)+各种服务(比如.NET My Services)以及它最初的可视组件+.NET Passport;2、Visual ()+.NET公共语言运行时(Common Language Runtime,CLR)+.NET基础类库(Base Class Library,BCL)。
其他组件可能用于专门应用,他们并不属于所有.NET应用的必需组成部分。
.NET平台的核心是公共语言运行时的环境、基础类库和公共语言规范。
二、).NET框架的特点1、.NET可以多语言开发(可以用C++创建一个类,使之派生于用Visual Basic实现的类),这是因为.NET平台是使用Microsoft中间语言(Microsoft Intermediate Language,MSIL简称IL)把不同语言集成来工作的。
2、独立于平台和处理器,.NET应用一经编写和创建,就可以在任何支持.NET公共语言运行时(CLR)环境的平台上执行,所以应用软件开发者根本无须考虑硬件和支持.NET平台的操作系统的任何细节。
2001年6月27日,Microsoft宣布已经和Corel公司达成协议共同开发资源共享的C#编译器,同时还为Uinx的FreeBSD版本开发.NET框架底层结构;2001年7月10日,Microsoft提供了由Ximain时间的.NET开放资源版本。
VC视频教程笔记
第3课 1.在 main 或 WinMain 之前,全局变量已经被分配内存并初始化了。 2.在 MFC 中在 WinMain 之前有个 theApp 全局变量先被构造并被初始化,而由于 子类构造函数执行前,其父类的构造函数先被执行,所以 CTestApp 的父类 CWinAPP 的构造函数先执行。产生了 theApp 对象后,在 WinMain()中的指针 *pThread 和*pApp 就有了内容。 3.MFC 大致流程: CTestApp theApp;//构造全局对象 WinMain() { AfxWinMain();//调用下面的函数 } AfxWinMain() { pThread->Initinstance();//初始化工作和注册窗口类,窗口显示和更新 pThread->Run();//消息循环 } 而在 BOOL CTestApp::InitInstance()中的代码 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CTestDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CTestView)); AddDocTemplate(pDocTemplate); 完成了将这三个类关联起来的工作。 4.如何在单文档文件中显示一个 CButton 的对象? 在 CMainFrame::OnCreate()中定义一个 CButton 的对象 btn;然后调用 btn.Create("维新",WS_DISABLED |WS_CHILD | WS_VISIBLE | BS_AUTO3STATE, CRect(0,0,300,100),/*GetParent(),*/this,123); 注意点: (1).此处 btn 不能是局部变量,否则它的生命周期太短,将不能显示。 (2).在 create 函数的第二个参数中加入 WS_VISIBLE 参数才行。否则必须 调用 ShowWindow 也可以在 view 的 OnCreate 消息响应函数中加入 (3).CButton 类的定义头文件在 afxwin.h 中, stdafx.h 包含了 afxwin.h, 而 所以可以直接使用。因为 MFC 中的每一个类中都有#include "stdafx.h"的声明。
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(),该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。
c学习笔记c重点完整版
c学习笔记c重点HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】C#学习笔记1.C#具有所有面向对象的语言的所有特性:封装,继承,多态。
在C#系统中,所有的类型都可以看作一个对象。
C#只允许单继承,即一个类不会有多个基类,C#不会有全局函数,不会有全局变量,不会有全局常数,所有的一切只能封装在一个类中。
包括四个部分:vos类型系统;元数据;公用语言规范;虚拟执行系统。
ing system表示导入名称空间。
4.让我们从第一个程序开始就记得:每个东西都必须属于一个类,类里面的方法总是为我们完成某件工作的。
在C#中,程序的执行总是从main()方法开始的,一个程序中不允许出现两个或两个以上的main()方法。
对于习惯学C控制台程序的读者,必须要牢记:main()方法必须包含在一个类中。
5.利用string可以方便地对字符串进行连接或剪切。
例:strings=”good”+”morning”;char x=s[3]字符串可以通过下标进行索引,得到一个字符。
6.我们可以用//进行单行标注,/* */进行多行标注。
7.在C和C++中,任何非0值都表示真,在C#中,任何非0值都不能代替true.在其它类型的整型值和布尔值之间不存在任何的转换,将整型转换成布尔型是不合法的。
8.把一系列相关的变量组织成单一实体的过程称为生成结构的过程。
这个单一实体的类型叫结构类型,每一个变量就是结构的成员。
9.结构类型包含的成员类型可以相同,也可以不同。
我们甚至可以把一个结构类型当作另一个结构成员的类型。
10.枚举实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。
结构类型变量的值由各个成员的值组合而成。
而枚举则不同,枚举类型的变量在某一时刻只能取枚举中某个元素的值。
按照系统的设定,每个元素的类型都为整型。
且第一个元素的值为0,后面的每个元素梯加1,也可以直接赋值。
[学习笔记]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类的关系。
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 函数基本知识函数是被用来调用的,调用前须先定义,定义前须先声明。
VC6.0学习笔记
xu(1)生成的空文件红色字体的为注释笔记#include<windows.h>#include<stdio.h>int WINAPI WinMain(HINSTANCE hInstance, //是windows为该应用程序实例生成的一个句柄,其实句柄就是一个(通常是32位的)整数,它代表一个对象//这里的hInstance就是一个和应用程序对象相关联的句柄,通过它可以访问和应用程序相关的资源信息等HINSTANCE hPrevInstance, //已经不再使用,保留只是为了保持兼容性LPSTR lpCmdLine, //如果应用程序以命令行的形式被启动,那么这个参数存放的是系统创建来的命令行int nCmdShow //系统传入的带有如何打开应用程序窗口的信息,如果要使用系统传入的窗口显示方式,那应该吧这个参数传递给//ShowWindows函数){MessageBox(NULL,TEXT("hello word"),TEXT("世界你好"),MB_OKCANCEL);//NULL的意思是以桌面作为副窗口,return 0;}生成hello work 文件(2) #include "stdafx.h"#include "resource.h"#define MAX_LOADSTRING 100// Global Variables:HINSTANCE hInst; // current instanceTCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text// Foward declarations of functions included in this code module:ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){// TODO: Place code here.MSG msg;HACCEL hAccelTable;LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_QWE, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_QWE);while (GetMessage(&msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return msg.wParam;}ATOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);//他决定WNDCLASSEX的大小,一般sizeof (WNDCLASSEX)就行(w n d c l a s s e x)wcex.style = CS_HREDRAW | CS_VREDRAW;//决定希望创建的窗口类风格,常用属性参考MSDNwcex.lpfnWndProc = (WNDPROC)WndProc;//指向窗口过程的一个函数指针,窗口过程函数就是信息处理的地方,是一个回调函数,由系统调用wcex.cbClsExtra = 0;//类结构体的附加字节大小,一般为0;wcex.cbWndExtra = 0;//窗口对象的附加字节大小,一般为0;wcex.hInstance = hInstance;//窗口所属应用程序的实例句柄,这里简单赋值为WinMain函数传入的应用程序实例句柄wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_QWE);///窗口的图标句柄,该句柄通过调用LoadIcon函数得到wcex.hCursor = LoadCursor(NULL, IDC_ARROW);//窗口光标句柄,这个参数决定了鼠标光标移动到窗口是的样式,具体参考MSDNwcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//窗口背景画刷的颜色,当窗口移动是或者改变大小时需要刷新时候,系统就用这个参数定义画刷对窗口背景进行刷新wcex.lpszMenuName = (LPCSTR)IDC_QWE;//菜单资源的名称,他是一个以空字符作为结束符的字符串指针wcex.lpszClassName = szWindowClass;//窗口类名,他是一个以空字符作为结束符的字符串指针,给这个窗口类起一个名字,以后在CreateWindows的时候指定这个名字时系统就可以根据类名进行窗口的创建wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);//应用程序窗口的小图标句柄当应用程序。
MFC笔记——VC++深入详解(第3版)孙鑫
MFC笔记——VC++深⼊详解(第3版)孙鑫1、Windows下的程序都是基于消息的,窗⼝在创建时都会产⽣⼀个WM_CREATE消息。
其他类可以响应这个消息,添加WM_CREATE消息的处理函数。
类视图——某个类处⿏标右键,属性——消息(找到WM_CREATE)。
或者使⽤“类向导”。
2、⽂档/视类结构,视类窗⼝始终覆盖在框架类窗⼝之上,⿏标所有操作都只能由视类窗⼝捕获。
如,CMainFrame中⿏标单击事件⽆反应,⽽在CDrawView中就有反应。
3、消息映射机制消息映射表,由头⽂件的DECLARE_MESSAGE_MAP()、源⽂件的BEGIN_MESSAGE_MAP与END_MESSAGE_MAP构建⽽成。
BEGIN_MESSAGE_MAP与END_MESSAGE_MAP之间,有消息映射宏,⼀旦有消息产⽣,程序就调⽤对应的消息响应函数来处理。
消息响应函数4、画线,推荐⽅式三/* ⽅式⼀:SDK// ⾸先获得窗⼝的设备描述表HDC hdc;hdc = ::GetDC(m_hWnd); //当前窗⼝的设备描述表//移动到线条的起点MoveToEx(hdc, m_ptOrigin.x, m_ptOrigin.y, NULL);//画线LineTo(hdc, point.x, point.y);//释放设备描述表::ReleaseDC(m_hWnd, hdc);*//* ⽅式⼆:MFC的CDC类,封装了所有与绘图相关的操作CDC* pDC = GetDC();pDC->MoveTo(m_ptOrigin);pDC->LineTo(point);ReleaseDC(pDC);*/⽅式三:MFC的CClientDC类,CDC的进⼀步封装,省去GetDC与ReleaseDCCClientDC dc(this); //客户区范围//CClientDC dc(GetParent()); //客户区+⼯具栏区dc.MoveTo(m_ptOrigin);dc.LineTo(point);/* ⽅式四:MFC的CWindowDC类,也是派⽣⾃CDC,可画的范围更⼤CWindowDC dc(this); //客户区范围//CWindowDC dc(GetParent()); //客户区+⼯具栏区//CWindowDC dc(GetDesktopWindow()); //所有窗⼝dc.MoveTo(m_ptOrigin);dc.LineTo(point);*/5、画笔CPen pen(PS_SOLID, 1, RGB(255, 0, 0)); //PS_DASH、PS_DOT宽度≤1,虚线才有效CClientDC dc(this);CPen* pOldPen = dc.SelectObject(&pen); //选择画笔dc.MoveTo(m_ptOrigin);dc.LineTo(point);//推荐写上以下两⾏,不然可能造成GDI对象的增加,程序崩溃dc.SelectObject(pOldPen); //重置画笔pen.DeleteObject(); //释放画笔6、画刷,⼀般⽤于填充CBrush brush(RGB(255, 0, 0));//创建⼀个红⾊画刷CClientDC dc(this); //创建并获得设备描述表dc.FillRect(CRect(m_ptOrigin, point), &brush);//利⽤红⾊画刷填充⿏标拖曳过程中形成的矩形区域brush.DeleteObject();画刷画矩形,dc中有默认⽩⾊画刷。
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++深入详解
程序的入口点函数,与 DOS 程序的入口点函数 main 的作用相同,当 WinMain 函数结束或 返回时,Windows 应用程序结束。
下面,让我们来看一个完整的 Win32 程序,该程序实现的功能是创建一个窗口,并在 该窗口中响应键盘及鼠标消息,程序实现的步骤为:
WinMain 函数的定义; 创建一个窗口; 进行消息循环; 编写窗口过程函数。
我们在程序开发过程中,没有必要去死记硬背函数的调用语法和参数信息,只要能快 速地从 MSDN 中找到所需的信息就可以了,等使用的次数多了,这些函数自然也就记住 了。
我们经常听人说 Win32 SDK 开发,那么什么是 SDK 呢。SDK 的全称是 Software Development Kit,中文译为软件开发包。假如现在我们要开发呼叫中心,在购买语音卡的 同时,厂商就会提供语音卡的 SDK 开发包,以方便我们对语音卡的编程操作。这个开发 包通常都会包含语音卡的 API 函数库、帮助文档、使用手册、辅助工具等资源。也就是说, SDK 实际上就是开发所需资源的一个集合。现在读者应该明白 Win32 SDK 的含义了吧, 即 Windows 32 位平台下的软件开发包,包括了 API 函数、帮助文档、微软提供的一些辅 助开发工具。
} MSG;
该结构体中各成员变量的含义如下: 第一个成员变量 hwnd 表示消息所属的窗口。我们通常开发的程序都是窗口应用程序, 一个消息一般都是与某个窗口相关联的。例如,在某个活动窗口中按下鼠标左键 ,产生的 按键消息就是发给该窗口的。在 Windows 程序中,用 HWND 类型的变量来标识窗口。
1.4.1 WinMain 函数的定义
WinMain 函数的原型声明如下:
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow
VC 深入详解讲解
第三章MFC框架剖析3.2 基于MFC的程序框架剖析MFC AppWizard帮助我们生成的代码,单击左边工作区窗格中的Class View(类视图)标签页,可以看到如图的5个类:3.2.1 MFC程序中的WinMain函数Win32程序的一个主线:1、进入WinMain函数;2、设计窗口类;3、注册窗口类;4、产生窗口;5、注册窗口;6、显示窗口;7、更新窗口;8、消息循环,将消息路由到窗口过程函数中去处理。
1.theApp全局对象在程序入口main函数加载时,系统已经为全局变量或者全局对象分配了存储空间,并为他们赋初值。
如何查看变量的值?1、将鼠标移动到该变量上停留片刻,VC++会弹出一个小窗口显示变量的值;2、点击View,在下拉菜单中选择variables即可。
为什么要定义一个全局对象theApp,让它在WinMain之前执行?其作用是什么?应用程序的实例是由实例句柄(WinMain函数的参数hInstance)来标识的。
对于MFC 程序,通过产生一个应用程序类的对象来唯一标识应用程序的实例。
每一个MFC仅有一个从应用程序(CWinApp)派生的类。
每一个MFC仅有一个该派生类的实例化对象,也就是theApp全局对象。
在一个子类在构造函数前会先调用其父类的构造函数。
TheApp对象的构造函数CTestApp在调用之前,会调用其父类CWinApp的构造函数。
2.AfxWinMain函数当程序调用了CWinApp类的构造函数,并执行了CTestApp的构造函数,且产生了TheApp对象之后,接下来就是进入了WinMain函数。
实际上,WinMain函数是通过.AfxWinMain函数来完成他的功能的。
int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ASSERT(hPrevInstance == NULL);int nReturnCode = -1;①CWinThread* pThread = AfxGetThread();CWinApp* pApp = AfxGetApp();//注:实质上上述2个指针是一致的,AfxaGetApp是一个全局函数,定义于AFXWIN1.INL中。
VC++深入详解(孙鑫)学习笔记
wnd.lpfnWndProc = WinProc;//消息响应函数
wnd.lpszClassName = "gaojun";//窗口类的名子,在注册时会使用到
wnd.lpszMenuName = NULL;//默认为NULL没有标题栏
LPARAM lParam // second message parameter
);
//(1) WinMain函数,程序入口点函数
int WINAPI WinMain(
4. 创建一个完整的Win32程序,该程序实现创建一个窗口,其中主要步骤为
A. WinMain函数的定义
B. 创建一个窗口 创建一个完整的窗口的四个步骤SDK,1设计窗口类,2注册窗口类,3创建窗口,4显示窗口
C. 进行消息循环
wnd.style = CS_HREDRAW | CS_VREDRAW;//定义为水平和垂直重画
//二.注册窗口类
RegisterClass(&wnd);
//三.根据定制的窗口类创建窗口
HWND hwnd;//保存创建窗口后的生成窗口句柄用于显示
if (-1 == bSet)
{
return -1;
}
else{
TranslateMessage(&msg);
//如果是多文档程序,则最后一个参数lParam必须指向一个CLIENTCREATESTRUCT结构体
hwnd = CreateWindow("gaojun", "WIN32应用程序", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);
VC复习笔记整合版
VC++复习笔记第一章:MFC应用程序创建步骤:1.选择应用项目模板:选择File->New->Projects->MFC AppWizard(.exe)2.选择应用程序类型和语言3.设置数据库选项4.设置OLE选项的复合文档类型5.设置应用程序的外观6.设置项目的风格7.查看类的信息MFC ClassWizard对话框中包含的5个选项卡:1.Message Maps(消息映射):添加或删除消息的成员函数|2.Member variables(成员变量):添加或删除关联到使用控件的类上的成员变量|----最常用3.Automation(自动化设置)4.ActiveX Events(ActiveX事件处理)5.Class Info(类信息)在MFC中,以Afx为前缀的函数都是全局函数,可以在程序的任何地方调用菜单栏为用户提供了文档操作、程序的编译、调试、窗口等操作常用菜单:1.File菜单2.Insert菜单3.View菜单4.Project菜单5.Build菜单项目工作区的3个选项卡:1.ClassView:显示项目中所有类的信息2.ResourceView:图片、字符串、工具栏、菜单、对话框、图标等非代码元素3.FileView:包含项目中的所有文件(.c,.cpp,资源文件,Help文件...)资源的含义:资源是由标识符定义的,包含应用程序的源代码文件、菜单、工具栏、对话框、图标等。
资源的分类:1.快捷键2.工具栏3.光标4.对话框5.HTML6.图标7.菜单8.字符串列表9.版本信息标识符:(一)规则:1.允许使用a~z,A~Z,0~9,下划线2.不区分大小写3.不能以数字开头4.字符个数不能超过27个(二)标识符保存在Resource.h文件中,取值由#define预处理器决定,标识符之间不能相互赋值文件类型:|---.dsw:项目工作区文件|---.dsp:工程文件或项目文件|---.h:头文件|---.cpp:实现文件|---.opt:项目工作区配置文件|---.rc:资源文件Debug版本和Release版本:1.Debug版本:是用在开发过程中进行调试时用的版本(在调试程序时必须使用)包含着Microsoft格式的调试信息,不进行任何代码优化2.Release版本:当程序完成后,准备发行时来编译的版本对可执行程序的二进制代码进行了优化,不包含任何的调试信息第三章:Windows消息:1.什么是消息:是描述事件发生的信息(如按下鼠标或键盘),而windows程序设计是针对事件或消息的处理进行。
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++视频笔记列表(全)简介第一课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类的关系。
Lesson4:MFC消息映射机制的剖析,讲述如何运用ClassWizard,,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的函数进行响应的。
掌握设备描述表及其封装类CDC的使用,CDC是如何与具体的设备发生关联的,融合具体的画图程序进行分析。
如何设置封闭图形的填充刷子(位图画刷与透明画刷的使用)。
Lesson5:掌握CDC的文字处理程序的编写,如何产生自定义字体和自定义插入符,熟悉对CString类的使用。
通过对卡拉OK程序的编写,讲解定时器的使用和DrawText函数的巧妙运用。
讲解如何使用CDC的裁减功能。
Lesson6:菜单的工作原理及编写应用,菜单命令消息在MFC框架程序的几个类中的传递顺序和处理过程。
标记菜单、缺省菜单的实现原理、图形菜单的实现及常犯错误的分析,GetSystemMetrics的应用,快捷弹出菜单的实现方式及其命令响应函数有效范围(与弹出菜单时所指定的父窗口有密切的关系,最底层的子窗口具有最优先的处理机会)。
动态菜单的编写,如何让程序在运行时产生新的菜单项及如何手工为这些新产生的菜单命令安排处理函数,如何在顶层窗口中截获对菜单命令的处理,更进一步掌握CString类的应用。
Lesson7:对话框用户界面程序的编写,如何向对话框控件关联数据成员及其实现机理,如何利用对话框类的成员函数向控件发送消息和获取对话框控件的类指针,如何直接利用对话框控件类操纵对话框控件(发送消息和直接调用成员函数)。
如何在程序运行时产生和销毁控件。
对话框控件的几种操作方式的优劣比较分析。
如何实现对话框的部分收缩和展开。
如何让对话框上的文本框在程序启动后立即获得焦点,如何利用SetWindowLong改变窗口的回调函数,通过改变文本框的默认回车处理方式进行演示。
实现多个输入文本框间通过回车逐一向下传递焦点的另一种巧妙方法(用缺省按钮来处理)。
Lesson8:逃跑按钮的巧妙实现。
如何制作属性页对话框和向导对话框,融合讲解组合框(如何调整组合框的大小)、列表框、单选按钮、复选按钮等常用对话框控件的多种使用方法。
如何限制用户在不满足设定的条件时切换到其他属性页和向导页。
Lesson9:如何修改MFC AppWizard向导生成的框架程序的外观和大小,修改图标、光标、背景的三种方法。
如何增加和删除工具栏按钮,如何给应用程序增加工具栏,如何显示和隐藏工具栏。
定制状态栏,在状态栏中添加时钟显示,CTime类及其用法。
在状态栏中添加进度条(主窗口产生后立即产生进度条的巧妙思想,不能在OnCreate函数中直接处理,要用到自定义消息的方法)。
鼠标坐标显示,在CView中获取状态栏对象的几种方式。
如何为应用程序添加启动画面。
Lesson10:图形的绘制,如何使用自定义画笔(颜色,线宽,线型)。
如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。
实现选项对话框和窗口类中的数据交换。
如何改变对话框和控件的背景色,如何改变控件的文本颜色,对按钮控件的特殊处理。
如何在窗口中显示一幅位图。
Lesson11:如何让CDC上输出的文字、图形具有保持功能,集合类CPtrArray的使用,CPaintDC与CClientDC的区别与应用,OnPaint与OnDraw在CView中的关系及实现内幕,滚动窗口的实现,坐标空间,映射方式,设备坐标与逻辑坐标的转换。
元文件设备描述表的使用,如何利用兼容DC实现图形的保存和再现。
Lesson12:const char *与char * const的区别。
C语言对文件读写的支持,FILE指针;文本文件和二进制文件的区别。
用文本方式读写文件和以二进制方式读写文件的注意事项。
C++对文件读写的支持,ofstream和ifstream的用法。
Win32 SDK对文件读写的支持,CreateFile函数、WriteFile函数、ReadFile函数的使用;MFC对文件读写的支持,CFile类和CFileDialog的使用,文件过滤器的设置。
win.ini文件和注册表的读写方式及相关知识点。
Lesson13:使用CArchive类对文件进行操作。
MFC框架程序提供的文件新建与打开功能内部的实现机制。
如何利用CDocument类的串行化存储功能保存与加载数据。
如何实现类对串行化的支持,CObArray的串行化实现内幕。
删除文档数据时常犯的错误。
MFC框架程序的文档类和视类的关系,以及如何获得相互的指针引用。
Lesson14:网络的相关知识,网络程序的编写,Socket是连接应用程序与网络驱动程序的桥梁,Socket在应用程序中创建,通过bind与驱动程序建立关系。
此后,应用程序送给Socket的数据,由Socket交给驱动程序向网络上发送出去。
计算机从网络上收到与该Socket 绑定的IP+Port相关的数据后,由驱动程序交给Socket,应用程序便可从该Socket中提取接收到的数据。
网络应用程序就是这样通过socket进行数据的发送与接收的。
TCP与UDP的工作原理与编写过程,如何在程序中链接库文件。
一个字符界面的聊天程序。
Lesson15:多线程程序的编写,多线程应用中容易出现的问题。
互斥对象的讲解,如何使用互斥对象来实现多线程的同步。
如何利用命名互斥对象保证应用程序只有一个实例运行。
应用多线程编写网络聊天室程序。
Lesson16:事件内核对象、关键代码段(临界区)的讲解,以及在多线程同步中的应用。
在Windows下编写基于消息的网络应用程序,掌握阻塞与非阻塞网络程序的编写,理解在Windows平台下,采用异步选择机制可以提高网络应用程序的性能。
Lesson17:详细讲解进程间通讯的四种方式:剪贴板、匿名管道、命名管道和邮槽。
并比较分析这几种进程间通信的优点和缺点。
Lesson18:ActiveX控件的应用与工作原理。
ActiveX控件的编写,如何为控件安排属性,方法,事件,属性页,持久性存储,控件如何通知容器自身属性的改变。
如何注册控件与取消控件注册。
在VB和VC中访问ActiveX控件。
Lesson19:动态链接库程序的编写。
静态库与动态库的区别,以及调用程序在链接静态库和动态库时的区别。
如何利用工具查看动态链接库输出的函数,Depends工具的使用,C++编译器名字改编技术对动态链接库输出函数的影响,extern "C"的用法,利用模块定义文件来解决C++名字改编的问题。
用typedef定义指向函数的指针类型,如何获得动态连接库里的函数的指针。
Lesson20:Hook编程。
如何安装钩子过程,如何编写全局钩子,动态连接库里的全局变量数据共享问题分析。
ADO数据库编程。
在VB中利用ADO控件和ADO对象访问数据库,在VC中利用ADO技术访问数据库。
第一章Windows程序内部运行机制这一章比较零散,笔记也很零散一、windows是事件驱动方式的程序设计windows程序设计是种事件驱动方式的程序设计,主要基于消息的。
当用户需要完成某种功能时,需要调用OS某种支持,然后OS将用户的需要包装成消息,并投入到消息队列中,最后应用程序从消息队列中取走消息并进行响应。
二、消息队列每个应用程序OS都为它建立一个消息队列,消息队列是个先进先出的缓冲区,其中每个元素都是一个消息,OS将生成的每个消息按先后顺序放进消息队列中,应用程序总是取走当前消息队列中的第一条消息,应用程序取走消息后便知道用户的操作和程序的状态,然后对其处理即消息响应,消息响应通过编码实现。
三、Window程序入口WinMain函数是Windows程序入口点函数,由OS调用,当OS启动应用程序的时候,winmain 函数的参数由OS传递的。
四、创建一个完整的窗口需要经过下面四个操作步骤1,设计一个窗口类。
如:WNDCLASS wndcls。
2,注册窗口类。
如:RegisterClass(&wndcls)。
3,创建窗口。
如:CreateWindow(),CreateWindowEX();4,显示及更新窗口。
如:ShowWindow(),UpdateWindow();其他值得注意的地方1,消息结构typedef struct tagMSG { // msgHWND hwnd; //接收消息的窗口句柄。
和哪个窗口相关联。
UINT message; //消息标识。
消息本身是什么。
WPARAM wParam; //消息的附加信息。
具体取决于消息本身。
LPARAM lParam;DWORD time; //消息投递时间。
POINT pt; //消息投递时,光标在屏幕上的位置。