在我的Win32应用程序中,我在对话框中嵌入了Internet Explorer ActiveX控件。当用户调整对话框大小时,我处理WM_SIZE事件并设置IE控件的大小以占用对话框的客户端矩形。
虽然控件的大小调整有效,但控件本身不会刷新。我想知道是否有一些命令我可以发送到控件刷新/重绘自己。问候。
这是我要调整大小的DlgProc代码:
case WM_SIZE: {
HWND hX = GetDlgItem(hh, IDC_EXPLORER);
if (hX) {
RECT rc = { 0 };
GetClientRect(hh, &rc);
::SetWindowPos(hX, 0, 0, 0, rc.right, rc.bottom, SWP_SHOWWINDOW);
// ::MoveWindow(hX, 0, 0, rc.right, rc.bottom, TRUE);
}
return 0;
}
我还试过MoveWindow而不是SetWindowPos。但是,它似乎没有任何区别。
答案 0 :(得分:0)
我有类似的代码。一个嵌有IE Ax控件的对话框(以及工具栏和状态栏)。我所做的只是一个MoveWindow(),其中bRepaint = TRUE,IE将重绘。
wndIE是我的成员CWindow ATL包装器,但是如果你只使用直接的HWND,请将MoveWindow()调整为。
// Common private function to handle resizing of the child windows on our browser dialog.
void CBrowserWindow::resize_dialog_and_controls(RECT *rcClient) {
// Tell the toolbar to resize
m_wndToolbar.SendMessage(TB_AUTOSIZE, 0, 0);
RECT rcTool;
m_wndToolbar.GetClientRect(&rcTool);
int iToolHeight = rcTool.bottom - rcTool.top;
// Tell the statusbar to auto-size
m_wndStatus.SendMessage(WM_SIZE, 0, 0);
// Now get the new height of the statusbar
RECT rcStatus;
m_wndStatus.GetClientRect(&rcStatus);
int iStatusHeight = rcStatus.bottom - rcStatus.top;
// Now set the adjusted size of our IE host window
rcClient->top += iToolHeight;
rcClient->bottom -= iStatusHeight;
wndIE.MoveWindow(rcClient, true);
}