![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MFC知识
文章平均质量分 84
dxy408460910
这个作者很懒,什么都没留下…
展开
-
visual studio 2010编译漏洞
漏洞描述:每次编译都要重新编译部分文件,或者每次编译都需要重新编译所有文件。原因及解决方案:1.时间问题所创建的文件的时间比如是:2011-09-22 09:03:22,那么你的系统时间之前被你改动过当前时间是:2011-08-22 09:03:22。这下好了,vs每次编译的时候都会检查每个文件的最后修改日期,发现是上一个编译时间之后的,都会重新编译。所以在这一个月内,每次都会原创 2015-10-23 15:02:01 · 548 阅读 · 0 评论 -
vc的dll中实现回调函数
在很多编程过程中,我们遇到回调函数的情况很多,无论是一个应用程序内部,还是应用程序与动态库之间,都会经常涉及到回调函数的编程.那么什么是回调函数呢,它的实现机制是什么呢?下面我就简单在这里介绍一下 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你原创 2014-01-11 13:45:39 · 4569 阅读 · 0 评论 -
怎样动态修改CDockablePane上面的工具条CMFCToolBar的信息提示和prompt
CDockablePane上面的工具条CMFCToolBar,怎么加ToolTips(信息提示)或者Prompt(状态栏提示)?原本想加Prompt(状态栏提示)的,但是没法实现。就改用ToolTips(信息提示),但也不行!于是搜索,偶然发现MSDN上有这么一个函数:OnUserToolTip,猜测应该可以实现我所要的效果,于是,重载CMFCToolBar,如下:class CV原创 2013-12-12 14:23:57 · 1485 阅读 · 0 评论 -
工作者线程和界面线程
每个系统都有线程,而线程的最重要的作用就是并行处理,提高软件的并发率。针对界面来说,还能提高界面的响应力。 线程分为界面线程和工作者线程,界面实际就是一个线程画出来的东西,这个线程维护一个“消息队列”,“消息队列”也是界面线程和工作者线程的最大区别,这个词应该进到你的脑子里,根深蒂固的!如果在界面线程的某个地方停住,这说明它处理不了窗口消息了,所以有时候我们就会看到整个界面无响应了。这种问转载 2013-12-01 08:54:04 · 674 阅读 · 0 评论 -
ASSERT(m_pCtrlSite != NULL)
遇到这种问题是很郁闷的,如果碰巧自己正焦头烂额的话,这种问题简直可以让人抓狂。我今天就遇到了这个问题,真是百思不得其解,并且百般调试不得解决,其中当时脑子比较混乱是一大原因。中午吃完饭回来想想,一会儿就解决了。好了,下面说说我的问题的情况以及解决办法。在VS2008的单文档工程里面调用OCX,直接生成了一个一CFormView为基类的类,然后吧OCX控件放在上面,右键,添加原创 2013-11-13 07:50:22 · 3851 阅读 · 0 评论 -
MFC中使用线程创建窗口的问题
在MFC的使用中,遇到了一个问题:1.现象和问题:因为创建窗口较多。所以启动了单独的线程来创建主框架CMainFrame中的子控件。等创建所有的子控件结束后在后续的主框架的OnSize中处理子控件位置时,遇到了断言中断原创 2013-11-13 07:47:33 · 960 阅读 · 0 评论 -
令人吐血的CStringA CStringW wchar_t char转换
CStringA WChar2Char( const wchar_t* wszStr ){ CStringA cStr; if( NULL == wszStr ) { return cStr; } int iSize = ::WideCharToMultiByte( CP_ACP, 0, wszStr, -1, NULL,转载 2013-10-15 15:53:07 · 2856 阅读 · 0 评论 -
发一些CDockablePane 关闭等编程问题
声明:这些程序都是鄙人亲自调试通过,转载敬标注来源于酒天聊博文!1、CDockablePane的关闭见解: MFC提供的Pane关闭可以再事件里面找到: BOOL CMainFrame::OnCloseDockingPane(CDockablePane* pWnd) ; 注释:关闭停靠窗口事件,事实上是隐藏窗体,还是占用资源的 BOOL CMai转载 2013-10-11 16:47:51 · 1717 阅读 · 0 评论 -
MFC文档、视图、框架的建立
MFC文档、视图、框架的建立文档将描述MFC框架程序中WinApp , Document Templates, Document, View , Frame创建和所有关系。CWinApp在一个系统程序中只有一个CWinApp对象,该对象会被静态的创建并在MFC框架内部实现的WinMain()中进行初始化(动态链接库程序中不会包含一个CWinApp实例且程序的初始化是在DllMain转载 2013-09-24 17:55:43 · 615 阅读 · 0 评论 -
VC获取操作系统特殊路径的方法
BOOL SHGetSpecialFolderPath ( HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate);hwndOwner :用GetDesktopWindow API取一个窗口句柄。lpszPath:返回的路径nFolder:标识代号fCreate:true :如果文件夹不存在则创建,false:不创原创 2013-09-24 14:23:33 · 558 阅读 · 0 评论 -
VC6升级到VC9,线程中自定义消息的升级方法
在将VC6的工程升级到VC9时,碰到了一个问题,就是线程中的自定义消息总是提示如下错误:无法从“LRESULT (__thiscall CAISDataRecvThread::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”从提示来看,是CAISDataRecvThread的线程子类无法转换为CWnd*转载 2013-09-18 16:40:49 · 677 阅读 · 0 评论 -
char,CHAR,TCHAR,LPSTR,LPCSTR,WCHAR ,CString
char是C语言标准数据类型,字符型,至于由几个字节组成通常由编译器决定,一般一个字节。Windows为了消除各编译器的差别,重新定义了一些数据类型。CHAR为单字节字符。还有个WCHAR为Unicode字符,即不论中英文,每个字有两个字节组成。如果当前编译方式为ANSI(默认)方式,TCHAR等价于CHAR,如果为Unicode方式,TCHAR等价于WCHAR。LPCSTR 相当于CONST C转载 2013-09-11 14:20:58 · 1144 阅读 · 0 评论 -
VC2010 如何根据ID查找Ribbon的元素
在VC2010中,如果要获取Ribbon中的某个控件的指针的话,用GetDlgItem函数行不通,我试了很久都不行,最后查了MSDN,发现,用FindByID(nID)可以搞定。例如,如果要改变Ribbon上的一个按钮(按钮ID为 ID_BUTTON1)上显示的字符,这样就行:CMFCRibbonBaseElement* pElement = m_wndRibbonBar.Find原创 2013-08-30 10:43:38 · 1212 阅读 · 0 评论 -
VC++ MFC实现加速键
首先在资源编辑器中创建一个加速键表,在类中添加一个HACCEL类型的成员变量hAccel然后在OnInitDialog函数中加载加速键表hAccel = LoadAccelerators(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));其中IDR_ACCELRATOR1为加速键的ID使用ClassWizard类原创 2013-08-29 10:13:55 · 720 阅读 · 0 评论 -
VC++加速键的加入方法
一种是直接与菜单项关联的加速键 另一种就是自定义的加速键. 第一种: (如果是基于对话框的工程,我们先添加菜单和加速键资源,然后右击主对话框属性添加菜单)首先在资源文件Accelerator中添加快捷键资源 ID选择你要关联菜单项的名称 然后再设置你的快捷键.什么?下一步?在.h文件中加入一个 HACCEL hAccel;变量 然后在OnInitDialog或初原创 2013-08-29 09:53:52 · 1958 阅读 · 0 评论 -
VC多个MRU菜单的问题
问:我想象DevStudio97那样将不同文档类型的MRU子菜单分开,如分成最近的工作区和最近打开的文件.我在CodeGuru上找了找,但没有什么收获. 答:这是可以解决的.我保留了CRecentFileList对象,让MFC框架去管理默认的文档类型,然后加入了对第二种文档类型的处理,我准备一步一步说明这个问题: 使用自定义的菜单ID,如ID_FILE_MRU_MYFILE1,你也应该原创 2013-08-28 16:35:27 · 802 阅读 · 0 评论 -
VC中实现按钮提示,使用CToolTipCtrl实现
1. 在这个对话框的定义部分添加黑体部分: class CMyDlg : public CDialog { …… CToolTipCtrl m_tt; //添加+++ …… } 2. 在这个对话框的OnInitDialog()函数里,添加黑体部分: BOOL CMyDlg::OnInitDialog() { …… EnableT原创 2014-01-15 11:10:43 · 812 阅读 · 0 评论 -
CListCtrl使用技巧
以下未经说明,listctrl默认view 风格为report1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观的理解:windo转载 2014-01-15 11:34:33 · 488 阅读 · 0 评论 -
为对话框设计美观的工具栏 (Add toolbar for CDialog)
本文介绍,在CDialog下工具栏的实现和优化 1. 为CDialog添加工具栏 2. 使toolbar以多行显示 3. 为toolbar添加提示信息(TipText) 4. VC6下显示包含多彩色图片的工具栏 一. 为CDialog添加工具栏 首先需要建立相应的TOOLBAR资源 将工具栏按钮摆放好,将相应的提示信息(TipText)写入,最好也将相应转载 2015-03-10 17:29:29 · 745 阅读 · 0 评论 -
VC++2010在CMFCToolBar工具栏中加入组合框
如何在CMFCToolBar工具栏中加入组合框等控件,且先看在线MSDN上怎么说的:To add a combo box button to a toolbar, follow these steps:1. Reserve a dummy resource ID for the button in the parent toolbar resource.2. Constru原创 2015-03-11 10:24:09 · 584 阅读 · 0 评论 -
VS2010调试时出现“0x7556d36f 处最可能的异常: 0x000006BA: RPC 服务器不可用”的解决方法
现象:1、在使用Visual Studio 2010 c++调试程序时,无法使用文件对话框打开文件,只要执行打开文件对话框,就报“0x7556d36f 处最可能的异常: 0x000006BA: RPC 服务器不可用”的错误。 2、不使用调试模式的时候,不会报这样的错误;解决方法:之前由于调试需要将调试菜单中的异常都打上勾,将勾都去掉,问题解决原创 2015-03-04 15:39:08 · 11812 阅读 · 2 评论 -
关于pragma pack的用法C++中的内存对齐问题
首先请大家先看下面代码:typedef struct{UINT32 NumElements;union{UINT32 ObjectHandle;}Entry;}STR_ARRAY, *PSTR_ARRAY;还有这两句#pragma pack(push, 1)#pragma pack(pop)#pragma pack( [ n ] )该指令指定结构和联原创 2014-06-16 15:37:10 · 548 阅读 · 0 评论 -
COM组件的使用注意事项
在线程中使用CreateDispatch()函数会无法原创 2014-05-27 17:09:18 · 530 阅读 · 0 评论 -
VC++得到任务栏的高度和位置的方法
1.判断位置SystemParametersInfo(SPI_GETWORKAREA, 0, &rt, 0) //任务栏在下面的高度 int y = ::GetSystemMetrics(SM_CYSCREEN)-rt.Height(); 上面 int y = rt.top; 左 int y = r转载 2014-06-05 11:37:18 · 3856 阅读 · 0 评论 -
C/C++定义全局变量/常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念:1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌入式下做开发工作的话,那么你可能非常转载 2014-05-11 15:28:12 · 428 阅读 · 0 评论 -
String,CString,TCHAR*,char*之间区别和联系
最近老用到Cstring, TCHAR*, char*的转换. 找到一篇写得蛮详细的. 引用过来, 方便自己以后查阅. char是类型TCHAR也是!不过他可以通过是否定义了UNICODE宏来判断到底是char还是w_char; TCHAR是一种字符串类型,它让你在以MBCS和UNNICODE来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码,而char代转载 2014-05-09 15:36:24 · 864 阅读 · 0 评论 -
文档/视图结构中的各个部分的关系
#define DECLARE_DYNCREATE(class_name) \DECLARE_DYNAMIC(class_name) \static CObject* PASCAL CreateObject(); 文档/视图结构是MFC中最有特色而又有难度的部分,在这当中涉及了应用、文档模板、文档、视图、MDI框架窗口、MDI子窗口等不同的对象,如果不了解这些部分之间如何关联的话,就可原创 2014-04-08 15:28:20 · 892 阅读 · 0 评论 -
MFC 为同一个文档创建不同视图
// CMainFrame message handlers////MDI架构下,为一个document创建多个视图的方法,既是同一个document的不同view的表现形式//int CMainFrame::CreateNewView(UINT nIDResource,CRuntimeClass* pFrameClass,CRuntimeClass* pViewClass,CDo原创 2014-04-08 11:40:32 · 1271 阅读 · 0 评论 -
VC MFC SDI/MDI框架各部分指针获取方式
VC MFC SDI/MDI框架各部分指针获取方式VC MFC SDI/MDI框架各部分指针获取方式来源: 编辑:中国人才库 更新日期:2008-6-14 浏览:531前人在CSDN总结的,曾经帮助过我,整理总结一下,希望也能帮助一下别人。 获得CWinApp 获得CMainFrame 获得CChildFram原创 2014-04-08 10:28:09 · 527 阅读 · 0 评论 -
VC单文档实现多视图的方法
多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视图,这种技术实现起来比较简单,并多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视转载 2014-04-03 17:23:40 · 511 阅读 · 0 评论 -
C++中百分号的表示
printf系列格式化函数的第一个参数中,百分号必须用“%%”表示,因为单个百分号已经有了特殊含义;而在普通字符串中,百分号直接用“%”表示即可,“\%”虽然语法中没有提及,但在VC环境下也没有问题(其它编译器没有测试过),“%%”表示两个百分号原创 2014-02-10 16:01:06 · 20468 阅读 · 0 评论 -
CMFCBUTTON使用过程中发生内存泄露
具体的发现过程是:打开vs2010,新建一个对话框工程,什么都不做,运行,推出的时候看不到内存泄露,但是当你拖一个mfc button到对话框上时,运行程序,推出的时候会看到发生了内存泄露。现在还不知道什么原因。具体的原因呢是这样的,首先我们应该从VS2010提供的一些新类,比如CMFCBUTTON的创建过程着手分析。在CDialog::OnInitDialog()的执行过程中,会原创 2014-01-16 17:13:00 · 1072 阅读 · 0 评论 -
ULONGLONG与CString, double之间的转换
1、ULONGLONG转CStringCString.Format(_T("%I64d"), );另外,C函数库里有_ui64toa和_ui64tow函数可以把int64转换成C字符串,到C字符串了,你就可以直接赋值给CString了2、CString转ULONGLONG__int64 iadf;_stscanf(mycstring.GetString(), _T("%I64原创 2014-01-15 17:45:21 · 4004 阅读 · 0 评论 -
多标签视图类CTabView的设计实现
在MFC9(在vc2008和vc2010中,已经有了CTabView的现成类)以前的版本中,有CListView,CTreeView,CEditView,CRichEditView等控件视图类,但就是没有类似的CTabView类,因工作需要,最近在做一个简单的多标签IE浏览器,开发环境是vs2005,基本框架是sdi + chtmlview + ctabview,因此自行封装实现了CTabVi原创 2013-08-16 16:22:54 · 1572 阅读 · 0 评论 -
VC 界面窗口,静态分割后如何锁定分隔条或限制分隔条的移动范围
锁定分隔条,其中一种方法是直接截获一个消息,我们知道,其实 CsplitterWnd 是从CWnd 派生出来的,所以其实很容易截获Window的消息,在这里我们应该关注的其实仅仅只有一个消息WM_NCHITTEST ,其作用大致就是当你的鼠标在这个划分出的区域中移动时为CWnd捕捉你的鼠标输入的,所以,换言之,如果我们截获了这个消息,直接返回为HTNOWHERE(参考MSDN),那么当你的鼠标停留原创 2013-08-27 14:29:05 · 1209 阅读 · 0 评论 -
MFC窗口分割类CSpliterWnd分割窗口
一、关于CSplitterWnd类 我们在使用CuteFtp或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割。 那么我们自己如何创建类似的界面,也实现窗口的任意的分割呢 ?在VC6.0中这就需要使用到CSplitterWnd类。CSplitterWnd看上去像是一种特殊的框架窗口,每个窗口都被相同的或者不转载 2013-08-15 11:41:54 · 4258 阅读 · 1 评论 -
在工具栏Toolbar上添加常用控件的编程思路和示例
工具条作为大多数标准的Windows应用程序的一个重要组成部分,使其成为促进人机界面友好的一个重要工具。通过工具条极大方便了用户对程序的操作,但是在由Microsoft Visual C++开发环境所创建的应用程序框架中的工具条只是一个简单的按钮的集合,在功能上也仅仅是起到了菜单快捷方式的作用,而没有做到象VC、Word等软件的工具条那样,提供多种不同类型的标准控件如组合框、编辑框等。尤其是组合框原创 2013-06-07 16:40:14 · 1784 阅读 · 0 评论 -
VC实现工具栏上的下拉列表
我们在使用IE6.0时,发现后退和前进后面均有个下拉箭头,点击这些下拉列表就会弹出一些历史链接地址。这种效果我们用VC如何实现呢? 我们可以分为几步来做。 第一步.新建一个Single型的MFC工程。在MainFrame.cpp中的OnCreate()的return 0前加入如下代码; DWORD dwExStyle = TBSTYLE_EX_DRAWDDARROWS原创 2013-06-07 16:44:16 · 1364 阅读 · 0 评论 -
COM中使用的数组-SafeArray
1 使用SafeArraySafeArray是VB中的数组存储方式。通过SafeArray,可以在VC++和VB间相互调用。SafeArray也是Automation中的标准数组存储方式。1.1 SafeArray处理函数COM提供了一套API用于处理SafeArray。为了保证程序和SafeArray结构无关,程序中建立、读取、更改和释放SafeArray都应该通过原创 2013-05-13 17:40:22 · 1201 阅读 · 0 评论 -
ActiveX 控件注册的几种方法
ActiveX 控件是一个动态链接库,是作为基于COM 服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX 控件的前身就是OLE 控件。由于ActiveX 控件与开发平台无关,因此,在一种编程语言上开发的ActiveX 控件可以无须作任何修改,即可在另一种编程语言中使用,其效果如同使用Windows 通用控件一样。如:在VC ++中开发的ActiveX 控件,不作任何修改即可应用原创 2013-05-11 14:53:58 · 857 阅读 · 0 评论