Windows应用程序:Dialog上的嵌入式浏览器停止工作

时间:2012-08-18 02:59:32

标签: winapi dialog browser

我们一次做了两个更改:升级到VS2008(是的,这对我们来说仍然是未来的)并切换到基于oconfig的构建系统。

在这两者之间,某些东西破坏了嵌入式Web浏览器在我们的一个对话框上工作的能力。

对话定义:

ID_DIALOG_AGREEMENT DIALOG DISCARDABLE  0, 0, 470, 340
STYLE DS_MODALFRAME | WS_POPUP
FONT 8, "MS Shell Dlg"
BEGIN
    CONTROL         "",ID_CUSTOM_BROWSER,
                    "{8856F961-340A-11D0-A96B-00C04FD705A2}",
                    WS_TABSTOP | WS_BORDER,
                    0,0,469,315
    PUSHBUTTON      "&Yes",IDYES,360,321,50,14
    PUSHBUTTON      "&No",IDNO,415,321,50,14
    RTEXT           "Do you agree to these terms?",ID_TEXT_PROMPT,255,324,98,
                    8,SS_NOPREFIX | NOT WS_GROUP
    ICON            32514,ID_PIC_ICON,234,318,20,20
END

DIALOG CREATION:

AtlAxDialogBoxW( instance_, MAKEINTRESOURCEW( ID_DIALOG_AGREEMENT ), dlg, agreementDlgProc, NULL );

WM_INITDIALOG HANDLER

  // this returns NULL, so we failed to even create the control
  ctrl = GetDlgItem( dlg, ID_CUSTOM_BROWSER );
  GetWindowRect( ctrl, &rect3 );
  rect3.right -= rect2.right;
  rect3.bottom -= rect2.bottom;
  SetWindowPos( ctrl, NULL, 0, 0, rect3.right - rect3.left + 1,
                rect3.bottom - rect3.top + 1,
                SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER );
  // Configure the browser control to show the agreement
  IUnknown *iunknown = NULL;
  if( SUCCEEDED( AtlAxGetControl( ctrl, &iunknown ) ) ) {

根据评论,我最接近症状的是GetDlgItem返回null ...所以没有任何方法可以解决这个问题。

exe是动态链接到atl90.dll(如果你隐藏那个dll就会很好地抱怨)

对话框本身工作正常(按钮很好,例如)。它只是一个很大的空白区域,浏览器曾经是。

我相信它是在“MultiThreaded DLL”模式下进行编译,虽然我的oconfig fu太弱而无法置信(它在应用程序的VS属性中表示)。


我愿意接受有关在何处查找错误消息的建议。这段代码工作多年,直到我们“升级”: - )

0 个答案:

没有答案