为什么CreateWindow创建AtlAxWin是为什么会打开网页啊?

ggw007 2012-10-31 04:40:32
rt
用下面的函数创建窗口,szWndProgID有效时可以正确创建控件,当szWndProgID不正确却打开网页了,这是怎么回事?
怎么禁止函数打开网页?

::CreateWindow("AtlAxWin", szWndProgID,
WS_CHILD | WS_VISIBLE /* | WS_BORDER */,lLeft,lTop,lWidth, lHigh,
GetSafeHwnd(), (HMENU)(IDW_WNDCTRL + i), ::GetModuleHandle(NULL), NULL);

szWndProgID为COM控件的ProgId



...全文
191 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
redui 2012-11-01
  • 打赏
  • 举报
回复
禁止不了,除非你确保szWndProgID中不包含冒号,最好传递正确的PROGID,如果不知道机器上该PROGID是否存在,在创建之前自己测试一下PROGID是否有效。
ggw007 2012-11-01
  • 打赏
  • 举报
回复
有没有禁止函数打开网页的选项啊?
ggw007 2012-11-01
  • 打赏
  • 举报
回复
没有冒号的,只有点, 像这样子的 Rrg.Samp.Ctrl
redui 2012-10-31
  • 打赏
  • 举报
回复
AtlAxWin这个窗口类是用CAxHostWindow创建的,它会自动处理szWndProgID字符串,如果字符串是控件的PROGID,就创建该控件,如果不是,它会尝试把它解析成URL,然后创建浏览器控件打开它。

我建议你打开atlhost.h文件,查找CAxHostWindow::CreateControlLicEx函数的实现,第一个参数就是创建窗口时传递的字符串(szWndProgID),它调用了CreateNormalizedObject函数,在这个函数里,它首先分析字符串是不是mshtml:开头,如果是则创建一个IHTMLDocument2控件;其次它分析字符串中是否含有:冒号,如果有,则把它当作是URL,创建一个浏览器控件来打开它;然后看它是不是{xxx}形状的CLSID字符串,或者直接是PROGID,然后尝试翻译成CLSID,再创建对应的控件。其它的情况下就失败了。

15,979

社区成员

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

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