C++ 如何在ATL DLL中获取HWND(用于SendMessage或PostMessage)
我想在ATL DLL中获取线程中SendMessage或PostMessage函数的HWND。 但是,ATL DLL没有窗口 如何在ATL DLL中获取HWND? 项目应用程序设置:DLL(动态链接库),安全开发生命周期,(不支持MFC)C++ 如何在ATL DLL中获取HWND(用于SendMessage或PostMessage),c++,vb.net,visual-c++,dll,atl,C++,Vb.net,Visual C++,Dll,Atl,我想在ATL DLL中获取线程中SendMessage或PostMessage函数的HWND。 但是,ATL DLL没有窗口 如何在ATL DLL中获取HWND? 项目应用程序设置:DLL(动态链接库),安全开发生命周期,(不支持MFC) 类选项:单元、聚合是、双接口、连接点 HelloCtrl.cpp(VB客户端正在处理ShowMessage()) HelloCtrl.h #define WM_THREADFIREEVENT (WM_USER+1) BEGIN_MSG_MAP(CHelloC
类选项:单元、聚合是、双接口、连接点
HelloCtrl.cpp
(VB客户端正在处理ShowMessage())
HelloCtrl.h
#define WM_THREADFIREEVENT (WM_USER+1)
BEGIN_MSG_MAP(CHelloCtrl)
CHAIN_MSG_MAP(CComControl<CHelloCtrl>)
DEFAULT_REFLECTION_HANDLER()
MESSAGE_HANDLER(WM_THREADFIREEVENT, OnLeftButtonDown)
END_MSG_MAP()
public:
STDMETHOD(ShowMessage)(BSTR bstrCaption, VARIANT_BOOL* lpvbResult);
LRESULT OnLeftButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
void LeftButton();
private:
HANDLE m_hThread_ReadData;
static DWORD WINAPI T_ReadData(LPVOID pParam);
#定义WM_THREADFIREEVENT(WM_用户+1)
开始消息映射(CHelloCtrl)
链图(CComControl)
默认反射处理程序()
消息处理程序(WM_THREADFIREEVENT,OnLeftButtonDown)
END_MSG_MAP()
公众:
STDMETHOD(ShowMessage)(BSTR BSTR选项,变量布尔*lpvbResult);
LRESULT OnLeftButtonDown(UINT/*uMsg*/,WPARAM/*WPARAM*/,LPARAM/*LPARAM*/,BOOL&/*bHandled*/);
void LeftButton();
私人:
处理m_hThread_ReadData;
静态DWORD WINAPI T_读取数据(LPVOID pParam);
窗口是进程或模块可能拥有或不拥有的对象,或者如果需要,它可以创建一个对象。也就是说,如果不指定您要查找的窗口类型及其HWND
句柄,您的问题就没有答案。DLL和HWND是不相关的
从上下文来看,您似乎需要一个窗口,可以使用该窗口进行消息传递和在线程之间传输执行控制。也就是说,您可以在某个地方发布,然后在其他地方处理,将线程魔法留给windowsapi
在这种情况下,您可以重用现有窗口中的一个,例如为ActiveX控件创建的窗口,您只需创建自己的窗口即可完全控制并用于您的目的。对于后者,你从中得到了。。。看见前者可能更简单,但可能不是:ActiveX控件不必有窗口,在这种情况下,它们是无窗口控件。同时,您可以选择使用强制窗口控件,请参见。如果没有窗口,则没有hWnd。
#define WM_THREADFIREEVENT (WM_USER+1)
BEGIN_MSG_MAP(CHelloCtrl)
CHAIN_MSG_MAP(CComControl<CHelloCtrl>)
DEFAULT_REFLECTION_HANDLER()
MESSAGE_HANDLER(WM_THREADFIREEVENT, OnLeftButtonDown)
END_MSG_MAP()
public:
STDMETHOD(ShowMessage)(BSTR bstrCaption, VARIANT_BOOL* lpvbResult);
LRESULT OnLeftButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
void LeftButton();
private:
HANDLE m_hThread_ReadData;
static DWORD WINAPI T_ReadData(LPVOID pParam);