孙鑫VC教学视频的学习笔记总结(20讲)
文章平均质量分 64
huahuamoon
我只不过是一个爱上编程的平凡人。
展开
-
孙鑫VC学习笔记:第八讲 逃跑按钮的巧妙实现和MFC中指针的获取
1.如何改变按纽的字体?在对话框的属性中改变字体的属性即可2.逃跑按纽的实现 1.从CButton派生一个类,CWeixinBtn 2.将IDC_EDIT1关联成员变量m_btn1,类型为CWeixinBtn,注意要包含头文件。 3.在CWeixinBtn中加一个指针成员变量CWeixinBtn *pWeixinBtn,然后将其地址初始化。 4.在新类中增加鼠标移动的消息处理。3.属转载 2008-01-02 16:42:00 · 2354 阅读 · 1 评论 -
孙鑫VC学习笔记:第十一讲 (二) 图形的保存与重绘方法一
图形的保存和重绘编写画图代码,设定一个标识,在OnLButtonDown中保存鼠标按下去的点,在OnLButtonUp中捕获鼠标弹起的点,利用switch语句分别画图。这是上节课的内容,上节课还讲了窗口重绘的原理,实际上分为两步,首先擦除以前的背景,然后再进行窗口重绘。所以当拖动窗口改变窗口大小时,窗口要发生重绘,首先会擦除以前的背景,于是先前所画图像会消失。解决办法是将画图代码写在OnDra转载 2007-12-25 15:23:00 · 1083 阅读 · 0 评论 -
孙鑫VC学习笔记:第十二讲 (一) 介绍常量指针、指针常量,文本、二进制文件
◆指向常量的指针它指向的内容是常量,不能修改;但是指针本身存放的是指针值,可以修改。char ch[5]="list" 这种赋值形式只能在数组定义的同时进行。 常量字符串会自动加上/0,所以字符串长度为五通常,如果想用指针传参,通常会将形参声明的指向常量的指针类型当实参传入之后,形参无法修改实参指向的内容,从而保证了数据的一致性---------------------------------转载 2007-12-25 15:02:00 · 922 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理
WM_FILE_NEW消息响应原理当点击“新建”按钮时,会发送WM_FILE_NEW消息,按照消息响应函数的命名规则,它的响应函数应该叫OnFileNew(),但是在代码中找不到,通过调试发现,当新建按钮时,程序会调用CGraphicDoc::OnNewDocument(),WM_FILE_NEW的消息是如何响应的呢?我们可以在VC++的安装目录下找到一个文件../Microsoft Visu转载 2007-12-25 14:52:00 · 824 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (四) 生成可串行化的类
生成可串行化的类:如果要用CArchive来保存一个对象,那么这个对象的类必须支持串行化。要生成一个可串行化的类,需要下面5个步骤:(以生成第11讲中用过的CGraph类为例)1 . Deriving your class from CObject (or from some class derived from CObject). 从CObject派生你的类 class CGraph :转载 2007-12-25 14:51:00 · 596 阅读 · 0 评论 -
孙鑫VC学习笔记:第十四讲 (一) 网络的基本概念
介绍一下网络的基本概念------------------------------------------------------------------------ISO/OSI七层参考模型OSI(Open System Interconnection)参考模型将网络的不同功能划分为7层。应用层--->处理网络应用表示层--->数据表示会话层--->主机间通信传输层--->端到端的连接网络层--转载 2007-12-25 14:47:00 · 619 阅读 · 0 评论 -
孙鑫VC学习笔记:第十五讲 (一) 进程和线程基本概念
程序、进程和线程基本概念——程序和进程程序是计算机指令的集合,它以文件的形式存储在磁盘上。进程:通常被定义为一个正在运行的程序的实例, 是一个程序在其自身的地址空间中的一次执行活动。进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立的运行的单位, 因此,他不占用系统的运行资源。进程由两个部分组成: 1、操作系统用来管理进程转载 2007-12-25 14:45:00 · 831 阅读 · 0 评论 -
孙鑫VC学习笔记:第十五讲 (二) 线程创建方法
一、创建一个线程创建线程使用CreateThreadThe CreateThread function creates a thread to execute within the address space of the calling process. HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD转载 2007-12-25 14:43:00 · 810 阅读 · 0 评论 -
孙鑫VC学习笔记:第十五讲 (四) 编写一个基于MFC对话框的聊天程序
编写一个基于MFC对话框的聊天程序:1.新建一个基于MFC项目工程Chat2.加载套接字库,有下面两种方法,在这里选择第二种方法,因为更方便。方法一、使用WSAStartup()加载套接字库 参考MSDN中的范例代码,拷贝到自己的程序中修改即可。 注意不再使用套接字后调用WSACleanup()。方法二、使用AfxSocketInit()加载套接字库(MFC) BOOL AfxSocketIn转载 2007-12-25 14:41:00 · 2802 阅读 · 7 评论 -
孙鑫VC学习笔记:第十八讲 ActiveX 控件
基本概念:容器和服务器程序 容器应用程序时可以嵌入或链接对象的应用程序。Word就是容器应用程序。 服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序。Excel就是服务器应用程序。 ActiveX控件不能独立运行,它必须被嵌入容器应用程序中,和容器应用程序一起运行。 ----------------------------------------------------------转载 2007-12-25 14:23:00 · 942 阅读 · 0 评论 -
孙鑫VC学习笔记:第十讲画图 创建设置画笔的对话框 并且可以预览效果
转载 2007-12-25 15:29:00 · 1033 阅读 · 0 评论 -
孙鑫VC学习笔记:第十九讲 动态链接库
动态链接库Windows API中的所有函数都包含在DLL中。其中有三个最重要的DLL,Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数;GDI32.dll,它包含用于画图和显示文本的各个函数。--------------------------------------------转载 2007-12-29 13:26:00 · 1635 阅读 · 0 评论 -
孙鑫VC学习笔记:第九讲 界面修改,工具栏,状态栏,启动画面的制作
1:如何修改单文档应用程序的窗口标题,查阅MSDC文章:Changing the styles of a window created by MFC. 要在CMainFrame的PrecreatWindow()中加入如下代码: cs.style&=~FWS_ADDTOTITLE; cs.lpszName="This is a test!"; 可以先不要上一句试一试!另一种方法是 :转载 2008-01-02 16:32:00 · 4640 阅读 · 0 评论 -
孙鑫VC学习笔记:第三讲 MFC应用程序框架
1.在MFC的源代码中查找入口函数WinMain(). X:/Program Files/Microsoft Visual Studio/VC98/MFC/SRC APPMODUL.CPP文件中------------------------------------------------------------------------extern "C" int WINAPI_tWinMai转载 2008-01-02 13:47:00 · 3495 阅读 · 2 评论 -
孙鑫VC学习笔记:第一讲 Windows程序内部运行原理
1.消息结构体typedef struct tagMSG { // msg HWND hwnd; //标识消息与哪个窗口相关 UINT message; //指示消息本身 WPARAM wParam; //消息的附加消息 LPARAM lParam; //消息的附加消息 DWORD time; //消息产生的时间 POINT pt; //转载 2008-01-02 13:50:00 · 3583 阅读 · 0 评论 -
孙鑫VC学习笔记:第四讲 MFC消息映射机制和CDC类的使用
1.在文档-视图结构中,View类总是覆盖在CMainFrm框架窗口之上的.所以框架窗口无法对 WM_LBUTTONDOWN消息做出响应.2.在添加WM_LBUTONDOWN后,查看我们的工程的源程序变化 查看 DrawView.h--------------------------------------------------------------------------------转载 2008-01-02 13:45:00 · 1816 阅读 · 0 评论 -
孙鑫VC学习笔记:第五讲 文本编程
1.创建插入符 CWnd::CreateSolidCaret MSDN ------------------------------------------------------------------------------------- CWnd::CreateSolidCaret Creates a solid rectangle for the system caret an转载 2008-01-02 13:44:00 · 1345 阅读 · 0 评论 -
孙鑫VC学习笔记:第六讲 菜单
CMenuApp 并不是从CWnd派生出来的,所以不能使用MessageBox函数。 但可以使用全局的MessageBox函数:AfxMessageBox函数 int AfxMessageBox(LPCTSTR lpszText,UINT nType,UINT nIDHelp); 对菜单项Test响应的顺序:转载 2008-01-02 13:42:00 · 1255 阅读 · 0 评论 -
孙鑫VC学习笔记:第七讲 对话框
类的继承图表CObject CCmdTarget CWnd //由CWnd派生,是一个窗口类 CDialog 对话框分为模态对话框和非模态的对话框CDialog::DoModal //virtual int DoModal() 调用DoModal()创建一个模态的对话框 它的返回值是做为CDialog::EndDailog成员函数的参数,这个参数转载 2008-01-02 13:40:00 · 1198 阅读 · 0 评论 -
孙鑫VC学习笔记:第二十讲 (二) ado数据库编程
数据库编程:COM[计] 小型可执行程序的扩展名, 串行通讯端口[域] Commercial organizations,商业组织,公司The Component Object Model组件对象模型ADO的三个核心对象Connection对象Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。Recordest和Comm转载 2007-12-29 13:30:00 · 3961 阅读 · 2 评论 -
孙鑫VC学习笔记:第二十讲 (一) Hook编程
通过安装Hook过程,可以用来屏蔽消息队列中某些消息The SetWindowsHookEx function installs an application-defined hook procedure into a hook chain. You would install a hook procedure to monitor the system for certain types o转载 2007-12-29 13:28:00 · 1682 阅读 · 0 评论 -
孙鑫VC学习笔记:第十一讲 (六) 图形重绘方法二 利用元文件
介绍两种保存图形与重绘图形的方式第一种,要利用要一个类 CMetaFileDC第一步创建一个CMetaFileDC 对象。接着调用CMetaFileDC 构造器,然后再调用Create 函数 创建一个设备上下文与CMetaFileDC 对象关联起来。下一步给CMetaFileDC 对象发送一系列的CDC命令在为元文件发送完命令之后,调用Close成员函数关闭元文件的设备上下文,并返回一个元转载 2007-12-25 15:05:00 · 921 阅读 · 0 评论 -
孙鑫VC学习笔记:第十二讲 (六) 读写注册表
修改注册表对注册表的操作是通过几个函数完成的。在注册表中,值包含三个部分:值的名称,值的类型,值的本身即数据使用RegSetValue()向注册表写入数据:注意:RegCreateKey只能建立REG_SZ型数据,要建立其他数据需要调用RegCreateKeyEx使用RegSetValueEx()向注册表写入数据:使用RegQueryValue读取注册表:要获得其他数据类型数据,调用Reg转载 2007-12-25 14:56:00 · 728 阅读 · 0 评论 -
孙鑫VC学习笔记:第十二讲 (四) 用API函数、CFile类操作文件
用Win32API函数操作文件:1.保存文件 首先用CreateFile 打开文件,然后调用WriteFile将数据写入到文件当中。 2.读取文件 首先用CreateFile 打开文件,然后调用ReadFile读取数据到ch字符数组中。----------------------------------------------------------------------------转载 2007-12-25 14:58:00 · 1222 阅读 · 1 评论 -
孙鑫VC学习笔记:第十二讲 (五) 往win.ini的文件中写入数据
往win.ini的文件中写入数据在实际开发程序时,我们经常要把一些初始化信息写入到一个配置文件中,当程序启动的时候读入这些初始化的信息。早期的软件会将这些信息写入一个叫win.ini的文件中(当然现有很多软件将这些信息写到注册表中)。如果我们也想在win.ini文件中写入信息,可以利用WriteProfileString函数。我们在CFileApp::InitInstance()函数中,调转载 2007-12-25 14:57:00 · 888 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (一) 用CArchive类读取与保存文件
介绍一种利用CArchive类读取与保存文件的方法: 首先:构造一个CFile对象 然后构造一个CArchive对象, 接着就可以用CArchive对象的">"操作符提取数据 注意:提取数据时应按照保存的顺序提取。转载 2007-12-25 14:55:00 · 817 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (二) 设置文档标题
设置文档标题:前面我们讲过如何去修改一个程序的图标(在CMainFrame类中)、光标、背景(在View类中),没有讲如何修改程序的标题(在前面两个类中都修改不了)。方法一: 在程序启动的时候,会调用OnNewDocument创建一个“无标题”文档, 所以我们可以在这个方法中调用CDocument类的SetTitle成员函数修改标题。方法二: 也可以在String Table中修改标题,转载 2007-12-25 14:54:00 · 979 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (五) 保存可串行化的类对象 如何获取文档与视类指针
如何获取视类指针:1.首先要获得第一个视类对象在视类对象列表中的位置,用GetFirstViewPosition方法virtual POSITION GetFirstViewPosition( ) const; A POSITION value that can be used for iteration with the GetNextView member function. POSITIO转载 2007-12-25 14:50:00 · 1092 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (六) 关于释放内存
关于释放内存不管是新建文档还是打开另外一份文档,文档对象都是被重复使用的,我们应该在这个时候去释放先前分配的内存。在打开或者新建一个文档时都会调用Cdocument::OnOpenDocument方法,而这个方法又会调用DeletContents成员函数删除文档数据,该函数在文档被销毁之前或文档被重复使用之前被调用,用来删除对象的数据(但并不消除对象本身),从而确保文档数据是空的。这对于一个单转载 2007-12-25 14:49:00 · 889 阅读 · 0 评论 -
孙鑫VC学习笔记:第十四讲 (二) 网络编程
基于TCP服务器端编程步骤//1.加载套接字库//2.创建套接字//3.将套接字绑定到本地地址与端口上//4.设置监听//4.接收服务器端发送的数据,并且向服务器端发送数据//5.关闭套接字,释放资源,并且终止对套接字库的使用基于TCP客户端编程见下面,TCP和UDP编程代码大致相同,不同之处在于,TCP使用send/recv发送与接收数据;UDP使用sendto/recvfrom;转载 2007-12-25 14:46:00 · 820 阅读 · 0 评论 -
孙鑫VC学习笔记:第十六讲 (二) 利用关键代码段实现线程间的同步
关键代码段 1.关键代码段(临界区)工作在用户方式下。 2.关键代码段(临界区)是指一个小代码段,在代码能够执行前,它必须独占对某资源的访问权。利用关键代码段实现线程间的同步的一个实例互斥对象、事件对象与关键代码段的比较 互斥对象和事件对象属于内核对象,利用内核对象进行线程同步,速度较慢, 但利用互斥对象和事件对象这样的内河对象,可以在多个进程中的各个线程间进行同步。 关键代码段时工作在用户方式下转载 2007-12-25 14:38:00 · 860 阅读 · 0 评论 -
孙鑫VC学习笔记:第十六讲 (三) 用异步套接字编写聊天程序
基于消息的异步套接字 Windows套接字在两种模式下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非阻塞模式下,Winsock函数无论如何都会立即返回。 Windows Sockets为了支持Windows消息驱动机制,使应用程序开发者能够方便地处理网络通信,它对网络事件采用了基于消息的异步转载 2007-12-25 14:37:00 · 1069 阅读 · 0 评论 -
孙鑫VC学习笔记:第十二讲 (三) 用C++函数读写文件
C++读写文件方法在C++中,可以用ofstream类来写入文件,这个类的头文件是 可以用ifstream类来读取文件,ifstream类的用法与ofstream类似转载 2007-12-25 15:00:00 · 804 阅读 · 0 评论 -
孙鑫VC学习笔记:第十二讲 (二) 用C语言函数读写文件
C语言中文件写入操作FILE *pFile=fopen("1.txt","w"); //w方式,会销毁打开文件中原先的内容fwrite("I Love You",1,strlen("I Love You"),pFile); //写入数据---------------------------------------------------------------------------------转载 2007-12-25 15:01:00 · 1127 阅读 · 3 评论 -
孙鑫VC学习笔记:第十五讲 (三) 增加互斥条件实现线程同步
增加互斥条件,实现线程同步。一、创建互斥对象 : HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,// 安全性 BOOL bInitialOwner, // flag for initial ownership, LPCTSTR lpName // pointer to mutex-object name );打转载 2007-12-25 14:42:00 · 859 阅读 · 0 评论 -
孙鑫VC学习笔记:第十六讲 (一) 利用事件对象实现线程间的同步
事件对象基本概念事件对象:事件对象与互斥对象都属于内核对象,事件对象包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是为通知状态的布尔值。有两种不同类型的事件对象:一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程;当一个自动重置的事件得到通知时,等待该事件的转载 2007-12-25 14:39:00 · 704 阅读 · 0 评论 -
孙鑫VC学习笔记:第十七讲 (一) 用剪贴板实现进程间的通信
孙鑫教学视频笔记(17)进程间通信---------------------------------------------------------------------------------进程间通信的四种方式剪贴板匿名管道命名管道邮槽 --------------------------------------------------------------转载 2007-12-25 14:33:00 · 732 阅读 · 0 评论 -
孙鑫VC学习笔记:第十七讲 (二) 用匿名管道实现进程间的通信
用匿名管道实现进程间的通信: 匿名管道只能在本地主机上,父子进程之间完成通信: 步骤:1.新建一个项目Parent 2.增加“匿名管道”子菜单以及“创建管道”、“读取数据”与“写入数据”三个菜单项。3.在CParentView 中添加两个成员句柄:HANDLE m_hWrite;HANDLE m_hRead;4.为“创建管道”菜单项实现创建管道的功能转载 2007-12-25 14:31:00 · 2083 阅读 · 0 评论 -
孙鑫VC学习笔记:第十七讲 (四) 用邮槽实现进程间的通信
用邮槽实现进程间的通信:邮槽是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输。邮槽是一种单向通信机制,创建邮槽的服务器进程读取数据,打开邮槽的客户机进程写入数据,为保证邮槽在各种Windows平台下都能正常工作,我们传输消息的时候,应将消息的长度限制在424字节以下。 要创建邮槽,可以使用函数HANDLE CreateMailslot(LPCTSTR lpN转载 2007-12-25 14:27:00 · 626 阅读 · 0 评论 -
孙鑫VC学习笔记:第十一讲 (一) 坐标空间与各种转换的概念
孙鑫VC学习笔记:第十一讲 坐标空间与各种转换的概念介绍一下坐标空间、逻辑空间、映射方式等概念MicroSoft Windows 下的程序运用坐标空间和转换来对图形输出进行缩放,平移,旋转,斜切和反射。一个坐标空间是一个二维空间,通过使用连个相互垂直并且长度相等的轴来定义二维对象 坐标空间API使用四种坐标空间:世界坐标系空间,页面空间,设备空间,和物理设备空间。基于Win32的应用程转载 2007-12-25 15:24:00 · 1186 阅读 · 0 评论