- 博客(24)
- 资源 (7)
- 收藏
- 关注
原创 浅析shared_ptr的enable_shared_from_this
浅析shared_ptr的enable_shared_from_this背景解决方法原理背景考虑以下场景,当一个对象被shared_ptr托管时,怎么从自身返回一个shared_ptr对象struct A{public: std::shared_ptr<A> GetSharedPtrFromThis() { return std::shared_ptr<A>(this); }};class B{public: void SetCallback(cons
2022-02-18 11:59:14 630
转载 WIN32界面开发之三:DUI雏形开发(二)
前言:上篇《WIN32界面开发之三:DUI雏形开发(一)》讲解了界面加载框架的创建,但我们的这些控件并没有起到控件的作用,现在还无法响应我们的点击事件和其它事件,所以我们先给我们的框架添加上EVENT事件机制,然后我们再讲解,为什么我们还要加上NOTIFY通知机制,以及如何添加NOTIFY机制。一、添加EVENT事件机制基本思想:以通知某个按钮LButtonDown为例,我们首
2014-04-17 17:15:57 1030
转载 WIN32界面开发之三:DUI雏形开发(一)
目录(?)[-]正文一CDialogBuilder的构建二控件与容器的构建三窗体创建前言:这部分涉及工程比较大,所以我打算分开为两篇来写,第一篇完成基本框架的构建,第二篇添加上EVENT和NOTIFY机制。完成目标:仿照DirectUI,完成一个基本雏形,开发一个布局控件(Dialog),和一个按钮控件(Button),通过XML来布局窗体,最后按钮响应
2014-04-17 17:00:38 1100
原创 深入解析ATL第六章笔记
1:多重继承之传递夹层由于C++的语法不能在派生类中区分来自不同基类,但原型一致的方法,所以类似的代码是不合法的class CAcePowerll:public ICowBoy, public IArtist{ STDMETHODIMP ICowBoy::Draw(); STDMETHODIMP IAartist::Draw();};若要在com类中实现来自不同接口
2013-12-24 23:28:51 987
原创 深入解析ATL第四章笔记
class ATL_NO_VTABLE CFun : public CComObjectRootEx,public CComCoClass,public IFun1:CComObjectRootBase提供了实现IUnknow的辅助函数,CComObjectRootEx从CComObjectRooBase派生并提供线程安全相关功能,IFun是自定义接口,CComCoClass定
2013-12-14 11:57:59 1353
原创 浅析ATL中类厂的创建及其IUnkown接口的获取
先贴2个很重要的数据结构:对象映射表和接口映射表struct _ATL_OBJMAP_ENTRY { const CLSID* pclsid; HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister); _ATL_CREATORFUNC* pfnGetClassObject; //创建类厂的函数指针
2013-12-07 16:29:52 2277
转载 ATL中CComobject相关类
1、CComObject :为独立激活的COM组件提供服务,功能包涵: (1)锁服务器。 (2)正常的引用计数。 (3)正常的QueryInterface。2、CComAggObject :为被聚合激活的COM组件提供服务,功能包涵: (1)锁服务器。 (2)包容接口实际类。 (3)正常的引用计数。 (4)将调用转发给内
2013-12-07 15:26:13 936
原创 __declspec(novtable)以及虚函数调用
MSDN上描述如下This is a __declspec extended attribute. This form of __declspec can be applied to any class declaration, but should only be applied to pure interface classes, that is, classes that wil
2013-11-21 16:47:16 989
原创 四月日志
memcpy,如果牵涉到文件映射,应检测dest buf的属性,如果是read_only则会被中断http://blog.csdn.net/yeming81/article/details/2046193
2012-04-09 16:53:03 765
转载 windbg检测句柄泄露(可定位到具体代码)
1、用c++写一个句柄泄露的样例程序:#include "stdafx.h"#include voidfun1(void);voidfun2(void);voidfun3(void);voidfun4(void);intmain(intargc, char* argv[]){while(1){fun1();fu
2012-04-09 16:42:21 3578 1
原创 3月日志
2012-03-09一个工作线程,如果在内部调用了GetMessage或者CreateWindow等函数,就变成了一个UI线程。在一个线程内部,是不能用Waitforsingleobject等待这个线程句柄的MFC多线程有个很严重的限制问题,MFC各对象(CWnd,CPen,CDC等等)和win32间的映射都存储在线程的TLS中,传递线程参数时,应传句柄而不是指针 2012-0
2012-03-09 10:48:59 856 1
原创 Webbrowse取消默认文件替换功能,并获取拖放文件路径列表
#include "StdAfx.h"#pragma once#include "oleidl.h"class IDropTargetImpl : public IDropTarget{public: IDropTargetImpl(void) { m_def=0; } ~IDropTargetImpl(void) { } HRESUL
2011-12-27 15:21:54 1123
转载 父窗口和窗口拥有者的区别
一、概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口。这个数据结构中有四个数据用来构建list,即child、sibling、parent、owner四个域。 所以我们可以看到,窗口之间的关系有两种:owner-owned 关系和 parent-child关系。前者称之为拥
2011-11-14 10:51:54 6220 1
转载 C++枚举
枚举类型是被当作常量来看待的。C和C++里面常量不太一样:1、 C里面常量就和普通变量没什么两样,都是在栈里面,而且是可寻址的(也就是除了不能更改以外和普通变量没有区别) 2、而C++里面的常量在编译的时候被放入符号表里面,如果没有显式要求,其将是不可寻址的访问类中的枚举元素:类名 : : 枚举元素名例如:class FileAcess{public:
2011-11-01 14:39:42 4080
原创 VC动态改变控件的TAB顺序
如果控件不是动态创建的,在资源模板里ctrl+d就能解决,如果是动态创建的方法有2。1:SetwindowPos,比如有2个CEdit,m_editAcc和m_editPass::SetWindowPos(m_editAcc.GetSafeHwnd(),HWND_TOP,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE ); ::SetWindowPos(m_editPa
2011-10-31 13:47:30 3266
转载 C++对象布局
今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译 译者前言 一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Obj
2011-10-31 12:52:37 1450
转载 对话框创建和销毁
非模态对话框相对于模态对话框,他的创建和销毁过程和模态对话框有一定的区别 先看一下MSDN的原文:When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow f
2011-10-24 15:38:16 849
转载 C++获取文件大小
#include iostream> #include io.h> #include sys\stat.h> #include afx.h> #define _AFXDLL using namespace std; void main() { // 此文件在工程打
2011-09-27 17:27:10 23636
原创 关闭显示器
::SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);//关闭 ::Sleep(500); ::SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPO
2011-09-15 22:44:40 773
原创 INI文件
遍历INI文件下某个section(最简单的配置): WritePrivateProfileStringA("test","ID","12341679","D:\\test1.ini"); char szBuffer[1024] = {0}; DWORD nLengt
2011-08-31 08:46:53 444
转载 前置声明与#include
首先,我们为什么要包括头文件?问题的回答很简单,通常是我们需要获得某个类型的定义(definition)。那么接下来的问题就是,在什么情况下我们才需要类型的定义,在什么情况下我们只需要声明就足够了?问题的回答是当我们需要知道这个类型的大小或者需要知道它的函数签名的时候,我们就需要
2011-08-18 23:51:56 691
原创 日志
............ HRESULT hr; IDispatch *pDisp = GetHtmlDocument(); IHTMLDocument2 *pDocument = NULL; IHTMLElement* pEl; IHTMLBodyElement * pBodyEl; hr = pDisp->QueryInterface(IID
2011-08-03 16:16:48 1001
原创 使用CToolTipCtr提示信息l
1:创建对象 CToolTipCtrl m_toolTip; EnableToolTips(TRUE); m_toolTip.Create(this); m_toolTip.Activate(TRUE);2:注册,以一个按钮为例 CButton *pButton
2011-07-27 17:25:34 1047
转载 WM消息及其lParam和wParam参数定义
1. WM_PAINT消息,LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高2. 滚动条WM_VSCROLL或WM_HSCROLL消息,LOWORD(wParam)指出了鼠标对滚动条的操作。比如上、下、左、右、翻页、移动等。3. 击键消息,有WM
2011-07-22 11:15:29 4874
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人