![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MFC
caiqi1123
caiqi1123
展开
-
CreateThread后立即CloseHandle,为什么线程还在运行?
最近回顾了下多线程的东西,碰到CloseHandle函数,之前也碰到过,但是自己积累不足,所以也没理解明白。这次再次碰到,想想积累的也差不多了,索性就搞个明白。函数说明BOOL CloseHandle(HANDLE hObject);参数hObject :代表一个已打开对象handle。返回值TRUE:执行成功;FALSE:执行失败,可以调用GetLastErr转载 2017-05-24 11:10:05 · 4781 阅读 · 1 评论 -
ShowWindow与UpdateWindow .
在看VC++视频教程的时候,在创建新窗口时对ShowWindow和UpdateWindow有一些疑问,来来回回看了很多遍,自己也调试了几遍,只好求下甚解了。。自己也在csdn发帖求教了(帖子网址:http://topic.csdn.net/u/20100818/23/b30e7e3d-2969-45ec-9054-1e98cca442e5.html )问题描述如下:查了一些资料,说show转载 2013-09-10 17:13:25 · 1297 阅读 · 0 评论 -
MFC中的DDX和DDV
DDX:Dialog Data Exchange 如果使用DDX机制,一般会在OnInitDialog消息处理函数或Dialog构造函数中,为对话框对象的成员变量设置了初始值。在对话框显示前,框架的DDX机制将成员变量的值传给对话框中的控件,当调用DoModal或Create函数,对话框即将显示时,这些值也就显示在相应的控件上。 CDialog类的成员函数OnInitDial转载 2013-09-10 22:53:11 · 1294 阅读 · 0 评论 -
关于WM_CREATE消息
所有窗口都是在注册窗口类之后调用CreateWindowEx来创建的,创建成功之后(HWND有效但CreateWindowEx尚未返回)系统自动发送WM_CREATE消息,所以你的OnCreate将被执行,在这里窗口已经创建成功了,你可以安全地创建各种子窗口。The WM_CREATE message is sent when an application requests that a转载 2013-09-09 10:37:42 · 1178 阅读 · 0 评论 -
MFC为何使用消息映射表而不用虚函数?
这个问题是windows开发面试中最经常问到得问题,也是很有深度的一个问题。有两个帖子对该问题讨论的比较深刻:http://topic.csdn.net/u/20090822/16/4cf5d189-0e5e-41ff-9ba3-c7eaf2f6da74.htmlhttp://topic.csdn.net/u/20090316/22/8b067591-6a17-4970-b224-41转载 2013-09-07 19:50:13 · 934 阅读 · 0 评论 -
MFC的子类化技术
Windows是一个基于消息的系统,消息在Windows的对象之间进行着传递。子类化和Windows的钩子机制存在于消息系统之中,我们可以利用这些机制来操纵、修改甚至丢弃那些在操作系统或是进程中传递的消息,以求改变系统的一些行为。 子类化技术用来截取窗口或控件之间的消息,当然是消息在到达目的窗口之前完成的操作。这些被截获的消息既可以保留也可以修改它们的状态,之后就继续发送到目的地。子类化技术转载 2013-08-30 22:11:39 · 631 阅读 · 0 评论 -
窗口客户区和视图客户区的区别
窗口(框架/frame)的客户区和视图(view)的客户区的区别? 这些都是初学者很容易迷惑的地方,我也是很迷惑,不过经过一番折腾终于弄明白这些问题了.对于这些问题,我想只用两个图片来说明最直观!如下:1,在一个MDI(多文档)应用程序中每个概念如下图所标示:效果如下图1,窗口框架的客户区就是指图中的灰色部分:即蓝色方框内区域,框架的非客户区就是转载 2013-08-26 20:23:57 · 4044 阅读 · 0 评论 -
MFC与.net比较
1,MFC是在API的基础上封装出来的一个类库,给C++程序员在Windows上快速开发用的。.Net类库是在Windows非托管API的基础上封装出来的一个托管类库,给程序员在各种Windows平台上跨平台开发用的。2,只是两个不同平台的编程,一个是NET平台,一个是WIN323,.net的基类是基于.net运行时库的,通过运行时库对操作系统和硬件进行操作,而MFC是直接转载 2013-08-28 13:59:19 · 1079 阅读 · 0 评论 -
Windows消息分类
Windows应用程序都是基于消息驱动的,消息一般分为标准Windows消息、控件、通知消息和命令消息三大类。 1. 标准Windows消息 标准Windows消息,除WM_COMMAND消息外,所有以WM为前缀的消息都是标准Windows消息。标准Windows消息只能由窗口类和视图类进行处理。标准Windows消息都有黙认的处理函数,这些函数在CWnd类中过行了预定义转载 2013-08-19 15:33:51 · 811 阅读 · 0 评论 -
MFC中OnInitDialog与OnSize函数谁先调用
最近做一个项目A,实质上是仿造已有的项目B。但A项目怎么修改,都弹出错误信息。检查了每个文件的代码,都一样。为什么会出现这种问题呢?百思不得其解!后经过排查,发现原来是对话框的属性设置上出了问题。代码为:BOOL CMatchingDlg::OnInitDialog(){ AfxMessageBox("haha OnInitDialog"); CDialog::OnI原创 2013-06-15 17:09:09 · 1858 阅读 · 0 评论 -
vc 消息与事件的区别
事件是一个动作——用户触发的动作。 消息是一个信息——传递给系统的信息。 事件与消息的概念在计算机中较易混淆,但本质不同: 事件由用户(操作电脑的人)触发且只能由用户触发,操作系统能够感觉到由用户触发的事件,并将此事件转换为一个(特定的)消息发送到程序的消息队列中。 这里强调的是: 可以说“用户触发了一个事件”,而不能说“转载 2013-06-04 17:40:38 · 1176 阅读 · 0 评论 -
获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数 .
bool CtestDlg::GetXMLMessage(void) { char cModulePath[MAX_PATH] = {0}; ::GetModuleFileName(NULL, cModulePath, MAX_PATH); ::PathRemoveFileSpec(cModulePath); char cCurrentP转载 2012-11-23 07:20:42 · 1919 阅读 · 0 评论 -
MFC中使用ini文件管理配置项
from:http://blog.sina.com.cn/s/blog_4e0494e00100l1r0.htmlstep 1: 在BOOL CMyApp::InitInstance()中添加如下代码来定义ini文件名:------------------------------------------------------------------------ TCHAR转载 2012-12-20 22:21:46 · 954 阅读 · 0 评论 -
OpenCV+MFC显示图像/视频
http://www.cnblogs.com/Romi/archive/2012/05/07/2487652.htmlOpenCV中文网站上有讲怎么使用OpenCV读入和显示图像和视频图像文件读入和显示:http://www.opencv.org.cn/index.php/%E5%9B%BE%E5%83%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%85%A转载 2012-12-14 16:14:16 · 1778 阅读 · 0 评论 -
InvalidateRect(HWND) 与 ValidateRect(HWND)的区别
InvalidateRect(HWND) 使无效 ValidateRect(HWND)使有效 区别在重绘InvalidateRect(HWND) 使窗口无效 产生消息WM_PAINT; ValidateRect(HWND)使窗口有效 清除消息队列中的WM_PAINT消息 Invalidate() -- RedrawWindow() -- UpdateWind转载 2013-09-04 22:08:48 · 1111 阅读 · 0 评论 -
MFC中OnTimer的应用
OnTimer()函数用于实现定时控制功能,定时控制功能主要由下面三个函数共同实现:SetTimer, KillTimer()和OnTimer().粗略的说,Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontimer是计时器所执行的代码。KillTimer用于停止计时器。或者说Settimer是设置定时器的,Ontimer是响应Settimer消息的。当Se转载 2013-09-04 15:08:56 · 751 阅读 · 0 评论 -
C Runtime Library 的来历
msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能. C Runtime Library 的来历, API, STL, MFC, ATL关系 刚接触Windows开发时,为了快速入门查了不少资料,没想转载 2017-05-24 10:33:03 · 708 阅读 · 0 评论 -
创建和销毁过程几个函数的执行顺序
2009-11-13 13:48 2446人阅读 评论(0) 收藏 举报mfcwindowsdelete工作c框架1:对象生成后 函数执行顺序首先执行 构造函数-> Create->PreSubclassWindow()->OnCreate()->OnInitDialog()Create 创建窗口,发出WM_CREARE消息。 OnCreate 响应WM_CREAR转载 2015-04-24 09:40:38 · 1012 阅读 · 0 评论 -
MFC命名规则
MFC命名规则:Windows类型样本变量MFC类样本变量HWNDhWnd;CWnd*pWnd;HDLGhDlg;CDialog*pDlg;HDChDC;CDC*pDC;转载 2015-02-03 11:00:57 · 808 阅读 · 0 评论 -
MFC Is MVC
关于MVC结构模式无须多言,如下图所示: 在MFC中实现经典的MVC结构,如下图所示:注意:1、Document和View之间的绑定:View绑定到Document。2、Frame作为Controller时,由于可以接收到输入消息,比较适合充当控制器。但是,由于视图和文档绑定,所以在切换视图时需要将视图和文档分离开,然后再进行切换。3、View作为Contrll转载 2014-06-03 14:17:12 · 945 阅读 · 0 评论 -
MFC中ClassWizard的用法
ClassWizard目 录1简介2操作说明3创建新类4添加函数5添加变量6覆盖函数1简介从字面上看,Class是类的意思,而Wizard则是“智者”的意思,两者合起来,ClassWizard的意思就是智能地操作类的工具,通常被称作“类向导”。在Visual C++ 6.0的集成开发环境中,ClassW转载 2013-10-27 12:27:48 · 4205 阅读 · 0 评论 -
MFC中的DDX和DDV
出处:http://m.blog.csdn.net/blog/weiqubo/8179167DoDataExchange由框架调用,作用是交互并且验证对话框数据,主要由(DDX) 和 (DDV)宏实现。 永远不要直接调用这个函数,而是通过UpdateData(TRUE/FALSE)实现控件与变量之间值的传递。 当然你也可以不使用DoDataExchange而完成控件与变量之间值的传转载 2013-10-27 12:35:17 · 1334 阅读 · 0 评论 -
COMMAND 与 UPDATE_COMMAND_UI区别——MFC
UPDATE_COMMAND_UI 处理菜单对应的用户界面 COMMAND 处理该菜单对应的功能 传统SDK程序;要改变选单命令项状态,可以呼叫EnableMenuItem或是 CheckMenuItem,但这使得程序杂乱无章,因为你没有;个固定的位置和固定的原则处理命令项状态。MFC提供;种直觉并且仍旧依赖讯息观念的方式,解决这个问题,这就是U转载 2013-10-19 11:08:58 · 867 阅读 · 0 评论 -
CTreeCtrl 与 CTreeView
CTreeCtrl 与 CTreeViewMFC 提供了两个封装树控件 (Tree Control) 的类:CTreeCtrl 和CTreeView。每类应用于不同的情况。当需要纯子窗口控件时(比如在对话框中),使用 CTreeCtrl 类。如果窗口中还有其他子控件,正如在典型的对话框中那样,这时尤其需要使用CTreeCtrl 类。如果希望树控件 (Tree Control转载 2013-10-18 09:18:33 · 1514 阅读 · 0 评论 -
【转】MFC中的DestroyWindow详解
考虑单窗口情况:假设自己通过new创建了一个窗口对象pWnd,然后pWnd->Create。则销毁窗口的调用次序: 1. 手工调用pWnd->DestroyWindow();2. DestroyWindow会发送WM_DESTROY;3. WM_DESTROY对应的消息处理函数是OnDestroy();4.转载 2013-09-18 08:08:06 · 1353 阅读 · 0 评论 -
MFC框架各部分指针获取方式
获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument 获得CView 在CWinApp中 AfxGetMainWnd() m_pMainWnd AfxGetMainWnd()->MDIGetActive() AfxGetMainWnd()->GetAc原创 2013-09-11 18:15:59 · 1121 阅读 · 0 评论 -
BeginPaint和GetDC有什么区别?(转)
这是个windows编程问题。 第一种情况显示出来的字很正常。 case WM_PAINT: gdc = BeginPaint (hwnd, &ps); TextOut (gdc, 0, 0, s, strlen (s)); EndPaint (hwnd, &ps); break; 第二种情况显示的字不停转载 2013-09-04 23:09:27 · 890 阅读 · 0 评论 -
SDI框架下与MDI框架下应用类的Initstance函数实现不同
**********SDI框架下应用类的Initstance函数实现 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CSDITESTDoc), RUNTIME_CLASS(CMainFrame), // ma原创 2013-09-11 21:38:09 · 881 阅读 · 0 评论 -
GetDlgItem
函数功能返回窗口中指定参数ID的子元素的句柄,可以通过返回的句柄对窗口内的子元素进行操作。编辑本段函数说明根据继承关系,有如下几类:1).CWindow::GetDlgItem HWND GetDlgItem( int nID)const;说明——参数 nID:接收消息的控件的标识;返回值:标识所标记的控制窗口句柄;2).CWnd::GetDlgIt原创 2013-09-12 13:27:12 · 1779 阅读 · 0 评论 -
ASSERT VERIFY TRACE assert
#ifdef NDEBUG#define assert(exp) ((void)0)#else#ifdef __cplusplusextern "C" {#endif_CRTIMP void __cdecl _assert(void *, void *, unsigned);#ifdef __cplusplus}#endif转载 2012-11-25 17:51:58 · 877 阅读 · 0 评论 -
Debug和Release区别
VC下Debug和Release区别最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常。网上查找了些资料,在这 罗列汇总下,做为备忘~一、Debug 和 Release 的区别 Debu转载 2012-11-25 13:46:35 · 855 阅读 · 0 评论 -
CPalette,CBitmap与DIB
CPalette是MFC封装的调色板类。CPalette的操作如下: 1. 创建调色板。要创建一个调色板,需要首先知道要创建的调色板对象所包含的颜色数nColors,然后创建一个逻辑调色板 LOGPALETTE结构,并利用该逻辑调色板结构初始化调色板对象。 UINT nSize=sizeof(LOGPALETTE) + (sizeof(PALETTEENT转载 2012-03-27 17:22:48 · 922 阅读 · 0 评论 -
如何得到句柄和句柄对应的内存
先来看些权威的片断:... typedef unsigned int HANDLE; #define DECLARE_HANDLE(name) typedef UINT name DECLARE_HANDLE(HMODULE); DECLARE_HANDLE(HINSTANCE); DECLARE_HANDLE(HLOCAL); DECLARE_HANDLE(H转载 2012-03-27 14:53:22 · 2625 阅读 · 0 评论 -
LocalAlloc,VirtualAlloc,malloc,new的异同
1. 首先我们来看HeapAlloc:MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的 空间利用起来,从而导致分配失败),该分配方法是从一指定地址开始分配,而不像GloabalAlloc是从全局堆上分配,这个有可能是全局,也有可能是 局部。函数原型为:LPVOIDHeapAlloc(转载 2012-03-27 15:05:52 · 748 阅读 · 0 评论 -
onpaint onprint ondraw区别
对于窗口程序,一般有个特点:窗口大部分的区域保持不变,只有不分区域需要重新绘制。如果将整个窗口全部刷新的画,就做了许多不必要的工作,因而,MFC采用了一套基于无效区的处理机制。在分析无效区处理之前,我们要明白一个现实,现在的机器还不够牛,如果够牛的话,我们干脆将整个窗口不断的重新绘制好了。事实上即使够牛也不行,对于一个单线程程序,通过一个while循环不断的刷新窗口,程序也无法相应其他消息(除非使转载 2012-03-23 14:12:08 · 1115 阅读 · 0 评论 -
cximage
CxImage是一个可以用于MFC 的C++图像处理类库类,它可以打开,保存,显示,转换各种常见格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。可以实现BMPJPG,PNG CxImage不仅可以实现图像文件的类型转换,还可以实现在内存图像数据的类型转换,并且使用很方便。转载 2012-02-14 12:10:18 · 2383 阅读 · 0 评论 -
VC++中list::list的使用方法总结
本文主题 这几天在做图像处理方面的研究,其中有一部分是关于图像分割方面的,图像目标在分割出来之后要做进一步的处理,因此有必要将目标图像的信息保存在一个变量里面,一开始想到的是数组,但是马上就发现使用数组的缺点:数组长度固定,动态分配内存很容易导致错误发生。最重要的一点是我要保存目标图像的每一点的坐标值,使用数组就有点无能为力了。因此到百度、Google大神上面找思路,终于被原创 2012-02-08 22:08:14 · 1905 阅读 · 0 评论 -
stdafx.h
Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。 为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示: ◎AppWizard建立了文件stdafx.h,该文件包含了所有当前工程原创 2011-12-13 20:22:51 · 983 阅读 · 0 评论 -
基于MFC的ActiveX控件开发
ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中。在VC下ActiveX控件的开发可以分为三种,一种是直接用COM的API来开发,这样做显然非常的麻烦,对程序员要求也非常高,因此一般是不予考虑的;一种是基于传统的MFC,采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能。MFC为广大VC程序员所转载 2011-11-10 14:30:37 · 1774 阅读 · 0 评论 -
VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件。(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网上发表相关内容的朋友们。)ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。控件下载一次后就驻留在转载 2011-11-11 16:50:53 · 1331 阅读 · 0 评论