MFC
Ocean2006
这个作者很懒,什么都没留下…
展开
-
线程池理解
服务器程序利用线程技术响应客户请求已经司空见惯,可能您认为这样做效率已经很高,但您有没有想过优化一下使用线程的方法。该文章将向您介绍服务器程序如何利用线程池来优化性能并提供一个简单的线程池实现。线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾转载 2011-03-06 10:16:00 · 1553 阅读 · 0 评论 -
窗口对象的自动删除
一个MFC窗口对象包括两方面的内容:一是窗口对象封装的窗口,即存放在m_hWnd成员中的HWND(窗口句柄),二是窗口对象本身是一个C++对象。要删除一个MFC窗口对象,应该先删除窗口对象封装的窗口,然后删除窗口对象本身。 删除窗口最直接方法是调用CWnd::DestroyWindow或::DestroyWindow,前者封装了后者的功能。前者不仅会调用后者,而且会使成员m_hWnd转载 2010-03-28 15:21:00 · 1175 阅读 · 0 评论 -
MFC中控制Tips的显示
MFC中为ToolTips生成了一个类CToolTipCtrl,一般使用步骤如下: 1、 添加CToolTipCtrl成员变量 2、在父窗口中调用EnableToolTips(TRUE); 3、在窗口的OnCreate或者Dlg的OnInitialDlg中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串原创 2011-03-01 20:12:00 · 3056 阅读 · 3 评论 -
dll中DllMain的作用
dll被设计用来当作可共享的模块或者元件,当一个进程或者线程使用时,dll需要获取详细的信息!Win32提供这份信息的做法是调用dll的DllMain函数,即所谓的dll入点函数!该函数在dll被进程或者线程调用时自动由系统调用!作用如下: 1、接受通告信息:dll由线程或者进程加载、卸载 2、初始化dll的状态 3、涉及资源的进行正确的资源切换 4原创 2010-06-03 10:18:00 · 2845 阅读 · 0 评论 -
worker线程操作界面引起的死锁
一般来说涉及界面操作的工作都有UI线程完成,但是在多线程程序中worker子线程进行简单的界面操作也是常见的事情!worker线程和主线程(UI线程)同时更新界面时容易造成消息循环阻塞,引起死锁!引起消息循环阻塞的原因是worker线程没有自己的消息循环,其和主线程公用同一线程!引起死锁的原因是当子线程更新界面时需要发送消息向主线程消息队列,如果主线程没有wait或者sleep等该消息可以正常处理原创 2010-05-26 01:18:00 · 1511 阅读 · 0 评论 -
DllMain和多线程死锁
在Windows操作系统中,DLL(动态库)技术有很多优点。例如,多个应用程序可以共享一个DLL文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,有效地利用了内存,而且DLL文件作为一个单独的程序模块,封装性、独立性好,有利于提高软件开发和维护的效率。 DllMain是可选择的DLL入口指针,当进程和线程启动和终止时被系统调用,分别进行创建资源和释放资源等操作,特别地,也可以转载 2010-05-26 00:34:00 · 1225 阅读 · 0 评论 -
vs2005程序包发布时遇到的问题
vs2005程序包发布时经常采用depends查找程序依赖的所有库!但是即使找到所有依赖的dll、exe,在未安装vs2005开发平台的机器上也无法正常运行。一般会遇到两个问题: 1、由于应用程序配置不正确,由于程序未能启动,重新安装应用程序可能会纠正这个问题; 2、应用程序正常初始化失败; 究其原因,程序是以动态链接的方式使用依赖库,运行时需要在本地查找!所以原创 2010-05-06 23:13:00 · 2284 阅读 · 0 评论 -
DLL(Dynamic Link Libraries)专题
目录引言 调用方式 MFC中的DLL DLL入口函数 关于约定 关于DLL的函数 模块定义文件(.DEF) DLL程序和调用其输出函数的程序的关系 作者 引言 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都转载 2009-12-21 22:40:00 · 2122 阅读 · 0 评论 -
由dll调用中的warning C4273和Link2019想到的
最近经常调用外部dll,使用dll导出的动态库和变量,开发过程中警告“warning C4273: dll链接不一致”以及Link2019的错误引起我了的注意!百度之,还是要牵扯到声明与定义的关系(函数、变量)! 首先,警告“warning C4273: dll链接不一致”的产生是由于dll导入导出(__declspec(dllexport)、__declspec(dllimport)原创 2010-02-08 17:06:00 · 4373 阅读 · 0 评论 -
模态对话框与非模态对话框
对话框分模态对话框和非模态对话框,两者呈现的区别就是:前者获得程序的焦点,垄断用户输入;后者则相反,用户可以同时操作当前对话框和其他窗口。 非模态对话框的设计与模态对话框基本类似,也包括设计对话框模板和设计CDialog类的派生类两部分。但是,在对话框的创建和删除过程中,非模态对话框与模态对话框相比有下列不同之处: 1、非模态对话框对象是用new操作符在堆中动态创建的,而不原创 2010-03-28 15:17:00 · 1196 阅读 · 0 评论 -
wsdl2h解析器和soapcpp2编译器选项介绍
1、wsdl2h(利用wsdl文件生成对应的h文件)用法** The gSOAP WSDL parser for C and C++ 1.2.9c** Copyright (C) 2000-2007 Robert van Engelen, Genivia Inc.** All Rights Reserved. This product is provided "as is", w转载 2010-04-15 22:52:00 · 9389 阅读 · 3 评论 -
gsoap使用心得
程序开发中使用了几次gsoap,感觉这个工具十分强大,能够使得C/C++程序十分简单的调用web服务,而我们需要的就是填充调用服务的参数,发起服务即可!为了进一步了解gsoap,特意看了下相关知识,就算有一个概念性吧,毕竟开发知识这个东西只有到真正用到的时候才会有更深刻和具体的了解。下面是对gsoap一个简单的介绍! gsoap是一种编译工具,提供了一个SOAP/XML 关于C/C+原创 2010-04-15 21:24:00 · 10973 阅读 · 8 评论 -
VC++工程头文件重复和循环引用
复杂工程中头文件众多,很容易发生包含顺序、重复引用以及循环引用导致的编译链接错误!最近整理工程中文件引用时遇到不少这方面的问题!一般来说,包含顺序问题会导致某些类型、函数等无定义,只要对工程有功能、框架性的了解,这方面的问题很容易避免! 重复引用在几乎所有的工程中随处可见,如果头文件格式不对,重定义的错误提示跃然纸上!一般来说,有两种方式可以在重复引用头文件而不发生错误:原创 2010-03-31 21:54:00 · 4585 阅读 · 0 评论 -
csv文件简介
CSV逗号分隔值文件(Comma Separated value),是一种用来存储数据的纯文本文件格式,通常用于电子表格或数据库软件。在VC中读写CSV文件与一般的文本文件没有太大差别,编程时只需遵循CSV文件的规则: 0 开头是不留空,以行为单位。 1 可含或不含列名,含列名则居文件第一行。 2 一行数据不垮行,无空行。 3 以半角符号,作分隔符,列为空也要表达其转载 2010-04-15 23:15:00 · 2188 阅读 · 0 评论 -
MFC消息映射机制详解
Windows程序和MFC程序是靠消息驱动的,他们对于消息的处理本质上是相同的。只是Windows程序对于消息处理的过程十分清晰明了,MFC程序则掩盖了消息处理的过程,以消息映射的方式呈现在开发者面前,使得开发消息的处理十分简单。用多了mfc就想对它的消息映射机制有一个本质的了解,下面将对消息映射做详细的分析。当然,在分析MFC消息映射之前首先对Windows程序的消息处理过程进行一个简单的描述。原创 2010-04-18 02:22:00 · 17839 阅读 · 1 评论 -
mfc对象指针不能在线程间传输!
对于大多数mfc对象,请不要在线程间传递它们,不管是栈上的还是堆上的!原因如下: 1、 mfc的大多数类不是线程安全的,调用传入对象的成员函数可能不会报错,但是未必能达到程序预定的功能! 2、 mfc与界面有关的类,其大多数成员方法都是通过sendmessage实现的,如果消息处理函数本身不是线程安全的,你从工作线程中调用这些方法迟早会同你界面线程的用户消息响应发生冲突原创 2010-11-10 20:53:00 · 2826 阅读 · 0 评论 -
mfc中0xC015000F:正在被停用的激活上下文不是最近激活的bug
最近调试程序时遇到了关于AfxDeactivateActCtx的错误,看堆栈也没任何信息量!崩溃的地方如下: BOOL AFXAPI AfxDeactivateActCtx(DWORD dwFlags, ULONG_PTR ulCookie){ BOOL rc = pfnDeactivateActCtx != 0 ? pfnDeactivateActCtx(dwFlags,原创 2010-08-12 00:25:00 · 9612 阅读 · 1 评论 -
dll中的dllmain函数
应用程序调用dll的资源时(比如dll的对话框),必须进行资源切换,否则程序会死掉!一般dll环境初始化和资源初始化会放在dllmain中,那么资源切换怎么进行呢?1、Dll中的DllMain函数 1.1 DllMain简介 跟exe有个main或者WinMain入口函数一样,DLL也有一个入口函数,就是DllMain。以”DllMain“为关键字,来看看MSDN帮助转载 2010-05-26 01:01:00 · 1610 阅读 · 0 评论 -
简谈mfc滚动条实现
给窗口加滚动条是经常遇到的事情,也不是一件困难的事情! 一般来说,滚动条要实现两方面的功能: 1、滚动条范围、滑块位置和长度正确的变化; 2、窗口随滚动条的合理变化; 为达到上述两方面的功能,需要响应下面三个消息: 1、OnVScroll和OnHScroll:需要正确设置滑块的位置nPos(SetScrollPos),合理的移动窗口(ScrollWindow原创 2010-04-25 11:09:00 · 6565 阅读 · 0 评论 -
动态链接库、静态库区别与VS2005项目相关设置
一、动态链接库、静态库区别 二、VS2005项目相关设置 三、#pragma预处理指令 动态链接库、静态库区别 1、动态链接库(Dynamic Linked Library) Windows系统平台上你可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当原创 2010-02-04 23:47:00 · 11532 阅读 · 6 评论 -
删除系统菜单的方法
最近用到了系统菜单,按照网上的说法是如下面实现的: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; CWnd* pMain = AfxGetMainWnd(); // The原创 2010-01-18 00:11:00 · 929 阅读 · 0 评论 -
VC++中的Link error 2005/2001
VC++中Link2005/2001是开发人员在开发过程遇到的问题,一直想搞清楚这类错误的原因!总结网上的资料,先总结如下。 编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚原因,就可以轻松解决它了。造成LNK2005错误主要有以下几种情况:1.重复定义全局变量。 A、需要使用全局变量的地方使用定义转载 2010-01-27 23:50:00 · 2833 阅读 · 0 评论 -
mfc控件位置调整
在mfc工程中控件或者窗口位置的调整是经常遇到的,特别是基于对话框的工程。位置的调整包括坐标、长度和宽度的变化,一般在窗口类的OnSize函数中实现。控件位置的调整涉及的函数有:GetWindowRect()、ScreenToClient()、GetClientRect()、MoveWindow()或SetWindowPos(),功能意义如下:GetWindowRect():获得窗口在屏幕原创 2010-01-26 00:27:00 · 6476 阅读 · 0 评论 -
再谈Link2019 error
在一个工程引用dll时,容易产生以下的link错误: test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) testDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) testDlg.obj : err原创 2010-03-03 09:52:00 · 5700 阅读 · 0 评论 -
mfc消息反射机制简介
在Windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就想是从父窗口反射回来一样,故此得名:消息反射。 消息反射机制剥离了子父控件之间的关系,简化了父控件的功能和实现。一般来说,消息反射机制的传递过程如下: 1、控件原创 2010-04-22 00:53:00 · 1876 阅读 · 0 评论 -
MFC消息循环和消息泵
首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage)、消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程式中(应用程式类基于CWinThread继承),必须要有一个消息循环,它的作用是从应用程式的消息队列中读取消息,并把他派送出去(::DispatchMessage)。而消息路由是指消息派送出去转载 2010-04-18 22:35:00 · 3999 阅读 · 0 评论 -
mfc中窗口按比例变化
常用的视频播放器拖动窗口大小时都是按比例变化的,项目中也经常需要实现一个按比例变化的窗口。在mfc中实现窗口的比例变化十分简单,只需要在两个重载函数中按照固定比例设定窗口大小即可——OnSizing和OnGetMinMaxInfo。 首先,在OnGetMinMaxInfo中按比例设定最大值或者最小值。如下所示: void CTestDlg::OnGetMinMaxInfo(MI原创 2010-03-28 15:36:00 · 4405 阅读 · 5 评论