如何让webbrowser控件不挡住子窗体?

j9988 2018-04-10 09:15:04
win32 api 有一个对话框, 对话框里有个webbrowser控件, 还有个子窗体,
可是webbrowser老是挡住子窗体, 怎么办? topmost bringwindowtoTop 都做过全不行, 怎么办?



...全文
416 点赞 收藏 11
写回复
11 条回复
zgl7903 2018年04月12日
如果test2 是基于对话框的, 在资源属性中添加菜单, 并在对话框资源属性中设置菜单ID就好了 如果是窗口,Create的时候设置MenuID
回复 点赞
zgl7903 2018年04月11日
在Hellow Win32的对话框上修改的, 其实移动下位置就好了


HWND hChildDlg = NULL;

LRESULT CALLBACK ChildDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
return FALSE;
}

#include <atlbase.h>
CComModule _Module;
#include <atlwin.h>
#include <comdef.h>
#include <exdisp.h>
#pragma comment(lib,"atl")
#pragma comment(lib,"User32.lib")

CAxWindow WinContainer;


// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
CoInitialize(NULL);

//创建对话框
hChildDlg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hDlg, (DLGPROC)ChildDlgProc);

IWebBrowser2* iWebBrowser;
VARIANT varMyURL;

//注册类
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInst;
wcex.hIcon = LoadIcon(hInst, (LPCTSTR)IDI_WIN32T4);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCSTR)IDC_WIN32T4;
wcex.lpszClassName = WinContainer.GetWndClassName();
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

RegisterClassEx(&wcex);
}

RECT rc={0,0,100,100};
WinContainer.Create(hDlg, rc, 0,WS_CHILD |WS_VISIBLE);
DWORD dwErr = GetLastError();
WinContainer.CreateControl(L"shell.Explorer.2");
WinContainer.QueryControl(__uuidof(IWebBrowser2),(void**)&iWebBrowser);
VariantInit(&varMyURL);
varMyURL.vt = VT_BSTR;
varMyURL.bstrVal = SysAllocString(L"http://www.baidu.com");
iWebBrowser-> Navigate2(&varMyURL,0,0,0,0);
VariantClear(&varMyURL);
iWebBrowser-> Release();

PostMessage(hDlg, WM_SIZE, 0, 0);

return TRUE;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
case( WM_DESTROY ):
{
if(hChildDlg != NULL)
{
DestroyWindow(hChildDlg);
hChildDlg = NULL;
}

WinContainer.DestroyWindow();
CoUninitialize();
return 0;
}
case( WM_SIZE ):
{
RECT rc;
GetClientRect(hDlg, &rc);

//移动对话框到左上角
RECT rcDlg;
GetWindowRect(hChildDlg, &rcDlg);
MoveWindow(hChildDlg, 0, 0, rcDlg.right-rcDlg.left, rcDlg.bottom-rcDlg.top, TRUE);

//webbrowser移动到对话框右侧边
rc.left += rcDlg.right - rcDlg.left;
WinContainer.MoveWindow(&rc);

return 0;
}

default:
{
break;
}
}
return FALSE;
}



回复 点赞
j9988 2018年04月11日
主要是碰到问题,看有没有解决的方法. 我点按钮,子窗口showwindow, 就象点击弹出菜单一样, 不应该被控件挡住啊. 菜单总不能设成popup窗口吧. 还有,在MFC环境下,就不会出现这种问题, MFC的对话框等级好象比控件高
回复 点赞
j9988 2018年04月11日
引用 1 楼 zgl7903 的回复:
如果想要同时在一个平面,那么调整布局,使两者不重叠; 以可以把子对话框属性修改为Popup,webbrowser 控件child属性
webbrowser是child, 用子窗体,是因为移动缩放就不用管了,代码简单. 所以没有用popup, 用popup肯定可以.
回复 点赞
worldy 2018年04月11日
引用 5 楼 j9988 的回复:
[quote=引用 3 楼 oyljerry 的回复:] 这两个窗口就应该设计的不重叠。不然窗口总会有覆盖
子窗口设计是弹出的.就是有个按钮,点击,弹出子窗口,按正常来说,webbrowser不应挡住子窗体,draw总有个先后. [/quote] 既然是弹出的,你要弹出的这个对话框就不要设置为子窗口属性
回复 点赞
j9988 2018年04月11日
引用 3 楼 oyljerry 的回复:
这两个窗口就应该设计的不重叠。不然窗口总会有覆盖
子窗口设计是弹出的.就是有个按钮,点击,弹出子窗口,按正常来说,webbrowser不应挡住子窗体,draw总有个先后.
回复 点赞
j9988 2018年04月11日
引用 2 楼 worldy 的回复:
在webbrowser的位置再加一个子窗口,然后把webbrowser作为该窗口的子窗口
试过了,不行.
回复 点赞
worldy 2018年04月11日
在webbrowser的位置再加一个子窗口,然后把webbrowser作为该窗口的子窗口
回复 点赞
oyljerry 2018年04月11日
这两个窗口就应该设计的不重叠。不然窗口总会有覆盖
回复 点赞
j9988 2018年04月11日
我想实现菜单这种效果,有没有办法?

@zgl7903
回复 点赞
zgl7903 2018年04月11日
如果想要同时在一个平面,那么调整布局,使两者不重叠; 以可以把子对话框属性修改为Popup,webbrowser 控件child属性
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7898

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告