摘要:晚上编一个小程序,涉及到如何设置对话框的背景颜色和静态文本颜色。这在VC6.0中本来是一句话就搞定的事。在应用程序类中的InitInstance()函数添加: //设置对话框背景和文本颜色SetDialogBkColor(RGB(160,180,220),RGB(0,0,0));谁知这在VS 2005上竟不起作用,到网上一查,原来SetDialogBkColor函数在VS 2003中就已经不支持了。只得另辟蹊径。另外的办法就是响应WM_CTLCOLOR消息,在消息映射函数中添加:[cpp]view plaincopy HBRUSHCFileSpltDlg::OnCtlColor(CDC*pDC
阅读全文
随笔分类 - VC/MFC
摘要:在很多系统中出于美观的需要常常要设置背景图片。下面我介绍一种在客户区设置背景图片的简单方法。1.将背景bmp图片导入到工程,资源ID这里假设为IDB_BITMAP12.在视图类添加如下代码:[cpp]view plaincopy voidCSetBkMapView::OnDraw(CDC*pDC){CSetBkMapDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;//TODO:在此处为本机数据添加绘制代码//获取客户区大小CRectrcClient;GetClientRect(&rcClient);CBitmapbmp
阅读全文
摘要:使用VS 2008新建一个MFC ActiveX工程,因为在工程里要用到GDI+。我习惯把初始化GDI+库的代码放在应用程序类的InitInstance函数,对应的销毁代码放在ExitInstance函数。具体如下:先在应用程序类里定义一个数据成员:[cpp]view plaincopy ULONG_PTRm_gdiplusToken;然后添加初始化GDI+库的代码和对应的销毁代码:[cpp]view plaincopy BOOLCImagePreviewXApp::InitInstance(){BOOLbInit=COleControlModule::InitInstance();if(bI
阅读全文
摘要:1、不同线程的处理方法如何在2K/xp下使窗口获取焦点在2K/XP下我们可以用 AttachThreadInput 和SetForegroundWindow来有效的获取焦点。//捕捉并设置当前焦点窗口为我们的窗口AttachThreadInput( GetWindowThreadProcessId( ::GetForegroundWindow(),NULL), GetCurrentThreadId(),TRUE);//置我们的为焦点窗口SetForegroundWindow();SetFocus(); //释放threadAttachThreadInput( G...
阅读全文
摘要:转载地址:http://www.cnitblog.com/martin/archive/2006/04/21/9460.html 首先,应该是MFC报告我们发现内存泄漏。注意:要多运行几次,以确定输出的内容不变,特别是{}之间的数值,不能变,否则下面的方法就不好用了。我们来看看:F:/CodeSample/Test/TestPipe/LeakTest/MainFrm.cpp(54):{86}normalblockat0x00422E80,10byteslong.Data:1F1F1F1F1FCDCDCDCDCDF:/CodeSample/Test/TestPipe/LeakTest/MainF
阅读全文
摘要:基于文档视图结构程序的双缓冲绘图框架比较多,那么如何在对话框上绘图呢?以前通常的做法是拖一个静态文本控件或其它控件当作绘图区域或者在这个区域上创建一个视图出来。看了微软的一个示例程序DrawCli(一个绘图的单文档程序),产生了一些灵感,决心把它移植到对话框绘图上,摸索了一下,搞了一个基于对话框的简单双缓冲绘图框架。 具体代码如下,对话框头文件代码:[cpp]view plaincopy #include//@brief直线结构体structstLine{stLine(CPoint&Begin,CPoint&End){m_Begin=Begin;m_End=End;}//@br
阅读全文
摘要:MFCGrid control是一款非常优秀的网格控件,支持非常丰富的界面元素,如下图:因而在数据库程序及报表程序应用较为广泛,其源码可以在下面下载到:MFC Grid control2.27源码下载 MFC Gridcontrol的作者并没有将其封装为DLL,因为在程序的多个模块复用这个控件比较麻烦(需要在多个工程中加入其源码),因此最好将其封装为一个DLL。今天有同事反映在DLL的对话框中无法使用封装好的MFC Grid control,于是上网查了下资料,晚上摸索了一下,解决了这个问题。 MFC Grid control的作者在设计该控件并没考虑到在DLL中使用该控件,因此在其控件类CG
阅读全文
摘要:一般而言,在 Windows编程中创建对话框需要先定义一个对话框资源。我想能不能不用资源文件单纯通过代码创建对话框呢?晚上搜索了一些资料,研究了一下,基本实现了。我写了一个KDialog,代码如下(代码中有一些注释,相信大家能基本看懂):头文件的代码:[cpp]view plaincopy //kdialog.h#ifndefKDIALOG_H_INCLUDED#defineKDIALOG_H_INCLUDED#defineID_HELP150#defineID_EDIT180#defineID_TEXT200classKDialog{public:KDialog(HINSTANCEhinst
阅读全文
摘要:最近需要一个浮点数编辑框。所谓浮点数编辑框,就是限制输入只在”-1234567890.” 这些字符,其它字符不予输入(用户输错了冒一个气泡进行提示)。本想使用BCG库的CBCGPMaskEdit类,无奈该类允许重复输入小数点,不满足我的需求。于是上网搜了一个,发现是基于VS2010的。VS 2010的编辑框已经实现了自动冒泡提示了。但是我的工程是VS 2005的。于是我设法在VS 2005实现编辑框的冒泡提示。实际上这个也不难,主要是使用Edit_ShowBalloonTip宏。下面是编辑框的主体代码:[cpp]view plaincopy BEGIN_MESSAGE_MAP(CMyFloat
阅读全文
摘要:在CodeProject上找到一个动态调整对话框窗口大小的窗口类的资源:Dynamicchild window positioning,我感觉挺好用的。窗口基类是:cdxCDynamicWnd, cdxCDynamicWndEx。假如链接无效之后可以搜下这个。
阅读全文
摘要:根据我的实践,在Windows平台下设计并实现一个C++插件系统,需要解决几个关键技术问题。下面我谈谈需要解决的几个关键技术问题以及我想到的简单的解决思路。由于我主要专注于Windows平台C++程序的开发,这里假设以VS为编译环境,MFC界面库来说明。1. 主程序和插件的关系问题 插件架构一般可以用下面的图来表示:(注:此图来自李先静的博客文章:http://blog.csdn.net/absurd/archive/2006/07/04/877063.aspx,略有修改,特向李大侠表示感谢) 一般来说:应用程序框架所完成的功能应为一个软件系统的核心和基础,这些基本功能主要包括一些核心功能,即
阅读全文
摘要:C++编写的桌面软件中传统的App+Dll的架构已经显现出的模块之间的强耦合、维护性差、升级不方便等诸多弊端,为此我进行了一些思考,有兴趣的朋友请看我以前的一个思考片断:《Windows平台下C++插件系统实现的几个关键技术问题及其解决思路》,今天则具体介绍的我的一个具体设计和实现。 我的目标是要去除功能模块的相互依赖,在模块调用必须采用动态加载的办法,但同时各个模块可以进行自由地进行通讯。我的设想大致是这样的:在动态加载各个模块后调用统一接口后生成插件对象,在某个插件对象都能通过标识符找到其它的插件对象,通过统一的接口将数据传给它们。系统架构图如下:系统流程图如下: 大家可以看到,要构建这样
阅读全文
摘要:.\\与API函数GetModuleFileName获取应用程序目录有何不一样? 采用.\\也能获得应用程序目录,采用GetModuleFileName也能获得,二者有何不同? 一样!一个是相对路径,一个是绝对路径 .\\是的到应用程序的当前目录,但当前目录不一定等于应用程序执行文件的所在目录,一个应用程序被启动时,当前目录是可以被任意设置的。GetModuleFileName()得到模块的完整路径名,例如,你载入c:\windows\system32\a.dll,得到模块句柄h,则你可以用GetModuleFileName()得到h模块的完整路径名。 .\\一般用在包含头文件的语句中。另一个
阅读全文
摘要:API各函数作用简介1.控件与消息函数AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小AnyPopup 判断屏幕上是否存在任何弹出式窗口ArrangeIconicWindows 排列一个父窗口的最小化子窗口AttachThreadInput 连接线程输入函数BeginDeferWindowPos 启动构建一系列新窗口位置的过程BringWindowToTop 将指定的窗口带至窗口列表顶部CascadeWindows 以层叠方式排列窗口ChildWindowFromPoint 返回父窗口中包含了指定点的第一个子窗口的句柄ClientToScreen 判断窗
阅读全文
摘要:IntroductionThis class is derived from the MFCCDialog. It supports the following features :-If running on Windows 2000 or Windows XP, make any one color transparent so that you can see through regions of the dialogIf running on Windows 2000 or Windows XP, make the whole dialog translucentAdding a bi
阅读全文
摘要:IntroductionThis program demonstrates how to useCDHtmlDialogandSetWindowRgnfunctions to give a dialog non-rectangular HTML skins. If you are familiar with HTML, it will be faster than other ways to deal with beautiful skins. The idea comes from the article,"Gimme Some Skin... VideoSkins",
阅读全文
摘要:Using SetWindowRgnHomeBack To Tips PageIntroductionThere are lots of interesting reasons for creating odd-shaped windows. This essay explains how to create a window of unusual shape.One of the first questions you should ask is "Why?" There are lots of good reasons for needing to create odd
阅读全文
摘要:前一段在一个仿QQ的IM通讯工具中加入屏幕截图以及截图编辑功能,但是测试中发现当连续进行几十次截图后,系统会出现白屏,开始以为和win7经常闪白有关,屏幕截图截取到闪白的瞬间导致白屏,后来发现是GDI内存不足,申请不到GDI内存贴图失败所致。于是找了GDI泄露的工具,对程序进行GDI内存检测,下面就介绍两款GDI泄露检测工具的用法以及GDI编程的一些注意事项。第一款:GDIndicator 支持win7+xp 下载地址1、启动待检测的程序和GDIndicator,启动顺序没有要求,之后F5刷新,就能看到系统中所有进程,和使用的资源数找到想要查看的进程,这里我们的程序是 TPCommonCont
阅读全文
摘要:对开发中常见的内存泄露,GDI泄露进行检测一、GDI泄露检测方法:在软件测试阶段,可以通过procexp.exe 工具,或是通过任务管理器中选择GDI对象来查看软件GDI的对象是使用情况。注意点:Create出来的GDI对象,都要用DeleteObject来释放;Create出来的DC,都要用DeleteDC来释放,GetDC得出的DC,要用ReleaseDC来释放。以下是一些常用到的函数:1、 检查GetWindowDC(), 后面是否有ReleaseDC();2、 检测GetDC();后面是否有ReleaseDC();3、 检测画刷CBrush:CreateSolidBrush()-》 D
阅读全文
摘要:用.Net写的地图编辑器,最近在一个长时间使用的策划手里频繁挂掉。定位到原因应该是GDI泄露。但在几千行代码里手工寻找泄漏点实在是有些困难,直到在网上找到了这个检测GDI泄露的工具GDILeaks。它的强大之处,在于可以将程序里当前占用的gdi位图、dc用图形格式显示出来,这样,泄露点基本上就直接展示在你眼前了。另外,关于泄露为什么会发生,我还有些疑问。经检查,泄漏点是这样的C#代码void doSomeThing(){Bitmap tmpBmp = new Bitmap(100,100);returntransformBmp(tmpBmp); //这里对tmpBmp放大后存到一张新位图上返回
阅读全文