为何CreateControl创建的控件无法显示

DanielWYO 2010-03-08 09:43:48
使用CWnd::CreateControl创建了一个WebBroswer控件, 没有任何错误发生, 但是控件无法显示.
从调试的结果来看, 控件已经正常创建, 甚至执行Navigate也可以返回S_OK, 但是界面上就是无法显示.
请求帮忙, 为何执行起来一切正常的代码, 就是无法显示出控件?

环境:
Windows Mobile 6.0模拟器.
Visual Studio 2005.

代码如下:
在OnCreate函数中.
RECT rcClient;
GetClientRect(&rcClient);
rcClient.top += 100;
rcClient.bottom -= 100;


m_wndBrowser.CreateControl(CLSID_WebBrowser, L"",
WS_CHILD|WS_VISIBLE,
rcClient, this,
AFX_IDW_PANE_FIRST);
//确定创建控件可以成功

m_pUnknown = m_wndBrowser.GetControlUnknown();

HRESULT hr = m_pUnknown->QueryInterface(IID_IWebBrowser2,
(void**)&m_pWeb);
//IWebBrowser2 接口也可以正常的获得, 返回S_OK.

HRESULT hRes = m_pWeb->Navigate(L"http://www.google.cn", NULL, NULL, NULL, NULL);
//调用Navigate的过程同样的也能执行, 也是返回S_OK.
if (hRes == S_OK)
return 0;

//说明一下: 获取m_wndBrowser的位置的时候, 也可以保证, 获取到位置是正常的, 足够显示, 父窗口也没有隐藏.
//但是判断m_wndBrowser是否是Visiable的时候, 发现不是Visiable, 就算Show也无用, 仍然不是Visiable.


return FALSE;
...全文
230 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sevenzhy 2010-03-09
  • 打赏
  • 举报
回复
用BringWindowToTop() 或者SetForeGroundWindow()试试
DanielWYO 2010-03-09
  • 打赏
  • 举报
回复
to dyw:
错误不在于返回值是TRUE或者0.
当然, 我也试过你这样的返回TRUE. 不过结果是一样的, 仍然无法显示出控件.

to lincyang:
API是通用的. 我可以确定.
这样的代码, 在Windows CE上也是可行的, 就是在WM上不能显示出控件.

在MSDN上, 还有另外一种方式来控制IE控件, 就是通过DTM_BROWSERDISPATCH消息来获得IDispatch, 再获得IBrowser接口, 不过IBrowser接口在WM6上我已经找不到了, 可是那种情况下使用IWebBrowser2, 却返回错误, 不存在这样的接口.
MSDN上的原文如下:
Returns the HTML viewer control's IDispatch pointer. Use it to call QueryInterface(IID_IBrowser, &pBrowser) to retrieve the HTML viewer control's IBrowser interface.
关于IWebBrowser2接口, MSDN上只有简单的一句话:
IBrowser, IBrowser2 and IBrowser3 are deprecated and will not be supported in future versions. Instead use IWebBrowser2 and DWebBrowserEvents2.
dyw 2010-03-09
  • 打赏
  • 举报
回复
> if (hRes == S_OK)
> return 0;
此处应该返回TRUE吧。对HRESULT值的判断使用宏可能会更稳妥些,尽管展开后可能是一样的。但万一宏定义有变更你的程序问题将会更少。
if (SUCCEEDED(hRes))
return TRUE;
全速前行 2010-03-09
  • 打赏
  • 举报
回复
api不通用?
很有这种可能啊
DanielWYO 2010-03-09
  • 打赏
  • 举报
回复
关于位置问题, 并没有设置, 代码中已经标注了. 是通过GetClientRect(&rcClient); 获得的, 而主窗口, 是正常显示的.
当然了, 实际调试的时候, 也可以确定m_wndBrowser这个控件的位置数值是正常的, 就是visiable无论如何设置, 永远是FALSE.
DanielWYO 2010-03-09
  • 打赏
  • 举报
回复
我还确实怀疑过IE控件消失的情况可能是窗口被隐藏了之类的.
而且我也使用过Bringtotop, 可惜同样的没有结果.

世外涛缘 2010-03-08
  • 打赏
  • 举报
回复
怪异了,还不是显示位置的问题?
楼主还是将设置给控件的位置说下吧。
关注楼主怎么解决问题的。
DanielWYO 2010-03-08
  • 打赏
  • 举报
回复
诡异的是
把代码拿到Windows的环境下, 发现执行正常.
但是拿回到Windows Mobile的环境下, 就无法显示控件.

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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