
MFC编程
文章平均质量分 78
FlowShell
这个作者很懒,什么都没留下…
展开
-
使用CFileDialog选择多个文件
document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.lengt转载 2009-10-08 20:34:00 · 4274 阅读 · 1 评论 -
MFC文档视图(四)
<br />[WINDOW/New Window]的处理过程:<br />void CMDIFrameWnd::OnWindowNew()<br />{<br /> //获得当前的AcitveChild<br /> CMDIChildWnd* pActiveChild = MDIGetActive();<br /> //获得当前ActiveChild的当前ActiveDocument,同用一个CDocument<br /> CDocument* pDocument;<br /> pDocument = pA转载 2010-11-29 18:27:00 · 1346 阅读 · 0 评论 -
MFC文档视图(三)
<br />一,[FILE/CLOSE]的实现过程:<br />1.CDocument::OnFileClose()<br />void CDocument::OnFileClose()<br />{<br /> if (!SaveModified())<br /> return;<br /> OnCloseDocument();<br />}<br />2.CDocument::SaveModified()<br />BOOL CDocument::SaveModified()<br />{<br />原创 2010-11-29 14:57:00 · 1882 阅读 · 0 评论 -
MFC文档视图(二)
一, 在单文档或者是多文档中,有默认的菜单,这里是这些菜单项默认处理,如下:菜单内容命令项ID默认的处理函数预有关联FileNewID_FILE_NEWCWinApp::OnFileNewNoOpenID_FILE_OPENCWinApp::OnFileOpenNoClose(MDI ONLY)ID_FILE_CLOSECDocumemt::OnFileCloseYesSaveID_FILE_SAVECDocument:OnFileSaveYesSave AsID_FILE_SAVEASCDocument转载 2010-11-29 13:46:00 · 3014 阅读 · 1 评论 -
MFC文档视图(一)
MFC的Document/View结构能够将管理数据的程序代码负责数据显示的程序代码分离出来。主要包括这样几个类:CDocManager,CDocTemplate,CDocument,CView,CFrameWnd。在介绍之前源码如下:CDocManager类的部分定义class CDocManager : public CObject{public: virtual CDocument* OpenDocumentFile(LPCTSTR lpszFileName); // open转载 2010-11-28 16:36:00 · 2019 阅读 · 0 评论 -
利用C++语言设计可扩展线程池(转载)
利用C++语言设计可扩展线程池(转载)www.firnow.com 时间 : 2009-04-03 作者:匿名 编辑:sky 点击: 181 [ 评论 ]--综合 资源 电子书 社区 利用C++语言设计可扩展线程池(转载)摘要:在各种业务解决方案的设计中,服务器处理任务的效率是衡量方案优劣的一个重要标准。使用多线程技术并发处理任务是提高服务器效率的一个主要手段。但是频繁的线程创建、销毁和任务的分配也会降低系统效率。本文设计了一原创 2010-08-22 13:09:00 · 1054 阅读 · 0 评论 -
VC++ Tab Control控件的使用
Tab Control的简单使用转载 2010-06-14 16:40:00 · 1267 阅读 · 0 评论 -
VC单选按钮控件(Radio Button)用法(转)
先为对话框加上2个radio button,分别是Radio1和Radio2。问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,“默认”只要放在OnInitDialog()即可。三种方法可以让它选上, 第一种: ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上 ((CButton *)GetD转载 2010-04-18 10:57:00 · 1358 阅读 · 0 评论 -
CSpinButtonCtrl使用说明
使用实例如下:在对话框上做如下操作:1.添加EDIT控件2.添加Spin控件如果不是这样的顺序的话,使用ctrl+D改变Tab顺序,使spin紧靠edit后面3.在EDIT控件上面设置group属性(特别注意)4.在Spin控件上设置Auto Buddy 为 trueSet Buddy Integer 为 trueAlignment 为 Right Align5.添加Edit控件 int转载 2010-03-26 19:40:00 · 1541 阅读 · 1 评论 -
MFC之对话框
<br />对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的。<br />一,模式与非模式对话框<br />1.模式对话框<br /> 一个模式对话框是一个有系统菜单、标题栏、边线等的弹出式窗口。在创建对话框时指定WS_POPUP, WS_SYSMENU, WS_CAPTION和 DS_MODALFRAME风格。即使没有指定WS_VISIBLE风格,模<br />式对话框也会被显示。创建对话框窗口时,将发送WM_INITDIALOG消息(如果指定对话框的DS转载 2010-12-02 14:38:00 · 11059 阅读 · 0 评论 -
MFC架构之CCmdTarget类
<br /> 类CCmdTarget是MFC类库中消息映射体系的一个基类。所有响应消息或事件的类都从它派生。例如,CWinApp,CWnd,CDocument,CView,CDocTemplate,CFrameWnd,等等。<br /> CCmdTarget类是MFC处理命令消息的基础、核心。MFC为该类设计了许多成员函数和一些成员数据,基本上是为了解决消息映射问题的,而且,很大一部分是针对OLE设计的。在OLE应用中,CCmdTarget是MFC处理模块状态的重要环节,它起到了传递原创 2010-11-14 13:02:00 · 3191 阅读 · 0 评论 -
坐标和几个函数的用法说明
本文转自:http://www.cppblog.com/Lee7/archive/2009/05/29/86070.html (1)Windows坐标系统Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系。一般而言,GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠标的鼠标位置是采用设备坐标。逻辑坐标系是面向DC的坐标系,这种坐标不考虑具体的设备类型,在绘图转载 2010-03-08 21:55:00 · 2561 阅读 · 0 评论 -
CString实现原理
MFC中CString类的实现在strcore.cpp中,Cstring封装了一个用来存放字符串的缓冲区和对施加于这个字符串的操作。也就是说 ,CString里需要有一个用来存放字符串的缓冲区,并且有一个指针指向该缓冲区,该指针就是LPTSTR m_pchData。但是有些字符串操作会增建或减少字符串的长度,因此为了减少频繁的申请内存或者释放内存,Cstring会先申请一个大的内存块用来存放字符串。这样,以后当字符串长度增长时,如果增加的总长度不超过预先申请的内存块的长度,就不用再申请内存。当增转载 2011-03-18 19:55:00 · 1600 阅读 · 0 评论 -
MFC架构之CWnd类
在Windows系统里,一个窗口的属性分两个地方存放:一部分放在“窗口类”里头,如上所述的在注册窗口时指定;另一部分放在Windows Object本身,如:窗口的尺寸,窗口的位置(X,Y轴),窗口的Z轴顺序,窗口的状态(ACTIVE,MINIMIZED,MAXMIZED,RESTORED…),和其他窗口的关系(父窗口,子窗口…),窗口是否可以接收键盘或鼠标消息,等等。 为了表达所有这些窗口的共性,MFC设计了一个窗口基类CWnd。有一点非常重要,那就是CWnd提供了一个标准而通用的MFC窗口过程转载 2010-11-15 18:33:00 · 12913 阅读 · 0 评论 -
MFC之消息映射的实现(2)
<br />1.MFC窗口过程<br /> 前文曾经提到,所有的消息都送给窗口过程处理,MFC的所有窗口都使用同一窗口过程,消息或者直接由窗口过程调用相应的消息处理函数处理,或者按MFC命令消息派发路径送给指定的命令目标处理。<br /> 那么,MFC的窗口过程是什么?怎么处理标准Windows消息?怎么实现命令消息的派发?这些都将是下文要回答的问题。<br />1.MFC窗口过程的指定<br /> 从前面的讨论可知,每一个“窗口类”都有自己的窗口过程。正常情况下使用该“窗口类”创建的窗口转载 2010-11-14 21:49:00 · 2124 阅读 · 0 评论 -
MFC之消息映射的实现(1)
<br /> Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口。这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows。<br />1.消息的分类<br />1. 队列消息和非队列消息<br />从消息的发送途径上看,消息分两种:队列消息和非队列消息。队列消息送到系统消息队列,然后到线程消息队列;非队列消息直接送给目的窗口过程。<br />这里,对消息队列阐述如下:<br />Windows维护一个系统消息队列(System message queue转载 2010-11-14 20:55:00 · 1344 阅读 · 0 评论 -
MFC架构之CWinApp类
<br /> CWinApp是一个基类,你通过它来继承Windows应用程序对象。应用程序对象为你提供了初始化应用程序(以及它的每一个实例)和运行应用程序所需的成员函数。它实现主事件循环并把事件分发给MFC中其他类.<br /> 每个使用微软基础类库的应用程序都只能包含一个从CWinApp继承的对象。当Windows调用WinMain函数时,这个对象在其它C++全局对象都已经生成并且可用之后才被创建,WinMain函数是由微软基础类库提供的。将你的CWinApp对象定义为全局的。<br转载 2010-11-14 17:18:00 · 3761 阅读 · 0 评论 -
MFC架构之CObject类
<br /> CObject是大多数MFC类的根类或基类。CObject类有很多有用的特性:对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。MFC从CObject派生出许多类,具备其中的一个或者多个特性。程序员也可以从CObject类派生出自己的类,利用CObject类的这些特性。<br /> 本文讨论MFC如何设计CObject类的这些特性。首先,考察CObject类的定义,分析其结构和方法(成员变量和成员函数)对CObject特性的支持。然后,讨论CObje转载 2010-11-13 13:16:00 · 3351 阅读 · 0 评论 -
MFC架构之CWinThread类
我们知道,Windows以事件驱动方式工作,每个WIN32应用程序都至少包含一个消息队列和一个消息泵。消息队列建立在操作系统提供的内存保留区中,消息泵不断搜寻消息队列,将取得的消息分发给应用程序的各个部分进行处理,这个过程叫做消息循环。基本消息循环如下:while(GetMessage(&msg,0,0,0)){ //转换消息参数 TranslateMesssage(&msg); //分发消息 DispatchMessage(&msg)转载 2010-11-14 14:11:00 · 11550 阅读 · 0 评论 -
GetKeyState()和GetAsyncKeyState()的区别
使用::GetKeyState()返回一个short型的数,short型是16位有符号的数据类型,如果要查询的键被按下,返回值最高位被置1,则这个数表示负数,所以可以用0来判断。0x8000是16进制数,用2进制表示为1000 0000 0000 0000,&是按位与。同样,如果键被按下,返回值最高位为1,则1xxx xxxx xxxx xxxx & 1000 0000 0000 0000得到转载 2010-03-27 13:35:00 · 16108 阅读 · 0 评论 -
[转]vs2005安装和部署项目
1 新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定。 2 安装向导 关闭后打开安装向导,点击下一步,或者直接点击完成。 3 开始制作 安装向导完成后即可进入项目文件夹: 双击"应用程序文件夹"在右边的空白处右击,选择添加->文件,将你的做的应用程序的可执行文件和相应的类库和组件添加进来。然后转载 2010-03-14 12:46:00 · 732 阅读 · 0 评论 -
关于WM_NOTIFY及反射机制的来龙去脉
这是一篇关于MFC里消息的路由问题,由于水平有限,难免有错误,如有发现,请指出。感激之至。我打算从OnWndMsg()开始讲,这是窗口真正处理消息的函数。在这函数里对三种消息进行了处理。1.标准Window消息,正常处理就行了(具体怎样请参考>)在这里不是重点2.WM_COMMAND消息,会调用OnCommand()3.WM_NOTIFY消息,会调用OnNotify().原创 2009-11-11 22:02:00 · 5462 阅读 · 0 评论 -
CloseHandle()函数的使用
CloseHandle()函数的使用??很多程序在创建线程都这样写的:............ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );。。。。。这不是刚好创建又关闭了吗?线程怎么运行呢?========================================原创 2009-10-25 16:49:00 · 800 阅读 · 0 评论 -
浅析CAsyncSocket
首先CAsyncSocket采用的WSAAsynSelect模型,WSAAsynSelect是一种异步I/O模型,通过该模型,应用程序可以接收以Windows消息为基础的网络事件通知。而我们这里讲的就是CSocketWnd,它是从CWnd继承的。class CSocketWnd : public CWnd{public: CSocketWnd();protected:原创 2009-10-16 20:22:00 · 3437 阅读 · 2 评论 -
CSocket如何从CAsyncSocket变成同步
CSocket是MFC在CAsyncSocket基础上派生的一个同步阻塞Socket的封装类。它是如何又把CAsyncSocket变成同步的,而且还能响应同样的Socket事件呢? 其实很简单,CSocket在Connect()返回WSAEWOULDBLOCK错误时,不是在OnConnect(),OnReceive()这些事件终端函数里去等待。你先必须明白Socket事件是如何到达这转载 2009-10-16 21:44:00 · 1531 阅读 · 1 评论 -
CThreadPool的使用
最近接触了一些多线程的东西,想实现一个,但是不知道其工作原理,于是现用了系统提供的一个线程池CThreadPool。CThreadPool类有以下几个重要的函数: Initialize():初始化线程池,可以设置线程数,和线程参数BOOL QueueRequest(Worker::RequestType request ) :增加一个Work Item到队列中ShutDown原创 2009-10-15 11:23:00 · 10486 阅读 · 3 评论 -
WM_DRAWITEM与DrawItem()的讨论
我在学习中经常遇到要重写DrawItem()的情况,但又有一个WM_DRAWITEM消息,它们是什么样的关系呢。如果我们要重写一个CButton取名为CMyButton,我们可以重写CMyButton的DrawItem()函数来实现我们的需求,但CMyButton::DrawItem()是在什么时候调用呢?它是在它的宿主类的OnDrawItem()中被调用,OnDrawIte原创 2009-10-10 10:12:00 · 21576 阅读 · 11 评论 -
CListBox的糊涂使用
在用到CListBox的时候,总是觉得很郁闷,这次认真的研究了一下。有两种方法,一种是相应WM_CTLCOLOR它是最简单,最方便的,相关代码如下: HBRUSH br=::CreateSolidBrush (RGB(0,255,255)); if(pWnd->GetDlgCtrlID ()==IDC_LIST3) { pDC->SetTextColor原创 2009-10-09 20:56:00 · 1749 阅读 · 0 评论 -
VS2003下windows media player 控件的使用问题
Windows mediaplayer作為MS的官方組件,MSDN上有著比較詳細的英文說明,但是該說明卻並不是那麼讓人一目了然。該文就如何操作該組件的幾個主要接口以及一些基本功能的實現給與詳盡而明白的說明,為使該文儘量簡單易懂,本文給出了用windows media player控件編寫一個簡單播放器的基本步驟。 首先,創建一個對話框,然後在資源管理器中右擊對話框,選擇“原创 2009-10-08 22:31:00 · 1435 阅读 · 0 评论 -
属性表的学习
一个属性表包含的一个或多个层叠的窗口叫做页(pages),各自包含着一组相关属性的设置窗口。例如,一个页可以包含设置项目(item)字体的类型风格,大小,颜色等属性的控制。每页有一个标签(tab),用户可以使用它选择页,使用它移到属性表中的最显著的位置。 一个属性表和页实际上包含在对话框中。属性表是一个系统定义的对话框,它管理页及为它们提供一个公共容器。属性表对话框可以是模式的或原创 2009-11-12 17:09:00 · 1938 阅读 · 0 评论 -
CTreeCtrl的使用(一)
树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控件的专用转载 2009-11-17 22:25:00 · 2696 阅读 · 1 评论 -
[转]关于Debug和Release之本质区别的讨论
一、Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别转载 2010-03-14 11:31:00 · 785 阅读 · 0 评论 -
MFC程序执行顺序
1、创建Application object对象theApp 程序一开始生产一个(且只有一个)Application object对象theApp,也即一个CWinApp对象,这个全局对象一产生,便执行其构造函数,因为并没有定义CMyWinApp构造函数,所以即执行CWinApp类的构造函数。该函数定义于APPCORE.CPP第75行,你可以自己搜出来啃一啃,因此,CWinApp之中的成转载 2010-03-10 18:09:00 · 1128 阅读 · 0 评论 -
[转]CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别
本文转自:http://blog.youkuaiyun.com/swimmer2000/archive/2007/10/30/1856213.aspx MFC(VC6.0)的CWnd及其子类中,有如下三个函数:class CWnd : public CCmdTarget<img id="Codehighlighter1_34_177_Open_Image" onclick="function oncl转载 2010-03-10 19:29:00 · 1139 阅读 · 2 评论 -
各种设备上下文的区别
CDC是Windows绘图设备的基类CClientDC:(1)(客户区设备上下文)用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,其构造函数中包含了GetDC,析构函数中包含了ReleaseDCCPaintDC:(1)用于响应窗口重绘消息(WM_PAINT)是的绘图输出。(2)CPaintDC在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPa转载 2009-12-10 20:56:00 · 1191 阅读 · 0 评论 -
走出MFC子类化的迷宫
本文转自:http://www.99inf.net/SoftwareDev/VC/22322.htmWindows给我们或是说给它自己定义了许多丰富的通用控件,如:Edit、ComboBox 、ListBox……等,这些控件功能丰富,能为我们开发工作带来极大方面,试想:我们单单是自己实现一个EDIT控件是多么的艰难!但是,在实际开发中还是有些情况这些标准控件也无能为力,比如:在我们的应用中要求转载 2009-11-26 20:24:00 · 1088 阅读 · 0 评论 -
句柄映射机制的实现
mfc里实现句柄映射借助了两个类:句柄映射辅助类,模块--线程状态类 1.句柄映射辅助类:class CHandleMap{private: // implementation CFixedAllocNoSync m_alloc; void (PASCAL* m_pfnConstructObject)(CObject* pObject); void (PASCAL* m_pfnD原创 2009-11-26 18:37:00 · 2710 阅读 · 0 评论 -
配置文件的使用
本文转自:http://blog.youkuaiyun.com/lvwenshuai/archive/2008/06/09/2527428.aspx我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下: 一.将信息写入.INI文件中. 1.所用的WINAPI函数原型为转载 2009-11-22 21:03:00 · 776 阅读 · 0 评论 -
CListCtrl使用
本文转自:http://blog.youkuaiyun.com/sghgcn/archive/2009/03/05/3958219.aspx1. CListCtrl 样式及设置2. 扩展样式设置3. 数据插入4. 一直选中Item5. 选中和取消选中Item6. 得到CListCtrl中所有行的checkbox的状态7. 得到CListCtrl中所有选中行的序号8. 得到ite转载 2009-11-21 21:25:00 · 2303 阅读 · 0 评论 -
Onpaint和OnDraw的区别[转]
OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。OnPaint()是CWnd的类成员,负责响应WM_PAINT消息。OnDraw()是CVIEW的成员函数,没有响应消息的功能.当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows发送WM_PAINT消息。该视图的OnPaint 处理函数通过转载 2015-02-10 15:35:42 · 745 阅读 · 0 评论