zip's

while(true) { Write it down; Think about it; Refine it; Sleep(); }

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

如果你的 MFC 程序调用 dll ,并且遇到与 handle 相关的错误,多数可以通过这两个宏来解决。简单的讲,每个模块,exe 或者 dll, 都模块内维护了一些状态,例如:句柄map,当使用句柄时,必须切换至正确的模块状态。一个常见的问题是,你的 exe 调用 dll 中一个 function,function 创建一个对话框,可是这个对话框怎么也创建不出来。这是因为,定义对话框的资源ID都定义在 dll 中,当前的模块状态却是 exe 状态,只需在 function 的入口处加入上面所列的第一宏,通常就可以解决这个问题。参加:MSDN

AFX_MANAGE_STATE(AfxGetStaticModuleState()); // dll  
AFX_MANAGE_STATE(AfxGetAppModuleState()); // exe

 

取鼠标位置

LRESULT CMyWndClass::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)  
{
CPoint point;
point.x = GET_X_LPARAM(lParam);
point.y = GET_Y_LPARAM(lParam);

...

bHandled = false;
return 0;
}

 

chain message map, ATL 工程

public class AFX_EXT_CLASS CMyWndClass :  
public CWindowImpl<CMyWndClass>,
public CMyWndClassBase<CMyWndClass>,
{
public:
BEGIN_MSG_MAP(CCanvas)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
CHAIN_MSG_MAP(CPlotter<CCanvas>)
END_MSG_MAP()

...
};

 

ATL 编写 COM 组件,实现 Singleton

DECLARE_CLASSFACTORY_SINGLETON(CMyClass)

-

posted on 2011-06-08 14:21  zip's  阅读(259)  评论(0编辑  收藏  举报