
Mfc
文章平均质量分 56
Savitch
I have nothing to offer but blood toil tears and sweat
展开
-
什么是句柄?为什么会有句柄?HANDLE
zhuan http://www.cppblog.com/mymsdn/archive/2009/02/19/handle-in-windows.html从广义上,能够从一个数值拎起一大堆数据的东西都可以叫做句柄。句柄的英文是"Handle",本义就是"柄",只是在计算机科学中,被特别地翻译成"句柄",其实还是个"柄"。从一个小东西拎起一大堆东西,这难道不像是个"柄"吗?然后,指转载 2014-03-26 13:06:50 · 299 阅读 · 0 评论 -
孙鑫VC学习笔记:第十五讲 (一) 进程和线程基本概念
程序、进程和线程基本概念——程序和进程程序是计算机指令的集合,它以文件的形式存储在磁盘上。进程:通常被定义为一个正在运行的程序的实例, 是一个程序在其自身的地址空间中的一次执行活动。进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立的运行的单位, 因此,他不占用系统的运行资源。进程由两个转载 2013-09-12 09:17:07 · 394 阅读 · 0 评论 -
SetWindowLong 和SetClassLong区别
A1:SetWindowLong是对一个Window的;SetClassLong是对一类Window的。A2:SetWindowLong是设置一个窗口的相关属性的,而SetClassLong是设置窗口类的,前者只是对一个窗口起作用,而后者则对所有从这个窗口类中创建的窗口都起作用。这里的不同是setwindowlong对这一个窗口起作用,但是SetClassLong是将这个类进行修改原创 2013-09-12 00:36:17 · 536 阅读 · 0 评论 -
MFC 中获取各种类指针的方法
获得各种视图指针如下1) 在View中获得Doc指针2) 在App中获得MainFrame指针3) 在View中获得MainFrame指针4) 获得View(已建立)指针5) 获得当前文档指针6) 获得状态栏与工具栏指针7) 获得状态栏与工具栏变量8) 在Mainframe获得菜单指针9) 在任何类中获得应用程序类10转载 2013-09-13 11:21:04 · 395 阅读 · 0 评论 -
模块句柄(实例句柄)和句柄的区别
转载地址:http://blog.youkuaiyun.com/a199228/article/details/6622548解释一:1.模块的概念一个模块代表的是一个运行中的exe文件或dll文件,用来代表这个文件中所有的代码和资源,磁盘上的文件不是模块,装入内存后运行时就叫做模块。一个应用程序调用其他DLL中的API时,这些DLL文件被装入内存,就产生了不同的模块,为了区分地址空间转载 2013-09-11 21:56:32 · 440 阅读 · 0 评论 -
孙鑫VC学习笔记:第十四讲 (一) 网络的基本概念
介绍一下网络的基本概念------------------------------------------------------------------------ISO/OSI七层参考模型OSI(Open System Interconnection)参考模型将网络的不同功能划分为7层。应用层--->处理网络应用表示层--->数据表示会话层--->主机间通信传输层-转载 2013-09-11 17:13:21 · 382 阅读 · 0 评论 -
孙鑫VC学习笔记:第二十讲 (二) ado数据库编程
数据库编程:COM[计] 小型可执行程序的扩展名, 串行通讯端口[域] Commercial organizations,商业组织,公司The Component Object Model组件对象模型ADO的三个核心对象Connection对象Connection对象表示了到数据库的连接,它管理应用程序转载 2013-09-12 09:27:29 · 438 阅读 · 0 评论 -
孙鑫VC学习笔记:第十八讲 ActiveX 控件
基本概念:容器和服务器程序 容器应用程序时可以嵌入或链接对象的应用程序。Word就是容器应用程序。 服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序。Excel就是服务器应用程序。 ActiveX控件不能独立运行,它必须被嵌入容器应用程序中,和容器应用程序一起运行。 ----------------------------------------------转载 2013-09-12 09:24:45 · 438 阅读 · 0 评论 -
孙鑫VC学习笔记:第十五讲 (三) 增加互斥条件实现线程同步
增加互斥条件,实现线程同步。一、创建互斥对象 : HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,// 安全性 BOOL bInitialOwner, // flag for initial ownership, LPCTSTR lpName // pointer to mutex-objec转载 2013-09-12 09:18:34 · 376 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (六) 关于释放内存
关于释放内存不管是新建文档还是打开另外一份文档,文档对象都是被重复使用的,我们应该在这个时候去释放先前分配的内存。在打开或者新建一个文档时都会调用Cdocument::OnOpenDocument方法,而这个方法又会调用DeletContents成员函数删除文档数据,该函数在文档被销毁之前或文档被重复使用之前被调用,用来删除对象的数据(但并不消除对象本身),从而确保文档数据是空的。这对于一转载 2013-09-11 17:11:44 · 416 阅读 · 0 评论 -
RecalcLayout的作用
Called by the framework when the standard control bars are toggled on or off or when the frame window is resized.当标准工具栏或状态栏隐藏或者显示,或者窗口调整大小时,框架调用这个方法。 方法原型为: virtual v原创 2013-09-12 10:43:15 · 1967 阅读 · 0 评论 -
孙鑫VC学习笔记:第十七讲 (一) 用剪贴板实现进程间的通信
孙鑫教学视频笔记(17)进程间通信---------------------------------------------------------------------------------进程间通信的四种方式剪贴板匿名管道命名管道邮槽 ----------------------------------------------转载 2013-09-12 09:22:12 · 407 阅读 · 0 评论 -
孙鑫VC学习笔记:第十六讲 (二) 利用关键代码段实现线程间的同步
关键代码段 1.关键代码段(临界区)工作在用户方式下。 2.关键代码段(临界区)是指一个小代码段,在代码能够执行前,它必须独占对某资源的访问权。利用关键代码段实现线程间的同步的一个实例互斥对象、事件对象与关键代码段的比较 互斥对象和事件对象属于内核对象,利用内核对象进行线程同步,速度较慢, 但利用互斥对象和事件对象这样的内河对象,可以在多个进程中的各个线程间进行同步转载 2013-09-12 09:20:20 · 367 阅读 · 0 评论 -
为什么mfc要注册WNDCLASS样式
首先,我们必须要注册这一个类,否则在vc(c写的代码)是不能输出的,如果在mfc建立的项目中可以不用定义,因为frame文件里面已经有了相应的定义。同时,我们需要注意的是如果一个基类如果注册了相应的窗口样式,这时,子类可以不用定义(具体的原因不明,建议查看源码)。 如果没有相应的注册,这时我们需要有一下两种思路解决问题:方式一,定义一个WNDCLASS结构实例,并原创 2013-09-11 22:11:08 · 451 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (五) 保存可串行化的类对象 如何获取文档与视类指针
如何获取视类指针:1.首先要获得第一个视类对象在视类对象列表中的位置,用GetFirstViewPosition方法virtual POSITION GetFirstViewPosition( ) const; A POSITION value that can be used for iteration with the GetNextView member function.转载 2013-09-11 17:11:13 · 444 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (四) 生成可串行化的类
转载 2013-09-11 17:10:34 · 423 阅读 · 0 评论 -
孙鑫VC学习笔记:第十六讲 (一) 利用事件对象实现线程间的同步
事件对象基本概念事件对象:事件对象与互斥对象都属于内核对象,事件对象包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是为通知状态的布尔值。有两种不同类型的事件对象:一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程;当一个自动重置的事件得到通知转载 2013-09-12 09:19:43 · 441 阅读 · 0 评论 -
孙鑫VC学习笔记:第十六讲 (三) 用异步套接字编写聊天程序
基于消息的异步套接字 Windows套接字在两种模式下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非阻塞模式下,Winsock函数无论如何都会立即返回。 Windows Sockets为了支持Windows消息驱动机制,使应用程序开发者能够方便地处理网络通信,它对网络事件采用了基于消转载 2013-09-12 09:20:59 · 405 阅读 · 0 评论 -
CDC::Arc 汉化参数明说及举例
BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );x1为有效矩形左上角X坐标点.y1为有效矩形左上角y坐标点.x2为有效矩形右下角x坐标点.y2为有效矩形右下角y坐标点.原创 2013-09-16 16:02:25 · 666 阅读 · 0 评论 -
Windows的字体LOGFONT
Windows的字体LOGFONTLOGFONT是Windows内部字体的逻辑结构,主要用于设置字体格式,其定义如下:typedef struct tagLOGFONTA{ LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrie转载 2013-09-14 10:55:33 · 289 阅读 · 0 评论 -
mfc中的隐式转换
在mfc中存在多种有对象转换为常量指针或者指针的现象,在这里我们以cstring为例CString::operator LPCTSTRoperator LPCTSTR ( ) const;Return ValueA character pointer to the string’s data.RemarksThis useful casting operator p原创 2013-09-13 21:27:01 · 338 阅读 · 0 评论 -
GDI到底是什么
图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。GDI 概念GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用G原创 2013-09-14 11:11:45 · 3286 阅读 · 0 评论 -
孙鑫VC学习笔记:第十讲画图 创建设置画笔的对话框 并且可以预览效果
MFC中进行与绘图相关的控制,首先先为VIEW类添加一个成员变量 m_nDrawType,用来指定要画的图形 ,增加相应的菜单项用来绘制 点 直线 矩形 和 椭圆 在菜单项的响应函数中写下面的代码:view plainvoid CGraphicView::OnDot() { // TODO: Add your command handler code here转载 2013-09-10 11:32:55 · 648 阅读 · 0 评论 -
MFC中OnDraw与OnPaint的区别
MFC中OnDraw与OnPaint的区别OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。OnPaint()是CWnd的类成员,负责响应WM_PAINT消息。OnDraw()是CVIEW的成员函数,没有响应消息的功能.当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows发送转载 2013-09-13 19:53:00 · 325 阅读 · 0 评论 -
孙鑫VC学习笔记:第十九讲 动态链接库
动态链接库Windows API中的所有函数都包含在DLL中。其中有三个最重要的DLL,Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数;GDI32.dll,它包含用于画图和显示文本的各个函数。--------------------------------------转载 2013-09-12 09:25:50 · 471 阅读 · 0 评论 -
孙鑫VC学习笔记:第十七讲 (四) 用邮槽实现进程间的通信
用邮槽实现进程间的通信:邮槽是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输。邮槽是一种单向通信机制,创建邮槽的服务器进程读取数据,打开邮槽的客户机进程写入数据,为保证邮槽在各种Windows平台下都能正常工作,我们传输消息的时候,应将消息的长度限制在424字节以下。 要创建邮槽,可以使用函数HANDLE CreateMailslot(转载 2013-09-12 09:24:02 · 340 阅读 · 0 评论 -
孙鑫VC学习笔记:第十七讲 (三) 用命名管道实现进程间的通信
用命名管道实现进程间的通信: 命名管道概念:命名管道是通过网络来完成进程间的通信,它屏蔽了地称的网络协议细节。我们在不了解网络协议的情况下,也可以利用命名管道来实现进程间的通信。命名管道充分利用了Windows NT和Windows2000内建的安全机制。将命名管道作为一种网络编程方案时,它实际上建立了一个客户机/服务器通信体系,并在其中可靠的传输数据。转载 2013-09-12 09:23:20 · 533 阅读 · 0 评论 -
孙鑫VC学习笔记:第十五讲 (四) 编写一个基于MFC对话框的聊天程序
编写一个基于MFC对话框的聊天程序:1.新建一个基于MFC项目工程Chat2.加载套接字库,有下面两种方法,在这里选择第二种方法,因为更方便。方法一、使用WSAStartup()加载套接字库 参考MSDN中的范例代码,拷贝到自己的程序中修改即可。 注意不再使用套接字后调用WSACleanup()。方法二、使用AfxSocketInit()加载套接字库(MFC) BO转载 2013-09-12 09:19:11 · 561 阅读 · 0 评论 -
孙鑫VC学习笔记:第十五讲 (二) 线程创建方法
一、创建一个线程创建线程使用CreateThreadThe CreateThread function creates a thread to execute within the address space of the calling process.HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,转载 2013-09-12 09:18:00 · 427 阅读 · 0 评论 -
如何查看MFC源码(转)
如何查看MFC源码(转)2010-02-21 09:33在vc6开发界面中,打开文件,然后选择C:/Program Files/Microsoft Visual Studio/VC98/MFC/SRC/MFC.bsc(具体目录还要根据自己VC的安装路径)。打开文件以后,选择TOOLS ->Source Browser 然后在identifier中输入你想要查看的原创 2013-09-11 22:18:56 · 444 阅读 · 0 评论 -
孙鑫VC学习笔记:第十四讲 (二) 网络编程
基于TCP服务器端编程步骤//1.加载套接字库//2.创建套接字//3.将套接字绑定到本地地址与端口上//4.设置监听//4.接收服务器端发送的数据,并且向服务器端发送数据//5.关闭套接字,释放资源,并且终止对套接字库的使用基于TCP客户端编程见下面,TCP和UDP编程代码大致相同,不同之处在于,TCP使用send/recv发送与接收数据;UDP使用s转载 2013-09-11 17:14:12 · 528 阅读 · 0 评论 -
孙鑫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转载 2013-09-12 09:26:47 · 451 阅读 · 0 评论 -
孙鑫VC学习笔记:第十七讲 (二) 用匿名管道实现进程间的通信
用匿名管道实现进程间的通信: 匿名管道只能在本地主机上,父子进程之间完成通信: 步骤:1.新建一个项目Parent2.增加“匿名管道”子菜单以及“创建管道”、“读取数据”与“写入数据”三个菜单项。3.在CParentView 中添加两个成员句柄:HANDLE m_hWrite;HANDLE m_hRead;4.为“创建转载 2013-09-12 09:22:56 · 411 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理
WM_FILE_NEW消息响应原理当点击“新建”按钮时,会发送WM_FILE_NEW消息,按照消息响应函数的命名规则,它的响应函数应该叫OnFileNew(),但是在代码中找不到,通过调试发现,当新建按钮时,程序会调用CGraphicDoc::OnNewDocument(),WM_FILE_NEW的消息是如何响应的呢?我们可以在VC++的安装目录下找到一个文件../转载 2013-09-11 17:09:52 · 366 阅读 · 0 评论 -
孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理
WM_FILE_NEW消息响应原理当点击“新建”按钮时,会发送WM_FILE_NEW消息,按照消息响应函数的命名规则,它的响应函数应该叫OnFileNew(),但是在代码中找不到,通过调试发现,当新建按钮时,程序会调用CGraphicDoc::OnNewDocument(),WM_FILE_NEW的消息是如何响应的呢?我们可以在VC++的安装目录下找到一个文件../转载 2013-09-11 17:08:13 · 369 阅读 · 0 评论 -
孙鑫VC学习笔记:第十二讲 (二) 用C语言函数读写文件
C语言中文件写入操作FILE *pFile=fopen("1.txt","w"); //w方式,会销毁打开文件中原先的内容fwrite("I Love You",1,strlen("I Love You"),pFile); //写入数据---------------------------------------------------------------------------转载 2013-09-10 11:39:32 · 440 阅读 · 0 评论 -
孙鑫VC学习笔记:第十二讲 (一) 介绍常量指针、指针常量,文本、二进制文件
◆指向常量的指针它指向的内容是常量,不能修改;但是指针本身存放的是指针值,可以修改。char ch[5]="list" 这种赋值形式只能在数组定义的同时进行。 常量字符串会自动加上/0,所以字符串长度为五通常,如果想用指针传参,通常会将形参声明的指向常量的指针类型当实参传入之后,形参无法修改实参指向的内容,从而保证了数据的一致性---------------------转载 2013-09-10 11:39:50 · 425 阅读 · 0 评论 -
孙鑫VC学习笔记:第十一讲 (六) 图形重绘方法二 利用元文件
介绍两种保存图形与重绘图形的方式第一种,要利用要一个类 CMetaFileDC第一步创建一个CMetaFileDC 对象。接着调用CMetaFileDC 构造器,然后再调用Create 函数 创建一个设备上下文与CMetaFileDC 对象关联起来。下一步给CMetaFileDC 对象发送一系列的CDC命令在为元文件发送完命令之后,调用Close成员函数关闭元文件的设备转载 2013-09-10 11:39:05 · 458 阅读 · 0 评论 -
孙鑫VC学习笔记:第十一讲 (四) 图形重绘方法三 利用兼容DC
介绍利用兼容DC保存图形与重绘图形的方式1.构造兼容DC对象:CDC m_dcCompatible2.在CGraphicView::OnLButtonUp写下面代码3.在CGraphicView::OnDraw中写入下面代码:CBitmap::CreateCompatibleBitmap 通过指定的宽高创建一个兼容位图。初始化一个与指定设置相兼容的位图 BOOL转载 2013-09-10 11:37:49 · 445 阅读 · 0 评论 -
孙鑫VC学习笔记:第十一讲 (二) 图形的保存与重绘方法一
图形的保存和重绘编写画图代码,设定一个标识,在OnLButtonDown中保存鼠标按下去的点,在OnLButtonUp中捕获鼠标弹起的点,利用switch语句分别画图。这是上节课的内容,上节课还讲了窗口重绘的原理,实际上分为两步,首先擦除以前的背景,然后再进行窗口重绘。所以当拖动窗口改变窗口大小时,窗口要发生重绘,首先会擦除以前的背景,于是先前所画图像会消失。解决办法是将画转载 2013-09-10 11:35:09 · 451 阅读 · 0 评论