摘要:如果使用VC编写DLL时,需要MFC功能; 一般在源文件里就不能手动写DLLMAIN函数了它给MFC集成了,\src\mfc\dllmodule.cpp打开它,里面有有一个DLLMAIN函数,根据源码意思就可以看出来,这里截取的一点点代码if (dwReason == DLL_PROCESS_ATTACH) { BOOL bResult = FALSE;#ifdef _AFXDLL // wire up resources from core DLL AfxCoreInitModule();#endif _AFX_THREAD_STATE* pState = AfxGetThreadS...
阅读全文
12 2013 档案
摘要:第一部分:API函数简介1.SetWindowsHookEx函数函数原型HHOOKSetWindowsHookEx(int idHook, // hook type HOOKPROC lpfn, // hook procedure HINSTANCE hMod, // handle to application instance DWORD dwThreadId // thread identifier);函数功能:该函数将一个应用程序定义的挂钩处理过程安装到挂钩链中去,您可以通过安装挂钩处理过程来对系统的某些类型事件进行监控,这些事件与某个特定的线程或系统中的所有事件相关.具体参数详见MSD
阅读全文
摘要:1、对于模态对话框而言,单击确定以后对话框窗口对象即被销毁了,而对于非模态对话框来说,对话框的对象并未销毁而是隐藏起来(EndDialog函数),因此对于非模态对话框,必须重写OnOK这个虚函数,并在重写的函数中调用DestroyWindow函数,以完成销毁对话框的工作,同时注意不要再调用基类的OnOK函数。2、当一个类从一个基类公有继承时,基类中的公有成员就如同派生类中定义的公有成员一样,这一点用sizeof函数就可以很明显的看出来。所以派生类对基类成员修改时,并不影响基类成员本身。3、对静态文本控件,如果需要让其响应鼠标的按键操作时,必须将其ID改掉,因为其默认是不响应鼠标单击等消息的,并
阅读全文
摘要:Group就其意思就是一组的意思。就是说用于选择多个控件组合,选了TRUE后,你就可以为这组新建一个变量。把一组控件当一个控件来使用。例如多个单选按钮用group属性,这样你就可以用一个变量来管理这些按钮,例如获得当前选项什么的。单选按钮在没有设置Group属性时,在右击添加变量时中看不到按钮控件的ID号,设置了Group属性后就可以看到ID号并能设置变量。Group属性是用来对单选按钮进行成组设置的。设置Group属性的Radio是本组的第一个,ID大于本Radio ID的Radio都是本组的radio(但是小于另一个设置Group属性的Radio ID)。一个组只能设置一个控件变量。组内的
阅读全文
摘要:1、在窗口创建前修改窗体外观 在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)函数中修改,其中CREATESTRUCT结构中有诸如窗口大小和标题等的修改,这里注意的是如果要修改标题的话,需要修改CREATESTRUCT style &= ~FWS_ADDTOTITLE,不让默认的文档标题添加到窗口标题上。 在窗口创建后修改窗体外观 就在OnCreate函数里修改,SetWindowLong(m_hWnd, GWL_STYLE, GetWindowLong(m_hWnd, GWL_STYLE) & ~WS_MAXIMI
阅读全文
摘要:1、添加#include 或者这时会报错1>c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]解决方法,点击项目属性,然后配置属性、常规,然后右边有个“项目默认值”,下面有个MFC
阅读全文
摘要:源博客:http://www.codeproject.com/Articles/9350/2D-Animated-Charts源代码:http://download.csdn.net/detail/nuptboyzhb/4202051简介:CGraphObject是由CWnd类派生出来,因此,CGraphObject类是一个窗口类;即,每个图表都是一个窗口;因此,每一个图表的创建,应该放在OnCreate函数或OnInitialUpdate函数中;其应用过程,与窗口类型的控件(如CButton)非常类似;应用:1.将相关的.h和.cpp文件复制到工程目录中,并载入到工程;[GraphObjec
阅读全文
摘要:微软的画图程序中画直线时,会有画线提示,形象的说就像“橡皮筋”一样,在未最终确定直线的长度和角度前都会有一根类似“橡皮筋”的直线,便于客户可以方便的画出理想的直线,具体实现方法如下:void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){m_bDraw = true;m_ptOrigin = point;m_ptEnd = point;CView::OnLButtonDown(nFlags, point);}void CDrawView::OnMouseMove(UINT nFlags, CPoint point){if(m_bDraw
阅读全文
摘要:在客户区画直线等图形时, 发现当其最小化或者其他窗口遮挡时,出现窗口重绘,而将原来绘制的图形删除,上网上搜索知道,绘制图形的代码必须放置在Ondraw函数中,才能避免重绘时图形消失(因为一直在响应WM_PAINT消息,不断的重绘),但是这样做却只能保存最近的一次绘图,只适用于单幅固定的图形,对于其中有多幅图形就不能这么做了,解决的思路是:考虑到MFC时 文档/视图 类,视图CView负责数据的显示和修改,文档CDocument类负责数据的存储和加载,从而把数据管理和显示方法分离开来。我们在CDocument类中添加一个CBitMap对象,将每次中间绘图时的客户区的内容保存成BitMap,当所有
阅读全文
摘要:会使用工具是人类文明的一大进步,今天敏捷大行其道,好的工具可以大大的提高生产力,这里说的工具都是VS平台上的扩展工具,一些机械的部分可以交给工具去处理,自己多关注其他部分。下面分享下我觉得不错的工具,很多也是同事推荐给我的。一、NuGet :组件管理神器用了VS,NuGet都没装,你可以去面壁去了。它为我们提供了丰富的组件库,下载,安装,引用,瞬间完成。如果你还是先下下来,安装,再浏览式的引用到工程,那太慢了。而且下次要找都不知道丢哪儿了。NuGet 将组件安装到具体工程:引用之后,会有一个package.config的文件,记录你在当前工程下,你用Nuget安装的组件:View Code在工
阅读全文
摘要:本文转载自:http://hi.baidu.com/xiaocuiman/blog/item/6e267c2bc4b1883f5243c108.html1.对OpenCV的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法;然后将图像格式和矩阵运算,然后将各个算法的实现函数。我用它来做了一个Harris角点检测器和Canny边缘检测器,总共就花了一个小时(第一次用OpenCV)。而且该库显示图像极其方便,两句话就可以。但该库似乎不大稳定,对32F和16S、8U的图像数据支持上bug重重。我用 cv
阅读全文
摘要:在codeproject发现一个很强大的按钮皮肤类,之前的版本有内存泄露,但是作者已经修复了,原文网址是:http://www.codeproject.com/KB/buttons/cxskinbutton.aspx。它支持六种位图,分别是正常、按下、滑过、失效、焦点和遮掩位图。根据原文内容,一般用法如下:1.加入xSkinButton.cpp 和xSkinButton.h 到工程;2.在按钮控件需要定义的地方加入xSkinButton.h头文件;3.为按钮添加一个CxSkinButton类型的变量;4,在资源视图添加所需要的位图:NORMAL bitmap: 默认按钮图片.DOWN bitm
阅读全文
摘要:我们知道VS2008SP1之后,MFC就多了一个功能包,可以快速的建立一个ribbon的界面,视觉样式可以在office 2007蓝、黑等颜色之间切换,这对于单文档/多文档做界面非常方便,而且也蛮好看的。但是,引入的功能包不对对话框进行界面美化,除了多一些控件外,外观没变。于是就想能不能利用单文档的CFormView来模拟对话框,进行自己来实现对话框的美化呢,下面以单文档为例:1.单文档 ,“项目类型”选择Visual Studio 视觉样式和颜色 选择office2007 (蓝色主题);2.用户界面功能,选中“使用菜单栏和工具栏”;3.高级功能里面,所有的“高级框架窗格”都不要选择;4.生成
阅读全文
摘要:在用VC做有关图表的时候,感觉不是那么方便,在codeproject找到一个柱形图的实用类,原文地址为:http://www.codeproject.com/KB/miscctrl/CBarChart.aspx。它可以很快速的生成柱状图,并且支持输出位图、支持打印、支持从数据库导入。原文章的类为多字节的,我自己改为了可适应多字节和Unicode版本的,如果有错的话,还请使用原文章所给出的源码。下面介绍下基本步骤:1.添加BarChart.cpp和BarChart.h工程;2.在需要使用的地方添加头文件#include"BarChart.h"3.定义一个CBarChart的变
阅读全文
摘要:有时候,我们需要在列表框ListBox中插入带图标的文字项,这就需要自己派生一个类出来了,网上的一个CIconListBox类还不错,网站http://www.codeguru.com/Cpp/controls/listbox/article.php/c4749/这里介绍下使用方法,源代码我有改动,环境Visual Studio 2008 SP1:1.基于对话框的工程,名称为IconListBoxTest;2.拖动控件到对话框上,按下图所示排列:3.导入IconListBox.cpp和IconListBox.h两个文件到工程,在对话框头文件包含#include"IconListBox
阅读全文
摘要:SonicUI是一个GUI引擎,提供了一些简单的UI组件实现高效率的UI效果,例如:自绘按钮、异形窗体、动画、超链接和图像操作方法。此项目作者开源到CodeProject,地址为:http://www.codeproject.com/KB/GDI/SonicUI.aspx。下载源代码编译动态库版本和静态库版本,在此我以Visual Studio 2008 SP1编译,也打包到下面的下载地址里面。下面介绍下SonicUI在MFC中的使用,如果有错误之处,还请指出。1.新建一个基于对话框、使用Unicode库的工程,工程名称SonicUITest;2.复制ISonicUI.h文件到工程目录下,添加
阅读全文
摘要:Cppcheck是一个C/C++代码分析工具,只检测那些编译器通常无法检测到的bug类型。官方上建议让编译器提供尽量多的警告提示:1.使用Visual C++的话,应使用警告等级42.使用GCC的话,参看Warning options - using GCC官方地址:http://cppcheck.sourceforge.net/当前版本:1.54 for windows安装界面如下:安装完后,双击cppcheckgui.exe启动其GUI程序:工具栏第一个按钮可以添加检测的目录,但是这里不支持中文路径。测试官方的例子,新建一个文件file1.c,内容如下:intmain(){chara[10
阅读全文
摘要:Visual Leak Detector是一款免费的、健全的、开源的Visual C++内存泄露检测系统。相比Visual C++自带的内存检测机制,Visual Leak Detector可以显示导致内存泄露的完整内存分配调用堆栈。主页地址:http://vld.codeplex.com/旧版地址:http://www.codeproject.com/Articles/9815/Visual-Leak-Detector-Enhanced-Memory-Leak-Detectio 下载Visual Leak Detector,当前版本2.2.3,在Visual C++ IDE的"工具
阅读全文
摘要:分类:2.4 线程/图形学2010-04-30 22:141878人阅读评论(0)收藏举报文档null这是一个绘制直线的简单绘图程序,能过实现动态轨迹画线,在拖动时产生临时线来表示可能画出的直线效果。首先:建立一个单文档程序,名称为Demo然后:在视图类的声明文件里面加入数据成员classCDemoView:publicCView{//········protected:intm_Dragging;HCURSORm_HCross;CPointm_PointOld;CPointm_PointOrigin;//
阅读全文
摘要:工作线程通常用来执行一些后台任务,如:数据计算、后台杀毒等等。因为不需要创建窗口和处理用户消息,编写比较容易,在程序中只要调用AfxBeginThread函数就可以创建并启动一个工作线程了。AfxBeginThread的原型如下:CWinThread*AfxBeginThread(AFX_THREADPROCpfnThreadProc, //指向控制函数的地址LPVOIDpParam, //指向传递给控制函数的参数intnPriority/*=THREAD_PRIORITY_NORMAL*/, //指定线程的优先级UINTnStackSize/*=0*/, //指定堆...
阅读全文
摘要:用户界面线程在运行时会有一个窗口界面和与其相对应的窗口函数,所以它可以通过响应消息来和用户进行交互。AfxBeginThread函数原型如下:CWinThread*AfxBeginThread(CRuntimeClass*pThreadClass,//从CWinThread派生的RUNTIME_CLASS类intnPriority/*=THREAD_PRIORITY_NORMAL*/,//指定线程的优先级UINTnStackSize/*=0*/,//定义新线程的堆栈大小DWORDdwCreateFlags/*=0*/,//为控制线程创建的附加标志LPSECURITY_ATTRIBUTESlpS
阅读全文
摘要:系统环境:Windows 7软件环境:Visual Studio 2008 SP1本次目的:建立一个CDialogEx的对话框 我们知道在VS2008SP1引进了BCG第三方控件,可以使MFC界面编程容易些,但是关于这方面的资料并不多。可能是我使用的系统因素,在建立对话框时,选择“生成的类”基于CDialogEx后,发现代码并没有把创建的对话框派生CDialogEx,而还是派生自CDialog。所以我们只能手动改之。对于一个新建立的对话框,这里我建立的名字为Test工程,我们开始进行以下步骤:1. 在TestDlg.h中,修改以下地方:class CTestDlg : publicCDialo
阅读全文
摘要:系统环境:Windows 7软件环境:Visual Studio 2008 SP1本次目的:在模态或非模态对话框中使用Tab Control控件,及引申在单/多文档中使用查阅MSDN文档,对于创建Tab Control控件,MSDN上说明如下:To useCTabCtrldirectly in a dialog box1.In the dialog editor, add a Tab Control to your dialog template resource. Specify its control ID.2.Use the Add Member Variable Wizard to a
阅读全文
摘要:操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:实现无框移动 所谓的无标题栏对话框,是基于对话框的工程,对话框属性Border设置为None,对话框如下所示:为对话框添加左键点击事件,代码如下:[cpp]view plaincopy voidCPlayerDlg::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:在此添加消息处理程序代码和/或调用默认值SendMessage(WM_SYSCOMMAND,0xF012,0);CDialog::OnLButtonDown(nFlags,point);}完成后,就可以拉动
阅读全文
摘要:操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为静态控件添加事件,如:STATIC、Picture Control等等 有时候我们找到一个图片,为对话框背景添加了图片,我们需要在某个位置令其可以单击,如下两图所示:首先:修改静态控件属性Notify为True,修改控件ID号,一定要修改,在这里我改为IDC_RIGHT,右键为静态控件添加左键单击事件,在这里我在代码里面添加了弹出消息对话框以作测试,效果如下:虽然不是动态的按钮,但是效果蛮不错的。
阅读全文
摘要:操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为滑动控件设置背景透明 经常在编写有背景的程序时,滑动控件Slider Control看起来与背景十分不合,我们可以从CSliderCtrl派生自己的类出来,以实现这个功能。下面是效果图:所参考的资料来自:http://dev.yesky.com/179/2284679.shtml派生类下载:http://download.csdn.net/source/1851812使用时,添加滑动控件后,为其添加控件变量,然后将其改为如下:[cpp]view plaincopy CmySliderControlm_sli
阅读全文
摘要:系统环境:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为对话框设置背景颜色、控件颜色 既然MFC对话框不好开发,那么现在我们来开始美化我们的对话框。为对话框设置背景颜色、控件颜色等等。对话框背景颜色:网上流传有四种方法(可能还不止),在VC++2008SP1测试后,发现只有三种可以使用了,其中第一种被废弃了。以下是四种方法:方法一(失效):调用CWinApp类的成员函数SetDialogBkColor来实现。 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对 话框设置为蓝色背景和红色文本,步骤如下: ① 新建一个基于Dial
阅读全文
摘要:Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。 Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。但Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。boost 在一些播放软件和音效中指增强,比如Bass Boost,低音增强。1.下载最新版的BOOST库,当前最新版为
阅读全文
摘要:这下有了CImage类,处理其他类型的图片不再寻找第三方类库了。加载到对话框背景的代码如下: //从资源里载入背景JPEG图片 HRSRC hRsrc=::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_JPG1), _T("JPG")); if(hRsrc!=NULL) { HGLOBAL hImgData=::LoadResource(AfxGetResourceHandle(),hRsrc); if(hImgData==NULL) ...
阅读全文
摘要:系统环境:Windows 7软件环境:Visual Studio 2008 SP1本次目的:实现VC单文档、对话框程序显示图片效果CImage是VC.NET中定义的一种MFC/ATL共享类,也是ATL的一种工具类,它提供增强型的(DDB和DIB)位图支持,可以装入、显示、转换和保存多种格式的图像文件,包括BMP、GIF、JPG、PNG、TIF等。CImage是一个独立的类,没有基类。(CImage类是基于GDI+的,从VC.NET起引进,VC 6.0中没有。)ATL(Active Template Library,活动模板库)是一套基于模板的 C++ 类,用以简化小而快的COM对象的编写。为了
阅读全文
摘要:1、项目开发环境:VS2008,QT4.72、项目的目录:1)PETCT是解决方案名字2)Bin目录存放所有动态链接库和执行档,包括自己的产出和第三方库,区分Release和Debug两个版本。另外,程序运行过程中需要外部的数据文件和启动时需要的配置文件等等都可放于该目录3)ConsoleSubsytem是应用项目目录4)Include用于存放第三方库的头文件5)Lib目录用于存放导入库或者静态库(包括第三方库和自己的项目)6)Temp用于存放临时生成文件,其中Compile存放编译器编译时生成的obj文件,Link存放链接器的输出文件。7)TestDll是动态链接库项目目录,该项目会生成相关
阅读全文
摘要:VC 2005 解决方案的目录结构设置和管理Roger (roger2yi@gmail.com)一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档。除此以外,根据项目的需求,还会使用一些第三方的库。所以为解决方案设置一个合理的目录结构,不但可以使得代码管理更井井有条,项目成员之间也更容易相互配合,更重要的是能够使得最终应用程序的安装包制作,源代码打包发布和转移变得十分容易。解决方案与项目:从VC6之后VC系列就使用解决方案(Solution)来替代原来的工作空间,用于组织和管理多个相关的项目(Project)。文
阅读全文
摘要:isual C++ 使用解决方案来管理项目,项目之间还可能有依赖关系,设置适合自己的解决方案目录结构,便于代码的管理、程序的发布。下面开始一个虚拟解决方案设计: 假设此解决方案有应用程序项目A,动态链接库项目B,静态链接库项目C,其中项目A依赖项目B和项目C,则构建解决方案项目结构如下图所示:而目录结构则如下图所示:Bin:存放所有动态链接库和可执行程序,分Debug和Release两个版本A:应用程序项目文件夹B:动态链接库项目文件夹C:静态链接库项目文件夹Doc:存放项目文档Include:存放引用库的头文件Lib:存放动态链接库的导入库、静态链接库Temp:存放临时生成文件,其中C...
阅读全文
摘要:瑞蓝网络数字视频解码矩阵(简称RL-NDVM)是依据第三代开放式网络视频监控系统的实际需求,专为视频上墙显示而研制的一款新型数字解码上墙设备。RL-NDVM解码矩阵是集解码器和HDMI/DVI/VGA切换矩阵功能于一身,可将前端的信号源(如:计算机屏幕显示信息、IP网络摄像机、NVR、DVR、DVS
阅读全文
摘要:一个类可以只有声明没有定义,如:classSimple ; //没有
阅读全文
摘要:1.模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(intx,inty);{return(x>y)?x:y ;}//函数2.float max(floatx,floaty){return (x>y)? x:y ;}//函数3.double max(doublex,doubley){return (c>y)? x:y ;}但如果在主函数中,我们分别
阅读全文
摘要:1.引用计数算法 引用计数(Reference Counting)算法是每个对象计算指向它的指针的数量,当有一个指针指向自己时计数值加1;当删除一个指向自己的指针时,计数值减1,如果计数值减为0,说明已经不存在指向该对象的指针了,所以它可以被安全的销毁了。可以很直观的用下面的图表示: 引用计数算法的优点在于内存管理的开销分布于整个应用程序运行期间,非常的“平滑”,无需挂起应用程序的运行来做垃圾回收;而它的另外一个优势在于空间上的引用局部性比较好,当某个对象的引用计数值变为0时,系统无需访问位于堆中其他页面的单元,而后面我们将要看到的几种垃圾回收算法在回收前都回遍历所有的存活单元,这可能会引起换
阅读全文
摘要:remberthisstrncpy(a,b,5);a[5]='\0';chara[10];memset(a,'#',sizeof(a));a[10]='\0';刚开始学C/C++时,一直对字符串处理函数一知半解,这里列举C/C++字符串处理函数,希望对初学者有一定的帮助。C:charst[100];1.字符串长度strlen(st);2.字符串比较strcmp(st1,st2);strncmp(st1,st2,n);把st1,st2的前n个进行比较。3.附加strcat(st1,st2);strncat(st1,st2,n);n表示连接上st2的
阅读全文
摘要:充分的利用调试工具可以非常方便地避免内存泄漏问题。 这里介绍两种方法,互为补充,第一种是VC编译器提供的方法,第二种是专用的内存泄漏检查工具Memmory Validator。这两种方法的基本原理是一样的:内存分配要通过CRT在运行时实现,只要在分配内存和释放内存时分别做好记录,程序结束时对比分配内存和释放内存的记录就可以确定是不是有内存泄漏。其中,第一种方法重载了new操作符,第二种方法是替换了CRT运行时库,在用户程序与运行库之间加了一层,用于记录内存分配情况。两种方法的不同是前者是在编译时完成的,分析内存情况的代码编译到执行文件中,用于程序的debug版本,后一种对编译过程没有影响,在执
阅读全文
摘要:如果我们不十分清楚需要什么样的界面风格及如何实现,请按以下两个步骤操作: (1) 搞清楚这种风格叫什么名字(2) 查现有的比较著名的GUI库是否已有相应的实现方案。(3) 目前本文收集的信息涉及Qt,MFC,wxWidget简介本文收集有关界面开发的类库,不断更新。开发库分类QtQt用Qt的界面库开发的界面,注意Ribbon风格在Qt中是非常容易实现的,这个界面很可能是Ribbon风格流行前就已做好的,在Qt的框架中,Ribbon只是一个Tab页加一些动效果。Qxthttp://libqxt.org/一组对Qt的扩展Developer Machines公司http://www.devmachi
阅读全文
摘要:一切尽在代码中。#include #include #include using namespace std ;int main(void) { map m ; m.insert(pair(1, "abc")) ; m.insert(pair(2, "def")) ; m.insert(pair(3, "def")) ; m.insert(pair(4, "ghi")) ; map::iterator itor ; // 错误的写法 for (itor = m.begin(); itor != m.end(); +
阅读全文
摘要:查找并指定符号文件和源文件;指定符号加载行为、使用符号和源服务器上;加载符号自动或在要求。内容查找符号 (.pdb) 文件查找源文件查找符号 (.pdb) 文件说明在之前的 Visual Studio 版本与 2012 中,调试在远程计算机上的管理的代码需要符号文件还查找了远程计算机。现在,这已经不成问题了。所有符号文件必须本地计算机或位于 Visual Studio选项对话框的调试/符号页上指定的位置。如果调试器搜索 .pdb 文件|符号文件的原因需要完全匹配可执行文件?|指定符号位置和加载行为|使用符号服务器以查找符号文件不在本地计算机|查找并加载符号,在调试时|设置符号文件的编译器选项程
阅读全文
摘要:前言:WinDbg是微软开发的免费源代码级的调试工具。WinDbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。本文的讨论是在安装了Debugging Tools for Windows的前提下进行的,下载地址可以参考我之前的文章。WinDbg对于dump文件的调试可以通过菜单设置Symbol File Path、Source File Path,并可设置多个路径。1、打开Dump格式文件打开WinDbg,通过菜单[File]à[Open Crash dump]选择dump文件打开,也可通过CMD打开Dos命令窗口,切换到WinDbg所在目录,利用命令:WinD
阅读全文
摘要:很多软件通过设置自己的异常捕获函数,捕获未处理的异常,生成报告或者日志(例如生成mini-dump文件),达到Release版本下追踪Bug的目的。但是,到了VS2005(即VC8),Microsoft对CRT(C运行时库)的一些与安全相关的代码做了些改动,典型的,例如增加了对缓冲溢出的检查。新CRT版本在出现错误时强制把异常抛给默认的调试器(如果没有配置的话,默认是Dr.Watson),而不再通知应用程序设置的异常捕获函数,这种行为主要在以下三种情况出现。(1)调用abort函数,并且设置了_CALL_REPORTFAULT选项(这个选项在Release版本是默认设置的)。(2)启用了运行时
阅读全文
摘要:前言:通过drwtsn32、NTSD、CDB等调试工具生成Dump文件,drwtsn32存在的缺点虽然NTSD、CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD、CDB等调试工具。了解了mini dump文件格式后,完全可以程序自动生成Dump文件。本文主要讨论以下内容:1、运行原理2、程序修改3、注意事项一、运行原理当程序遇到未处理异常(主要指非指针造成)导致程序崩溃死,如果在异常发生之前调用了SetUnhandledExceptionFilter()函数,异常交给函数处理。MSDN中描述为:Issuing SetUnhandledExceptionFilter replaces
阅读全文
摘要:前言:利用drwtsn32或NTSD进行程序崩溃处理,都可以生成可用于调试的dmp格式文件。使用VS2005打开生成的DMP文件,能很方便的找出BUG所在位置。本文将讨论以下内容:1、程序编译选项2、利用VS2005分析dump文件3、常见问题讨论一、程序编译选项PDB files contains all debug information like type definition and function prototype.When application crashes, we need the PDB files to analyze the root cause, so make
阅读全文
摘要:.pdb文件,是VS生成的用于调试的符号文件(program database),保存着调试的信息。在VS的工程属性,C/C++,调试信息格式,设置/Zi,那么VS就会在构建项目时创建PDB文件。在这里要区分两种情况:1、构建静态库时,可以在工程属性 –> C/C++ –> 输出文件–>程序数据库名 设置生成的pdb文件名称,如果不指定,默认是生成为VCx0.pdb,这里x是VS版本号,例如用VS2005,就会生成VC80.pdb。这里就会产生一个疑问,编译静态库时默认生成的.pdb文件名字都一样,那引用这个静态库的项目最后能找到正确的.pdb文件吗?答案是肯定的,因为VS会
阅读全文
摘要:当应用程序被链接以后,代码被逐一地翻译为一个个的地址,优化以后的代码可能初看起来更是面目全非。每当我们使用vs或者windbg等微软的调试工具进行调试的时候,我们可以方便地使用变量名来查看内存、可以使用函数名称来下断点、甚至可以指定某个文件的某一行来下断点。这一切背后是什么在指导调试器工作呢?答案就是符号——pdb或者dbg文件(.NET自己有元数据,符号不需要元数据已有的信息)。 程序运行的时候,计算机只需要逐条执行指令即可。而与源代码对应的关系是完全不需要知道的。这就给调试带来了困难,所以无论什么编译都有自己的一套用于对应代码和可执行程序。各种编译器都有自己保存类似这种对应关系的办法,有.
阅读全文
摘要:There are several reasons for xcopy deployment of an application (also known as application local). One main reason is that you are independent of what the target computer has installed.Also your application always uses the “correct” (or better: tested) version of DLLs, regardless of what MS install
阅读全文
摘要:If you create a default CRT/MFC application with VS2008, this application will not run on other computers. You application will complain with“This application has failed to start because the application configuration is incorrect”.The problem is that by default VC2008 uses the DLL-version of the CRT
阅读全文
摘要:前一种方法是将manifest文件放入exe中,但是要记得需要在工程中设置 这样的话exe中就不存在manifest了,在debug目录下就会看到相应的manifest文件。后者是将exe中的manifest文件提取出来,但是exe中依然有manifest文件!
阅读全文
摘要:理解编译器的编译模板过程如何组织编写模板程序前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂。我在5年前开始使用模板,那时我看到了MFC的容器类。直到去年我还没有必要自己编写模板类。可是在我需要自己编写模板类时,我首先遇到的事实却是“传统”编程方法(在*.h文件声明,在*.cpp文件中定义)不能用于模板。于是我花费一些时间来了解问题所在及其解决方法。本文对象是那些熟悉模板但还没有很多编写模板经验的程序员。本文只涉及
阅读全文
摘要:转发自:http://blog.csdn.net/tttyd/article/details/68933921.视频容器格式简介 一般而言,视频文件的扩展名就是视频的容器名。比如“avi文件”或者“mp4文件,avi和mp4只是容器格式。好比zip文件,里面可以包含各种文件,视频容器格式只是定义了怎么存储数据,而不论存储什么类型的数据。不过视频容器格式比这个更复杂一些,因为不是所有的视频流格式兼容所有的视频容器格式。 一个视频文件一般包含多个track,而每个视频track(没有音频)又可对应一到多个音频track。这些track又总是相互关联的。每个音频track内部包含标记用于和视频同步。
阅读全文
摘要:转载自:http://blog.csdn.net/tttyd/article/details/5258096源代码下载 http://files.cnblogs.com/tttyd/Activex.rar由于在博主的博客中没有讲明工程的创建过程与最后插件的注册方法,我在另一篇文章中作了补充:用ATL写简单的ActiveX控件介绍: 如今在许多流媒体视频网站(youku,tudou......)我们都会发现,观看视频之前都会有一段时间的广告,甚至在观看视频途中也会插入一些广告。实现这个效果的可以有多种技术。使用Javascript就可以实现,只需要在同一个位置分别创建两个Object,一个嵌..
阅读全文
摘要:我正在做的项目需要用读卡器来读数据,由于系统是B/S架构的所以只能把读卡器的驱动封装成一个无界面的ActiveX控件,这样web页面中的js代码才能访问读卡器其实做起来也挺简单的,我用的环境是VS2005,步骤如下:打开VS2005后:1、创建一个ATL Project。Application Setting选择为:Server-Type:Dynamic-Link Library (dll)Additional-Options: Allow merging of proxy/stub code这里说一句,对于所有只用于web的activex控件,不管有没有界面,都应该用这两个选项。2。选择菜单
阅读全文
摘要:今天犯了一个粗心的错误,在无窗口线程中,SetTimer中设置计时器ID,而WM_TIMER消息响应函数中得到的计时器ID却不是之前设置的计时器ID. [cpp] view plaincopyprint?//111902.cpp:Definestheentrypointfortheconsoleapplication. // //#include"stdafx.h" #include"stdio.h" #include"windows.h" BOOLDispatchThreadMessage(MSG*pMsg);VOIDCALLBAC
阅读全文
摘要:一个UUID生成算法的C语言实现——WIN32版本cheungmine2007-9-16根据定义,UUID(Universally Unique IDentifier,也称GUID)在时间和空间都是唯一的。为保证空间的唯一性,每个UUID使用了一个48位的值来记录,一般是计算机的网卡地址。为保证时间上的唯一性,每个UUID具有一个60位的时间戳(timestamp)。这个时间戳表示自公元1582年(绝对不是1852,这是《COM技术内幕》,1999年3月第1版第89页中的一个错误)10月15号00:00:00:00以来的时间,是以100纳秒为单位的时间间隔。1纳秒(ns)=10-9秒(s)。U
阅读全文
摘要:基于Oracle OCI的数据访问C语言接口ORADBIcheungmine@gmail.comMar. 22,2008ORADBI是我在Oracle OCI(Oracle 调用接口)基础上开发的,支持Oracle8i、9i、10g等数据库。根据Oracle公司的介绍:OCI是如此可靠,以至于Oracle数据库中的每一条SQL语句都通过OCI来执行。当应用程序开发人员需要面向Oracle数据库服务器的最强大的接口时,他们将调用 Oracle调用接口(OCI)。OCI提供了对所有Oracle数据库功能的最全面的访问。OCI API中包含了最新的性能、可伸缩性和安全性特性。采用OCI的最大好处就.
阅读全文
摘要:如何在WINDOWS下编译BOOST C++库cheungmine2008-6-25写出来,怕自己以后忘记了,也为初学者参考。使用VC8.0和boost1.35.0。1)下载boosthttp://www.boost.org/users/download/这是它的下载页面,需要下载2个东西:Packaged ReleasesVERSION 1.35.0和Boost Jam 3.1.16你需要在每个条目下面找到Details | Download字样,点击Download,进入下载页。可是遗憾的是sourceforge站点被封了,所以通常你是无法下载的。(我诅咒封这个站点的人)。因此有必要使用某
阅读全文
摘要:Windows下如何使用BOOST C++库我采用的是VC8.0和boost_1_35_0。自己重新编译boost当然可以,但是我使用了http://www.boostpro.com/products/free提供的安装工具 BoostPro 1.35.0 Installer (192K .exe) 。我强烈建议使用这个工具来在Windows下安装BOOST库和源文件。1)使用boost_1_35_0_setup.exe这个工具下载boost库,选择你要的包(类型总是Mutilthread和Mutithread Debug),下载后自动安装。我用VC8.0的boost_1_35_0安装在E:/
阅读全文
摘要:C++ DLL 模板1、使用VS2005创建Win32 DLL项目,选择空项目,然后加入CppDll.h和CppDll.cpp文件。2、修改CppDll.h和CppDll.cpp文件使之成为需要的内容。3、编译生成CppDll.dll。下面是模板文件:[cpp] view plaincopyprint?// //CppDll.h //bycheungmine //C++DLL模板 // /***使用CPPDLL:#include"../CppDll.h"#ifdef_DEBUG#pragmacomment(lib,"F:/del/CppDll/Debug/CppD
阅读全文
摘要:用户自定义结构数据与VARIANT转换 cheungmine将用户自定义的C结构数据存储成VARIANT类型,需要时再将VARIANT类型转为用户自定义的结构数据,有十分现实的意义,既然我们不想为这样的结构数据写一个COM包装类。虽然有很多方法和手段生成这样的VARIANT,但是,多数时候可能需要一个更加简单的,灵活的方法。我在做远程过程调用的C接口时,忽然联想到,既然RPC可以把任何数据以字节的形式发送,那么,就可以利用这个机制,把结构打包成字节数组。而字节数据是可以很方便地存储在VARIANT中。这个过程是广为人知的,但是,真正把结构列集成字节数组,如果不想使用某些标称的序列化的方法,而全
阅读全文
摘要:Agg vs. Cairo 二维绘图引擎之比较和选择 cheungmine当今时代对于作为二维图形软件开发者, 是幸运的。因为除了Windows GDI/GDI+之外,我们还有很多其他的选择。而且这些选择除了能跨平台之外,性能上与原始GDI/GDI+相比,都不逊色。如果不考虑绘图的效果,使用Win32 GDI函数直接绘图的效率大约是同样的GDI Plus的10倍以上。为了反走样的美观,只有牺牲效率了。老式的程序还在使用GDI绘图,不是这些程序不想提升到GDI+,可能这样改动的代码量太大,所谓船大不好掉头所致。因此,后发的优势就是可以利用当今软件发展的最新成果,快速切入一个领域,所谓迎头赶上。言
阅读全文
摘要:双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后希望在这个窗口中绘制我们的图像、图形等数据,然而ATL向导生成的代码中包含很多错误,下面是其自动向导生成的代码: HRESULT OnDraw(ATL_DRAWINFO& di) { RECT& rc = *(RECT*)di.prcBounds; // 将剪辑区域设置为 di.prcBounds 指定的矩形 HRGN hRgnOld = NULL; if (GetClipRgn(
阅读全文
摘要:在COM组件中调用JavaScript函数要求是很简单的,即有COM组件A在IE中运行,使用JavaScript(JS)调用A的方法longCalc(),该方法是一个耗时的操作,要求通知IE当前的进度。这就要求使用回调函数,设其名称为scriptCallbackFunc。实现这个技术很简单:1 组件方(C++)组件A 的方法在IDL中定义:[id(2)] HRESULT longCalc([in] DOUBLE v1, [in] DOUBLE v2, [in, optional] VARIANT scriptCallback);组件A的方法实现:// 假设回调原型为:// scriptCall
阅读全文
摘要:转载请标明是引用于 http://blog.csdn.net/chenyujing1234欢迎大家提出意见,一起讨论!一、OpenCV介绍:OpenCV是由Intel性能基元(IPP)团队主持,而且几个主要开发者都与IPP团队保持良好的关系,所以OpenCV利用了IPP高度手工优化的代码来实现加速。使用IPP获得提速是很显著的。OpenCV使用了优化了的C和C++代码实现,它对IPP不存在任何依赖。但如果安装了IPP,那么OpenCV将会通过自动载入IPP动态链接库获取IPP的优势。获得IPP并安装: http://www.itel.com/software/products/ipp/inde
阅读全文
摘要:dumpbin用法:dumpbin /exports /out:d:\mfc90.txt d:\mfc90.lib在使用VC时,可以用DUMPBIN。EXE来得到某个DLL中所输出的符号的清单。如下面的命令:dumpbin -exports Cmpnt1.dll如:C:\WINDOWS\system32>dumpbin -exports msgsvc.dllMicrosoft (R) COFF Binary File Dumper Version 6.00.8447Copyright (C) Microsoft Corp 1992-1998. All rights reserved.Du
阅读全文
摘要:这里请注意,在编译ffmpeg时,不要使用--disable-devices选项。使用--enable-encoder=rawvideo--enable-decoder=rawvideo启用rawvideo codec。代码如下:[cpp]view plaincopyprint? #include#include#include#include#include#include#include#include#include#defineMAX_INPUT_DEVICE_NUM10#ifdef_WIN32intstrcasecmp(constchar*s1,constchar*s2){while
阅读全文
摘要:原因是: DDrawSurface 丢失, DDraw表面在很多情况下都会丢失(如:启动其他全屏独占程序,屏保,或锁屏时), 表面丢失其实就是表面所使用的内存或显存被DirectDraw系统释放, 分配给其他程序. 如果表面丢失, 对此表面的操作都会返回 DDERR_SURFACELOST , 此时应该调用 IDirectDrawSurface 接口方法 Restore 来恢复表面(重新申请内存或显存)。伪代码如下:hr = m_lpDDSOffscreen->Lock(rcDest,&ddsd,DDLOCK_SURFACEMEMORYPTR|DDLOCK_WAIT,NULL);
阅读全文
摘要:好久没有更新博客了,今天开始继续耕耘。生活要继续工作要继续梦想也一定要继续!之前写过一篇关于DirectX截屏的文章,其中有网友留言提到了截图黑屏的问题,于是这些日子研究了一下,与大家一同分享。为什么会黑屏?一句话概括,黑屏是由于DDraw加速引起的!先说一下DirectX的显示原理,通常我们看到的屏幕上的数据,都是通过Primary Surface送至显示器的,什么是Primary Surface呢?中文叫做主显示表面,也就是说我们当前看到的屏幕上的图像数据是从这个表面来的,除了主表面意外还有离屏表面,叫做OffScreenSuface。这种表面中的数据是不直接显示在屏幕上的。常用的截屏函数
阅读全文
摘要:右键工程属性 -> 配置属性 -> 生成事件 ->生成后事件,命令行中的路径加上双引号,如copy $(ProjectDir)\export\win32\Debug\$(ProjectName).dll $(OutDir)修改为copy "$(ProjectDir)\export\win32\Debug\$(ProjectName).dll" "$(OutDir)"
阅读全文
摘要:打开Visual Studio 2008 命令提示,使用命令[plain]view plaincopyprint? dumpbin/exportssimple.dll即可查看
阅读全文
摘要:环境:VS2008 + CxImagebtn.h[cpp]view plaincopyprint? #pragmaonce//CBtn#include"ximage/ximage.h"classCBtn:publicCButton{DECLARE_DYNAMIC(CBtn)private:CxImage*m_pImgNormal;CxImage*m_pImgOver;CxImage*m_pImgDown;CxImage*m_pImgFocus;CxImage*m_pImgDisable;BOOLm_bTracking;BOOLm_bMouseOver;BOOLm_bLBtn
阅读全文
摘要:Every version of Visual Studio comes with certain versions of the Microsoft libraries, such as the C runtime library, the MFC library, and so on. For example, Visual Studio 2008 comes with version 9.0.21022.8 of the Microsoft C runtime library and version 9.0.21022.8 of the MFC library. You can easi
阅读全文
摘要:vc2008程序发布指南2008-05-03 17:46vc2008开发的程序的发布方式可以有5种方式:1. 采用静态链接到crt和MFC. 只要你拥有组成程序的所有源代码,你就可以采用这种方式, 这种方式除了程序变大一点,好处多多: 1) 不必重新发布vc2008基础库vcredist_x86.exe(安装到WinSxS). 2) 不必产生,嵌入manifest. 3) 也不把vc2008基础库放在程序所在目录.2. exe(嵌入manifest) + vcredist_x86.exe 确保程序正确产生并嵌入manifest文件,然后把程序和vcredist_x86.exe一起发布.用户先安
阅读全文
摘要:恩,为了大家都能很方便的理解,我将尽量简单通俗地进行描述。[现象]对这个问题的研究是起源于这么一个现象:当你用VC++2005(或者其它.NET)写程序后,在自己的计算机上能毫无问题地运行,但是当把此exe文件拷贝到别人电脑上时,便不能运行了,大致的错误提示如下:应用程序配置不正确,请重新安装程序……或者是MSVCR80D.dll 没有找到什么的(我记得不是很清楚,不过大致是这样的)[分析]看到这样的提示,当然不会傻到重装咯。第一反应应该是什么配置有问题、或者是缺少了什么依赖的库文件;于是我就根据以前Windows缺少库文件的经验,把所有库文件(××.DLL)统统一股脑地复
阅读全文
摘要:Side-by-sidetechnology is a standard forexecutable filesinWindows 98 Second Edition,Windows 2000, and later versions of Windows that attempts to alleviate problems that arise from the use ofdynamic-link librariesin Microsoft Windows. Such problems include version conflicts, missing DLLs, duplicate D
阅读全文
摘要:本文简要介绍Side-by-side assembly技术,探讨在插件技术中使用类似方法的可能。什么是Side-ty-side AssemblySide-by-side assembly是Windows Xp及以上系统解决动态链接库版本冲突所使用的技术,要点是编译程序时,由Visual Studio生成一个manifest文件,指明本应程序所使用的动态链接库的版本;发布程序时也要发布该manifest文件,供客户计算机上的dll loader根据manifest加载适当版本的dll,如果不发布该项manifest,客户机按默认版本加载Dll。Representation of typical
阅读全文
摘要:什么是Side-by-Side Assembly?Side-by-Side Assembly(建称SxS)是微软在Visual Studio 2005(Windows 2000?)中引入的技术,用来解决Windows平台上的DLL Hell问题。DLL Hell的介绍可以看Wikipedia的文章。简单的说,DLL Hell窘境包括了Windows应用程序依赖的DLL带来的若干问题,包括同名DLL、DLL升级、DLL载入顺序等等。Side-by-Side Assembly按照我的理解,是一种特殊的DLL,按照Side-by-Side Assembly的要求开发的,并用XML格式的manifes
阅读全文
摘要:一、问题编译某个遗留工程后,运行程序时报错,“由于应用程序的配置不正确,应用程序无法启动。重新安装应用程序可能会解决这个问题。”查看生成的Manifest文件如下: 问题出现在第三个assemblyIdentity中version的值与机器上该dll的值不符。二、解决方法需要将manifest中第三个assemblyIdentity中version的值修改为与机器上相应dll的版本。查看该项目的属性发现,【连接器】->【清单文件】->【生成清单】项的值为“是”。由此可见,该manifest...
阅读全文
摘要:什么是vs 程序的manifest文件manifest 是VS程序用来标明所依赖的side-by-side组建,如ATL, CRT等的清单。为什么要有manifest文件一台pc上,用一组建往往会有不止一个版本(c:/windows/winsxs或系统目录下),程序在加载的时候,不知加载哪个,于是manifest文件来指明。manifest在哪儿,如何创建。如果用VS开发,可以Set通过porperty->configuration properties->linker->manifest file->Generate manifest To Yes来自动创建manif
阅读全文
摘要:[此文档是初定版,随时可能进行更改。]JavaScript 内存分析器在 Visual Studio 2012 更新 1 和 Visual Studio 2013 中提供,旨在帮助你了解内存使用量和查找使用 JavaScript 为 Windows 生成的 Windows 应用商店应用程序中的内存泄漏。JavaScript 内存分析器可以为你执行以下操作:通过强调最相关的数据帮助你在应用程序中快速查找内存使用情况问题。你将以快照摘要形式收到此数据,其显示两个快照之间的差异,并提供指向更详细视图的链接。提供控制器、类型和根的视图来帮助隔离问题。减少 JavaScript 堆数据中的不可操作的信息
阅读全文
摘要:本主题带领您完成使用 JavaScript 内存分析器确定并修复简单内存问题的过程。在本教程中,我们创建一个生成大量数据的应用程序。我们预期在导航到新页时该应用程序会释放数据。说明JavaScript 内存分析器可用于 Visual Studio 2012 更新 1 中的 Windows 8。运行 JavaScript 内存分析器测试应用程序用 Visual Studio 中,单击“文件”>“新建”>“项目”。单击左窗格中的“JavaScript”,然后单击中间窗格中的“导航布局应用程序”。在“名称”框中,键入诸如 JS_Mem_Tester 等名称,然后单击A“确定”。在“解决方
阅读全文
摘要:简介:如果大量使用 JavaScript 和 Ajax 技术开发 Web 2.0 应用程序,您很有可能会遇到浏览器的内存泄漏问题。如果您有一个单页应用程序或者一个页面要处理很多 UI 操作,问题可能比较严重。在本文中,学习如何使用 sIEve 工具检测并解决内存泄漏问题,本文也包含内存泄漏问题的应用示例以及解决方案。发布日期:2012 年 4 月 09 日级别:中级原创语言:英文访问情况 :10932 次浏览评论:0(查看|添加评论- 登录)平均分 (7个评分)为本文评分简介一般来说,浏览器的内存泄漏对于 web 应用程序来说并不是什么问题。用户在页面之间切换,每个页面切换都会引起浏览器刷新。
阅读全文
摘要:一、内存泄露 之前确实看了很多资料,但这位大哥的话可谓画龙点睛,不是奉承他,一下子就打通了我的任督二脉,请看:trarck 写道 IE下的内存泄露原因就是循环引用,IE的垃圾回收器不能很好处理这种引用。会产生泄露的循环引用,只有孤立的DOM对象(脱离DOM树)。孤立的DOM对象间的循环引用,孤立的DOM对象与JS对象的循环引用。为什么是孤立的DOM对象呢?在离开页面时(刷新,跳转)会删除整个DOM树,在DOM树上的对象也会被删除,就算有循环引用,此时被打断。孤立的DOM对象有:一、用JS创建但未加入DOM树。二、从DOM树中删除的。所以避免泄露,就尽量不要让这样的DOM对象产生。有时候这样对象
阅读全文
摘要:最近接受了一个Js职位的面试,问了很多Js的高级特性,才发现长时间使用已知的特性进行开发而忽略了对这门语言循序渐进的理解,包括Java我想也是一样,偶尔在Sun官方看到JDK6.0列举出来的new features才发现很多东西是自己并不知道或者遗忘了的。看来还是要坚持总结技术,反复理解和运用才能保持对任何技术的掌握运用能力阿。翻了一些Js的新老资料,准备先讲讲Js的内存泄露问题——当一个DOM对象包含一个Js对象的引用(例如一个Event Handler), 而这个Js对象又持有对这个DOM对象的引用时,一个环状引用就行成了。这本身并不是什么错误或者Bug,因为Js的回收机制能理解这种环状的
阅读全文
摘要:学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)1、cin 2、cin.get() 3、cin.getline() 4、getline() 5、gets() 6、getchar()附:cin.ignore();cin.get()//跳过一个字符,例如不想要的回车,空格等字符1、cin>> 用法1:最基本,也是最常用的用法,输入一个数字:#include using namespace std; main () { int a,b; cin>>a>
阅读全文
摘要:相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法。其实,可能很多人很可能会忽略掉标准C++中string类的使用。标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。现将具体用法的一部分罗列如下,只起一个抛砖引玉的作用吧,好了,废话少说,直接进入正题吧!要想使用标准C++中string类,必须要包含#i
阅读全文
摘要:【JSON简介】 jsoncpp主要包含三种类型的class:Value、Reader、Writer。jsoncpp中所有对象、类名都在namespace Json中,包含json.h即可。【VALUE】 Json::Value是jsoncpp中最基本、最重要的类,用于表示各种类型的对象,jsoncpp支持的对象类型可见Json::ValueType枚举值。 可如下是用Json::Value类: Json::Value json_temp;//临时对象,供如下代码使用 json_temp["name"] = Json::Value("huchao");
阅读全文
摘要:[拷贝构造函数的调用时机] 1、对象以值传递的方式传入函数参数 2、对象以值传递的方式从函数返回 3、对象需要通过另外一个对象进行初始化 拷贝构造函数原型,假设类名为Foo,则copy constructor为: Foo(constFoo&obj); 限定符必须是const,且必须是引用。
阅读全文
摘要:[define中的:#,##,#@]#defineConn(x,y)x##y#defineToChar(x)#@x#defineToString(x)#x(2)x##y表示什么?表示x连接y,让compiler认为 xy 需要组合在一起, 被看作是一个符号而不是其它. 举例说:intn=Conn(123,456);/* 结果就是n=123456;*/char*str=Conn("asdf","adf");/*结果就是 str = "asdfadf";*/(2)再来看#@x,其实就是给x加上单引号,结果返回是一个const char。举
阅读全文
摘要:在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。异步异步的概念和同步相对。当一个异步过
阅读全文
摘要:今天看了点关于Windows多线程的东西,摘抄点关于CloseHandle的内容放于此,以便以后参考。主要是《Windows核心编程》里的两小节:3.1.1 内核对象的使用计数 内核对象由内核所拥有,而不是由进程所拥有。换句话说,如果你的进程调用了一个创建内核对象的函数,然后你的进程终止运行,那么内核对象不一定被撤消。在大多数情况下,对象将被撤消,但是如果另一个进程正在使用你的进程创建的内核对象,那么该内核知道,在另一个进程停止使用该对象前不要撤消该对象,必须记住的是,内核对象的存在时间可以比创建该对象的进程长。 内核知道有多少进程正在使用某个内核对象,因为每个对象包含一个使用计数。使用计数是
阅读全文
摘要:Debugging with GDBhttp://www.delorie.com/gnu/docs/gdb/gdb_25.htmlGDB调试多线程程序总结一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧。 先介绍一下GDB多线程调试的基本命令。info threads显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。thread ID切换当前调试的线程为指定ID的线程。break thread_test.c:123 thread all在所有线程中相应的行上设置断点thread apply I
阅读全文
摘要:[精彩] 求问delete和delete[] 的区别??http://www.chinaunix.net/jh/23/311058.htmlC++告诉我们在回收用new分配的单个对象的内存空间的时候用delete,回收用new[]分配的一组对象的内存空间的时候用delete[]。楼主的这个问题提得很好。很多人注意到了这个问题,但是却不清楚为什么要这样做,不这样做行不行。关于new[]和delete[],其中又分为两种情况:(1)为基本数据类型分配和回收空间;(2)为自定义类型分配和回收空间。对于(1),上面提供的程序已经证明了delete[]和delete是等同的。但是对于(2),情况就发生了
阅读全文
摘要:STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。 从根本上说,STL是一些“容器”的集合,这些“容
阅读全文
摘要:Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接1 Makefile 介绍 1.1 Makefile的规则1.2 一个示例1.3 make是如何工作的1.4 makefile中使用变量1.5 让make自动推导1.6 另类风格的makefile1.7 清空目标文件的规则2 Makefile 总述 2.1 Makefile里有什么?2.2Makefile的文件名2.3 引用其它的Makefile2.4 环境变量 MAKEFILES2.5 make的工作方式3 Makefile书写规则 3.1 规则举例3.2 规则的语法3.3 在规则
阅读全文
摘要:WM_PAINT是窗口每次重绘都会产生的一个消息。 OnPaint是对这个消息的反应函数mfc 的 CWnd::OnPaint 没做什么,只是丢给系统处理。一 :先执行OnEraseBkgnd,擦除背景(如果想自绘控件,这个函数直接return TRUE就可以了,这样就不会擦除背景,不会闪)OnEraseBkGnd与OnPaint的区别与联系在OnEraseBkGnd中,如果你不调用原来缺省的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面,由于它隐含的调用了OnEraseBkGnd,而你又没有处理OnEraseBkGnd 函数,这时就和窗口缺省的背景刷相关了.缺省的
阅读全文
摘要:C++程序员打交道最多的就是MFC了,这个我不想多说,说来都是泪(C#年年更新,C++十年才出了一个featurePack还不是很好用)现在另外两支队伍越来越庞大(所谓穷则思变,呵呵),一是WTL,关于它的种种传说可以参考WTL中文教程,里面讲的很详细,这里我想说的是为什么使用WTL:传说WTL是微软内部所使用的界面框架程序,原因是高效,简洁,实际也是如此,WTL的程序内的内存占用比MFC小的多,而且WTL内建了对于可缩放对话框的支持(支持控件停靠哦),对于多文档以及视类的支持更是MFC望尘莫及的,但是WTL也有其自身的缺点,比如开发文档少,尤其是中文的,向导不够聪明(谁用谁知道,呵呵),换句
阅读全文
摘要:C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年。因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应用。当Java横行天下之后,MS又突然发力,搞出C#语言,有大片的曾经的C++程序员,以为C++要就此沉沦,未料,这三年来,C++的生命力突然被严重地增强了。主力原因就是开源的软件、基础软件(比如并发原生支持,比如Android必定要推出原生的SDK)、各种跨平台应用的出现。开源C++库必须具有以下特点:必须是成熟的产品、跨平台的产品、相对通用的库。一、通用标准类STL:C++标准模板库,呵呵,它也是开源的嘛。boost:C++准标准库,它是强大地,江
阅读全文
摘要:使用分层界面来实现界面皮肤的好处是:可以保证图片边缘处理不失真,且能用于异形窗口上,如一些不规则的窗口,你很难用SetWindowRgn来达到理想效果。在很多情况下,界面的漂亮与否,取决于PS的制作及创意,而界面编程所需要做的就是将图片完整无缺的展示给用户。分层窗口的好处就是:用一层窗口来描绘窗口背景,以确保背景图片不会失真,而另一层窗口用来放置控件,除控件之外的区域全是透明的。为什么要这么麻烦呢?因为我们将要用到UpdateLayeredWindow来实现窗口背景描绘,一旦执行这个函数后,窗口的控件将会被覆盖,不会再显示。所以我们要再加一层透明窗口,来放置控件,以确保控件不会受到Update
阅读全文
摘要:WM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作。1.系统何时发送WM_PAINT消息?系统会在多个不同的时机发送WM_PAINT消息:当第一次创建一个窗口时,当改变窗口的大小时,当把窗口从另一个窗口背后移出时,当最大化或最小化窗口时,等等,这些动作都是由 系统管理的,应用只是被动地接收该消息,在消息处理函数中进行绘制操作;大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变的时候,这一般是通过InvalidateRect和 InvalidateRgn函数来完成的。InvalidateRect和InvalidateR
阅读全文
摘要:当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置。本文针对这种方法来讨论几种可能实现的方案。方案一本方案的例子请见源代码打包文件中的Property1部分在对话框上放置一个Tab Control的控件,再在对话框上放置所需的控件(本例放置了2个按钮,试图在每个标签中显示一个)。然后利用Class Wizard来为Tab Control控件创建一个控件变量,该变量是CTabCtrl类的,再为其他控件也创建相应的控件类。 在主对话框的初始函数中CProperty1Dlg::OnInitDialog()加入如下代码://本例插入两个标签,实际运用中可通过循环插入所
阅读全文
摘要:各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。 1.文件的查找 当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。 CString strFileTitle; CFileFind finder...
阅读全文
摘要:过阅读本文你可以学习如何有效地使用 CString。 CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。这篇文章就来讨论这些技巧。 使用CString可以让你对字符串的操作更加直截了当。这篇文章不是CString的完全手册,但囊括了大部分常见基本问题。这篇文章包括以下内容: CString 对象的连接格式化字符串(包括 int 型转化为 CString )CString 型转化成 int 型CString 型和 char*..
阅读全文
摘要:进行程序设计时,选用一个合适的ActiveX控件,有时可大大减少编程工作量。ActiveX 控件(又称OCX)基于COM技术,作为独立的软件模块,它可以在任何程序设计语言中插入使用。本文仅以VC++为例说明Chart控件的使用。 Chart控件指Mschart.ocx(5.0版)或Mschrt20.ocx(6.0 版),是Visual Studio自带的ActiveX控件之一,其属性、事件很多,功能非常强大,可实现柱状直方图、曲线走势图、饼状比例图等,甚至可以是混合图表,可以是二维或三维图表,可以带或不带坐标系,可以自由配置各条目的颜色、字体等等。一 安装和使用Chart控件 在用到Ch...
阅读全文
摘要:框窗、视图和文档及其关系 MFC架构的另外一个特色是它的框窗、视图和文档这个三位一体的结构,它是一个典型的MVC(Model、ViewandControler)结构。严格的讲,框窗不属于MVC中的任何一项,MFC设计者将框窗加进来是为了能更好的协调文档和视图。而MVC中的Controler这一项,则是应用本身的应用逻辑。在这三者中,需要特别注意的、也最能够体现个人的编程水平的是框窗。一旦三者都存在于内存中,它们的关系就变得很简单。本章将讨论下述内容: 1.MFC的RTTI(RunTimeTypeInspection,运行时类型检查) 框窗、视图和文档的创建顺序和过程。 框窗、视图和...
阅读全文
摘要:MFC的消息映射机制 MFC的设计者们在设计MFC时,紧紧把握一个目标,那就是尽可能使得MFC的代码要小,速度尽可能快。为了这个目标,他们使用了许多技巧,其中很多技巧体现在宏的运用上,实现MFC的消息映射的机制就是其中之一。 同MFC消息映射机制有关的宏有下面几个: DECLARE_MESSAGE_MAP()宏 BEGIN_MESSAGE_MAP(theClass,baseClass)和END_MESSAGE_MAP()宏 弄懂MFC消息映射机制的最好办法是将找出一个具体的实例,将这些宏展开,并找出相关的数据结构。 DECLARE_MESSAGE_MAP() DECLARE_ME...
阅读全文
摘要:MFC的WinMain 使用MFC编程的程序员刚开始都会提出这样一个问题:我的程序是从哪儿开始执行的?回答是:从WinMain()开始执行的。提出这样的问题是由于在他们所编写的MFC应用中看不到WinMain()函数。这个函数是隐藏在MFC框架中,MFC的设计者将它作得很通用(这主要得益于Window的消息驱动的编程机制,使得作一个通用的WinMain()很容易),因此在一般情况下,无需更改WinMain()的代码,MFC的设计者也不提倡程序员修改WinMain()的代码。在MFC中,实际实现WinMain()的代码是AfxWinMain()函数(根据其前缀Afx就知道这是一个全局的MFC函.
阅读全文
摘要:在这里,我想谈谈自己学习MFC的一些体会。我是从1997年才开始在Window下编写程序的。在这之前,我编写过一些DOS程序,包括一个简单的全屏幕编辑器和一个带函数的表达式解释器,都是一些小的程序。Window3.1流行后,我开始在它下面编写程序。 从编写DOS程序到编写Window程序,需要从编程思想上作一个比较大的调整。在DOS下编写程序,程序的总体流程完全由应用程序自己控制;但在Window下,程序的总体流程是由操作系统控制的,这一点对在DOS下“胡作非为”的DOS程序员而然,特别不习惯,思想上一时很难转过弯来,总觉得操作系统所控制的应用程序流程能够满足我们所提出的任意要求吗?万一某个.
阅读全文
摘要:MFC中的窗口创建及窗口消息映射我经常碰到有人问我有关窗口创建的问题,他们经常把用HWND描述的系统窗口对象和用CWnd描述的MFC的窗口对象混淆不清。这两者之间是紧密联系在一起的,但是MFC为了自身的管理,在CWnd中加了一些额外的内容,包括如何从HWND生成CWnd。 在MFC中,有几种典型的窗口对象,CWnd描述的一般窗口对象,CView描述的视图对象,CFrameWnd描述的SDI框窗对象,CMDIFrameWnd描述的MDI框窗对象等等。在这一章中,主要讨论下述内容: MFC中窗口的创建 MFC的消息映射机制(MESSAGE MAP) 对于上面两点MFC的设计者们使用了很高的...
阅读全文
摘要:一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:voidCSingleThreadDlg::OnSleepSixSecond(){Sleep(6000);//延时6秒} 编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。二、多线程概述 进程和线程都是操作系统的概念...
阅读全文
摘要:开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件。(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网上发表相关内容的朋友们。)ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件。这里控件容器就是浏览器,用户不需要通过浏览器调用控件的属性或方法。因此,开发面向Web的ActiveX控件比开发桌面的
阅读全文
摘要:所有窗体在创建前都必须注册窗体类,只有注册的窗体类才被系统认知并允许实例化,换句话说通过注册告诉进程窗体管理器此类窗体的属性如: 背景色,窗体上的鼠标样式以及窗体事件处理函数等; 有一些控件类系统自带了的可以不用注册即可实例化,在不需要时反注册掉,以便释放类占用的内存。(一) 函数声明 I). 类注册ATOM RegisterClassEx(CONST WNDCLASSEX *lpwcx); 注册一个窗体类,以便通用CreateWindowEx, CreateWindow来实例化一个窗体 ATOM RegisterClass(CONST WNDCLASS *lpWndClass); 与Regi
阅读全文