VC2003 中将现有窗口过程插入 ATL ActiveX

来源:互联网 发布:java jdbc 连接数据库 编辑:程序博客网 时间:2024/05/18 11:11

近期接到一个任务,将自己写的一个图片编辑器做成 ActiveX,翻了翻代码看到图片编辑器的源程序是基于 SDK 和 GDI+ 的,于是就用 ATL 创建了一个基本样式的 ActiveX 控件,然后在它的 MSG_MAP 中连接相应窗口消息,直接把图片编辑器的主窗口消息过程填了上去:

BEGIN_MSG_MAP(CPicEditCtl)
 
if (uMsg == WM_CREATE ||
  uMsg 
== WM_COMMAND ||
  uMsg 
== WM_NOTIFY ||
  uMsg 
== WM_DESTROY)
 {
  bHandled 
= TRUE;
  lResult 
= UWMWndProc(hWnd, uMsg, wParam, lParam);
  
if (bHandled)
   
return TRUE;
 }
 CHAIN_MSG_MAP(CComControl
<CPicEditCtl>)
 DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()

由于用到 ImageList_LoadImage(HINSTANCE, ID) 函数,所以在处理 WM_CREATE 的时候,在函数中增加了一行,获取实例句柄:

g_hInst = (HINSTANCE)GetWindowLongPtr(hWnd, GWL_HINSTANCE); 

运行后测试还能用,但似乎有些资源释放方面的问题……再说吧

原创粉丝点击