![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++/MFC
文章平均质量分 53
一梦一程
这个作者很懒,什么都没留下…
展开
-
API 根据句柄 获得进程可执行文件路径的几种方法
想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好。第二种方法是GetProcessImageFileName函数,这个函数在Windows XP及其以后的系统中都能使用,使用此函数返回的路径不是通常的系统盘符,如"C:\...",而是驱动层的表示方转载 2016-07-16 20:00:55 · 2414 阅读 · 0 评论 -
CDC * pdc 指针 与 hdc 转换
1.CDC *pDC和HDC hdc有什么不同,类似的有CWnd *pWnd和HWnd?pDC是类指针HDC是windows句柄通过pDC获得hdc:HDC hdc=pDC->GetSafeHdc();通过hdc获得pDC:CDC *pDC=new CDC;pDC->Attach(hdc);2.hDC和CDC有本质区别HDC是WINDOWS的一种数据类型,是设备描述句柄。而CDC是MFC里的一个类转载 2016-07-16 20:00:58 · 1558 阅读 · 0 评论 -
关于MFC中WM_MOUSEHOVER和WM_MOUSELEAVE消息的使用
默认情况下,窗口是不响应WM_MOUSELEAVE和WM_MOUSEHOVER消息的,所以要使用_TrackMouseEvent函数来激活这两个消息。调用这个函数后,当鼠标在指定窗口上停留超过一定时间或离开窗口后,该函数会Post这两个消息到指定窗口。使用方法:1.在对话框类中定义一个变量来标识是否追踪当前鼠标状态,之所以要这样定义是要避免鼠标已经在窗体之上时,一移动鼠标就不断重复产生WM_MOU转载 2016-07-16 20:01:01 · 1721 阅读 · 0 评论 -
MFC无标题栏对话框移动的处理方法
很多时候,为了界面的美观,我们会隐藏标题栏,而在客户区通过自绘模拟标题栏。但是这样处理,会导致窗体无法移动。下面提供几种移动方法: 1、采用欺骗的方式。即当鼠标点击客户区的时候,我们欺骗windows,让windows认为我们点击在了标题栏,这样,拖动过程就通过windows进行处理了。因此可以大大减少我们的代码量。具体方法如下:响应鼠标左键按下消息WM_LBUTTONDOWN,相应函数中,原创 2016-07-16 20:01:04 · 3446 阅读 · 2 评论 -
MFC下在利用控制台输入输出 方便调试
MFC下利用TRACE语句可以很方便的打印调试信息,但是有些时候如果要打印另外的信息,为了分析数据的方便,不想与TRACE的信息混在一起。这个时候,利用控制台输出就是一个比较不错的捷径。虽然有很多局限性,比如,只能开一个控制台等等,但是,这个方法还是比较有吸引力,因为其使用就如同控制台程序一样,比读写文件少一个文件指针。使用方法如下,具体请参考MSDN。 AllocConsole();转载 2016-07-16 20:01:07 · 3232 阅读 · 0 评论 -
C++类的构造函数不能为虚函数的原因
1 C++类的对象构造的时候,首先申请一片内存,然后调用构造函数进行初始化;我们知道,存在虚函数的话,也会存在一个虚函数表vtable,而虚函数表示在什么时候产生的呢,当然是在调用构造函数之后产生的;那么问题来了,如果构造函数为虚函数,此时的内存是一片空白,不存在该虚函数表vtable,那么无法找到该构造函数;所以说,构造函数不能为虚函数。2 此外,如果有以下代码:class A{ A()原创 2016-07-16 20:01:12 · 356 阅读 · 0 评论 -
C++中的虚函数、纯虚函数
C++最重要的特性就是多态,而多态,就主要通过虚函数实现的。具体的实现过程是:基类中的函数定义为虚函数,派生类发生覆盖(即函数名称、参数列表、返回值类型完全相同)的情况下,派生类中的函数也会自动变成虚函数,不论加不加virtual关键字。此时,基类与子类对象中都会存在一张虚函数表(因为含有虚函数),具体虚函数表的结构可以参照这篇文章:http://blog.csdn.net/haoel/artic原创 2016-07-16 20:01:23 · 332 阅读 · 0 评论 -
线程池原理及创建(C++实现)
原文出处:http://www.cnblogs.com/lidabo/p/3328402.html本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。为什么需转载 2016-07-16 20:01:26 · 796 阅读 · 0 评论