难题,MFC DLL 内直接继承CWnd,使用CreateEX失败,GetLastError()为0

eco12345 2016-07-05 04:48:33
这个问题很棘手.
一般MFC dll 导出函数用AFX_MANAGE_STATE(AfxGetStaticModuleState());就可以正确使用各种控件了.
但是我的其中一个类是继承CWnd(不想其他的是继承CDialog CEdit这些),使用CWnd中的CreateEX或者Create(),但是都会失败.

求教是怎么回事,我找了好久也找不到方法



BOOL CPPToolTip::Create(CWnd* pParentWnd, BOOL bBalloon /* = TRUE */)
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState()); ------>这个没用!
TRACE(_T("CPPToolTip::Create\n"));

ASSERT_VALID(pParentWnd);

DWORD dwStyle = WS_POPUP;
DWORD dwExStyle = WS_EX_TOOLWINDOW | WS_EX_TOPMOST;
m_hParentWnd = pParentWnd->GetSafeHwnd();


if (!CreateEx(dwExStyle, PPTOOLTIP_CLASSNAME, NULL, dwStyle, 0, 0, 0, 0, pParentWnd->GetSafeHwnd(), NULL, NULL))
{
//printf("错误 %x %x\n",GetLastError(),pParentWnd->GetSafeHwnd()); --------->创建是失败的!
return FALSE;
}

//
SetDefaultSizes(bBalloon);
m_drawer.SetCallbackRepaint(this->GetSafeHwnd(), UDM_TOOLTIP_REPAINT);
SetDelayTime(PPTOOLTIP_TIME_ANIMATION, 100);

return TRUE;
} //End of Create
...全文
268 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-07-05
  • 打赏
  • 举报
回复
一窍不得,少卖几百。
eco12345 2016-07-05
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
直接继承自 CWnd 的话 需要先注册窗口类 LPCTSTR szClassName = AfxRegisterWndClass(0); CreateEX(dwExStyle, szClassName, xxxxxxx
谢谢兄弟!我找了一个下午,顶不上你一句话!
zgl7903 2016-07-05
  • 打赏
  • 举报
回复
直接继承自 CWnd 的话 需要先注册窗口类 LPCTSTR szClassName = AfxRegisterWndClass(0); CreateEX(dwExStyle, szClassName, xxxxxxx

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧