我们一次做了两个更改:升级到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属性中表示)。
我愿意接受有关在何处查找错误消息的建议。这段代码工作多年,直到我们“升级”: - )