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

解决方案 »

  1.   

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

  2.   

    禁止不了,除非你确保szWndProgID中不包含冒号,最好传递正确的PROGID,如果不知道机器上该PROGID是否存在,在创建之前自己测试一下PROGID是否有效。
      

  3.   

    没有冒号的,只有点, 像这样子的 Rrg.Samp.Ctrl