孙鑫VC++深入详解
文章平均质量分 82
thefutureisour
ZTE基带部码农,平时工作很忙,不再更新opencv相关内容,也不解答大家问题了。
展开
-
VC++深入详解(14):多线程与线程同步(重新修改版)
考虑到内容的连贯性,我对几乎重写了这篇博客,在这一小节,主要介绍线程以及线程间的同步,而把那个聊天工具放到下一节。什么是程序?程序是计算计指令的集合,它以文件的形式储存在磁盘上。什么是进程?进程是一个正在运行的程序的实例,是一个程序在其自身的地址空间内中的一次执行活动。因此,一个程序可以对应多个进程,比如我们可以把自己编写的简单的“hello, world”程序执行很多遍。进程是资源申原创 2012-11-07 08:24:04 · 13089 阅读 · 0 评论 -
VC++深入详解(18):钩子函数
什么是HOOK编程?这得从Windows消息机制说起:当在应用程序窗口内点击鼠标左键时,操作系统会感知这一事件,然后把消息放到应用程序的消息响应队列中,应用程序通过GetMessage读取消息,然后通过DispatchMessage将消息调度给操作系统,操作系统会调用在设计窗口类时指定的应用程序窗口过程函数对消息进行处理。假如我们希望对某个特殊的消息进行屏蔽,比如希望这个应用程序不响应回车原创 2012-11-21 09:47:12 · 7698 阅读 · 0 评论 -
VC++深入详解(16):进程通信
我们只介绍几种简单的进程间通信机制:剪切板、匿名管道、命名管道、匿名管道和油槽。平时大家都用过剪切板,比如选中记事本上的一段文字,然后Ctrl+C复制到剪切板上,然后在word中按下Ctrl+V,将其复制。这其实完成了两个进程之间的通信:从记事本到word。实际上,剪切板是系统维护管理的一段内存区域,当在一个进程中复制数据时,是将数据复制到这个内存区域,而在另一个进程中粘贴数据时,是从这个内存原创 2012-11-18 14:01:57 · 5188 阅读 · 1 评论 -
VC++深入详解(13):详细分析控制台应用程序下的多线程输出
最近写了了个问题很多的多线程程序,在里面我没有使用互斥对象,用它来探索多线程程序到底是如何运行的,在众多网友的帮助下,得到了很多有意义的结果,现整理如下。(如果有错误的观点,敬请批判)首先说明,我的笔记本是双核的,编译器是VS2010:int main(){ HANDLE hThread =(HANDLE) _beginthreadex(NULL, 0, Fun1Proc, NULL,原创 2012-11-06 15:21:04 · 5852 阅读 · 0 评论 -
VC++深入详解(7):定制应用程序的外观
这一小节的内容很杂,包扩程序的窗口大小、图标、光标、背景、工具栏、状态栏等内容。窗口创建之前修改在框架类的PreCreateWindow函数中,我们可以通过改变引用形参cs的某些成员来修改窗口显示的特性,比如: cs.cx = 300; cs.cy = 200;会将窗口的大小修改为200*200。假如你想修改程序的标题,那么可以: cs.style &= ~FWS原创 2012-10-24 11:19:47 · 2509 阅读 · 1 评论 -
VC++深入详解(6):MFC对话框(二)
先新建一个MFC工程,然后选择基于对话框的应用程序。我们发现,跟单文档应用程序相比,它只有3个类:CAboutDlg:与单文档的相同,用来显示帮助。这里其实可以完全不要。CTestApp:MFC应用程序必不可少的类,它的全局对象theApp代表了应用程序本身CTestDlg:基于对话框的MFC应用程序的主界面,从CDialog派生出来的。我们先看一个简单的问题:逃跑原创 2012-10-19 17:39:34 · 4946 阅读 · 1 评论 -
VC++深入详解(4):MFC菜单设计
首先,菜单是一种资源,在资源视图中,我们可以找到默认的单文档应用程序的菜单。然后还有一些概念性的东西需要交代清楚:整个菜单上的那些“文件”、“编辑”、“查看”等等内容,称为“顶层菜单”,双击它们,你会发现它们没有ID,而且它们是“弹出”的,它们不能响应命令;而点击子菜单的“打开”、“新建”等内容,可以响应命令这些内容称为菜单项。我们发现,不论是新建的菜单,还是子菜单,在最后总有一个虚线框起来的原创 2012-10-11 08:24:44 · 9686 阅读 · 0 评论 -
VC++深入详解(3):MFC文本编程
文本处理程序都有插入符,在MFC中使用CreateSolidCaret实现创建插入符,创建完成后使用ShowCaret显示插入符。int CCH_5_TEXTView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO:原创 2012-10-07 20:57:27 · 3757 阅读 · 1 评论 -
VC++深入详解(15):简单聊天工具的实现
我们看一个综合例子:使用MFC来实现一个网络聊天软件。看到这个例子有人可能觉得奇怪,前面网络编程时讲到过一个类似的控制台应用程序的例子,为什么要放在这里?原因在于,前面的那个例子,我们必须是一个人说完就得等另一个人说,不能自己连续说,这是由它的实现代码决定的;而我们这里想实现的是“自由”的对话,可以在任意时间发送或者接收数据。这就需要我们这一小节的知识来帮忙了:我们可以利用一个线程来实现接收消息。原创 2012-11-12 17:45:48 · 6203 阅读 · 6 评论 -
VC++深入详解(11):文档与串行化
其实这一部分的内容本该是放在网络编程之前的。但是由于网络编程比较重要就先看了。所谓的文档串行化,解决的是这么一类问题:对于内存中的变量,当程序结束时就会消失,我们有没有办法把它们的结果记录在硬盘上,当程序结束,我们重新启动程序时,有没有办法重新加载这些保存在硬盘上的对象呢?我们首先考虑的是CFile对象。但是,因为CFile在读写时始终要求的是字符串buffer,相对比较麻烦,MFC为我们提供原创 2012-11-15 08:45:48 · 6414 阅读 · 3 评论 -
VC++深入详解(8):图形绘制
我们先看简单绘图:对于一个单文档应用程序,我们先为其添加一个菜单:画图,然后为它添加4个菜单项:ID_DOT、IDM_LINE、IDM_RECTANGLE、IDM_ELLIPSE。我们的目标,是当选中其中的一项时,能够在客户区中绘制相应的图形。首先,我们需要一个UINT类型的变量m_nDrawType来记录我们选择的是哪个类型。并在这4个菜单的响应函数中为其赋值:void CC原创 2012-10-29 13:19:26 · 3608 阅读 · 1 评论 -
VC++深入详解(2):MFC消息映射与基本绘图
先看一个简单的例子:让程序对鼠标左键响应一个messagebox。有两种方法完成这个任务:1.在对应的类上选择Add windows message Handler,然后选择WM_LBUTTONDOWN消息,然后增加处理函数,在处理函数中添加一句: MessageBox("view click!");或者使用菜单上的查看->建立类向导,在message maps下选择:Project选原创 2012-10-06 15:24:31 · 4462 阅读 · 0 评论 -
VC++深入详解(17):动态链接库
静态库函数和数据被编译进一个二进制文件(.LIB)。在使用静态库下,在编译连接可执行文件时,链接器从库中复制这些函数和数据,并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE)。当产品发布时,只需要发布可执行文件,不需要发布使用的静态库。它的特点在于:1.编译后的可执行文件包含了所需要的函数的代码,占用磁盘空间较大。(但是可以避免出现用户的电脑上没有你开发时所用的库的尴原创 2012-11-19 22:23:21 · 3894 阅读 · 0 评论 -
VC++深入详解(12):网络编程
这一小节介绍网络编程。首先我们介绍一下计算机网络的基本知识,然后着重介绍一下Windows Socket程序的编写。首先,介绍几个基本概念。什么是计算机网络?它是相互连接的独立自主的计算机的集合。它们是如何通信的呢,需要一个东西来表明我要跟哪个计算机进行通信,在网络上,为每个计算机分配了一个“IP”地址,通过地址来找到想要通信的计算机。具体的通信是计算机的某个程序实现的,一台计算机可能同时有多原创 2012-11-04 00:15:38 · 8966 阅读 · 1 评论 -
VC++深入详解(10):文件的读写
给单文档的应用程序的菜单增加一个菜单“文件操作”,两个菜单项:“写入文件”、“读出文件”。为其添加消息响应函数。先看看Win32API函数是如何使用的:HANDLE CreateFile( LPCTSTR lpFileName, // file name DWORD dwDesiredAccess,原创 2012-11-01 21:04:57 · 8263 阅读 · 0 评论 -
VC++深入详解(9):图形的保存和重绘
首先,我们重新实现一下上次课实现的功能:通过菜单,选择画哪种图形,然后进行绘图。但是这个功能有一个严重的问题,就是窗口发生重绘(比如我们把程序最小化以后再重新显示)以后,原来的图就不见了!怎么解决这个问题呢?我们必须保存每次画的图。然后在重绘函数中把它们重新画出来。准确的说,其实我们只需要保存3样东西就行了:类型(画点、画线、画矩形、画椭圆)、起点、终点。我们可以用一个类封装它们。clas原创 2012-10-30 14:46:05 · 5575 阅读 · 1 评论 -
VC++深入详解(5):MFC对话框(一)
对话框可以分为两大类:模态对话框和非模态对话框。模态对话框是指,当其显示时,程序会暂停执行,直到关闭这个对话框之后,才能继续执行程序中的其他任务。非模态对话框是指,当对话框显示时,允许转而执行程序中的其他任务,而可以不理会这个对话框。对话框也是一种资源,可以在资源视图中新建一个对话框来实现。新建的对话框已经包含了2个按钮,确定和取消。在MFC中,对资源的操作都是通过一个与资源相关的类来完成原创 2012-10-15 14:18:53 · 15734 阅读 · 1 评论 -
VC++深入详解(1):MFC框架程序剖析
学了一段Win32SDK应用程序以后,因为种种杂七杂八的事情,让windows程序设计的内容停滞了很长一段时间。但是我今天还是鼓足了勇气,继续开始后面的内容。(不过后面的笔记不再是跟着杨力祥老师的上课内容了,因为他对MFC的讲解似乎课程剩下的不是很足,所以我换了孙鑫老师的听)。咱们直接从第三节课讲起吧。第一节课讲的是用Win32SDK应用程序写“hello world”,我们之前已经做过很多遍原创 2012-10-05 16:50:49 · 6860 阅读 · 3 评论