注意:我的环境是:窗口类再DLL中,使用无模式显示方式显示窗体。一下几种情况都是可以正常显示TIP的:1) 不在DLL 中, 在主进程中,无模式和模式都可以。
2) 在DLL 中,模式窗体可以正常显示,
不能正常显示的情况:非模式 + DLL;
在这种情况下,连PreTranslateMessage的代码都不执行了,
诸位高手,这是为何?
2) 在DLL 中,模式窗体可以正常显示,
不能正常显示的情况:非模式 + DLL;
在这种情况下,连PreTranslateMessage的代码都不执行了,
诸位高手,这是为何?
AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();
CHandleMap* pHandleMap = pState->m_pmapHWND;if (pHandleMap)
{
if (pHandleMap->LookupPermanent(pWnd->GetSafeHwnd()))
pHandleMap->RemoveHandle(pWnd->GetSafeHwnd());
pHandleMap->SetPermanent(pWnd->GetSafeHwnd(), pWnd);
}
1)定义一个接口。如:
Class CIA
{
virtual HRESULT Test()=0;
}2)
写一个窗口类,如:
Class CTestDialog : public CDialog (....)
{
......
CToolTipCtrl m_ToolTip;
virtual BOOL PreTranslateMessage(MSG* pMsg);
.............
}3)写一个类继承自接口,内含一个CTestDlg 成员变量
Class CTestIA : public CIA
{
HRESULT test();
..........
private:
CTestDlg m_TestDlg;
..........
}
4) 写一个类厂:
Class FA
Class CFactory
{
CreateObject(ID,**object)
{
if (ID==IA)
CTestIA *pIA=new CTestIA;
*object=static_cast<CIA*>(pIA);
..............
}
}5)输出一个函数:
HRESULT STDCALL GetFactory(ID,**object)
{
if (ID==FACORY)
{
CFactory *pFac=new CFactory();
*object=*pFac;
return S_OK;
}
.......
}6)客户:GetFactory(.....pFac);
pFac->CreateObject(...pIA);pIA->DoSomething(.....)//里面显示非模式窗体CTestDlg
如此。.......................
不能正常显示TOOLTIP.
include 头文件: #include "..\src\winhand_.h"
找不到头文件:(
//
头文件找着了,但是没有作用:(
我测试过了,即使只要简单的执行,一样的没有TOOTIP,( 在非模式下 )
DLL输出代码如下:void TestDialog(CWnd *pwnd)
{
AFX_MANAGE_STATE(::AfxGetStaticModuleState())
CTestDlg *pDlg;
pDlg=new CTestDlg(pwnd);
pDlg->Create(IDD_TEST);
pDlg->ShowWindow(SW_SHOW);
}///
*/
AFX_MODULE_THREAD_STATE* pBaseModuleThreadState = pBaseModuleState ->m_thread.GetData();
CHandleMap* pHandleMap = pBaseModuleThreadState->m_pmapHWND;if (pHandleMap)
{
if (pHandleMap->LookupPermanent(pDlg->GetSafeHwnd()))
pHandleMap->RemoveHandle(pDlg->GetSafeHwnd());
pHandleMap->SetPermanent(pDlg->GetSafeHwnd(), pDlg);
}