DOM懒加载 Detour IDE 窗口刷新
//---------------------------------------------------
赖加载:只需要接口ID,不需要CLSID;
抛扩展:实现解耦;
属性化:大型C++工程必备,但必须注意enum,export;
弱COM: COM保密必须;
DCOM通讯:平台控制进程实例个数及对多进程管理;
DCOM连接点:使用ATL,完善各个IDispatch方法;
进程外网页:保证主进程的速度及稳定性;
自定义协议:从网页启动;
第三方组件:HexEdit.ocx, list,mem,scroll,tipedit,button,comsink,hyperlink,menu,htmlview;
TLV协议:tag, length, value
UI布局: 原有的结合自己想的。
智能指针:AtlComPtrAssign, 引用加减
小技巧:短路,do while, namespace, 泄漏追踪?进程通讯内容?
//---------------------------------------------------
Detour: API钩子,远程线程,对重定位的理解(call,pop,sub);
MFC: CFile|CStdioFile,CMemFile,CMemFile,CSocketFile
MFC: winmain.cpp; thrdcore.cpp; appcore.cpp; appmodule.cpp
MFC: CWinThread|InitInstance > Run > OnIdle
只有WM_PAINT WM_SYSTIMER(caret blink)不是Idle消息,其它都是Idle消息,
例外的是WM_MOUSEMOVE WM_NCMOUSEMOVE 坐标位置没变,也被认为不是Idle消息。
MFC:消息映射表驱动
MFC: CArray,CList,CMap;
MFC: CSingleLock; CCriticalSection;
CRT: /ML(single thread, libc.lib) /MT(multi thread, libcmt.lib) /MD(dll, msvcrt.lib)
ATL: 窗口thunk技术将hwnd变成CWnd*; CPath; CRegKey;
ATL: CAxWindow, CAxHostWindow, SubclassWindow
//---------------------------------------------------
IDE: General|Inherited Project Property Sheets|setting.vsprops;
IDE: C/C++|General|Include Directories;
IDE: C/C++|Preprocessor|Preprocessor Definitions
IDE: C/C++|Code Generation|Runtime Library;
IDE: C/C++|Output Files|Expand Attributed Source(可以修改atl属性产生的代码);
IDE: Linker|General|Output File
IDE: Linker|General|Register Output
IDE: Linker|General|Additional Library Dir;
IDE: Linker|Input|Additional Dependencies;
IDE: Linker|Embeded IDL|Ignore Embeded IDL
============================================
DLL中的窗口,如果窗口类不是以指针形式存在,则在NcDestroy时候需要Detach,否则其父窗口析构时会检查到Detach/Attach不平衡(Create时候有调用Attach); 如果是以指针形式存在,则不会有由问
题,因为堆内存的删除由程序主动控制的。
PreSubclass中,如果窗口是在非对话框窗口中,窗口大小可能会为0
WM_CTLCOLOR
返回的笔刷用于刷底,所有如果是返回NULL刷子,父窗口不能有WS_CLIPCHILDREN style
static 控件如果用于显示gif动态图的话,不能返回NULL刷子,否则动不起来。但是更新HBITMAP时可以不用call Invalidate
测试窗口刷新是否正常:一是最小化再还原测试;二是用其它窗口盖住测试;三是刚刚创建时初始状态。