我想做一个软件,在里面显示其它应用程序的窗口,并且是正常能操作,不是只截个图.1.用SetParent函数可以把其它应用程序的窗口父窗口强行设置成我的"对话框"窗口,但是这样我们对话框就不会刷新,也不会响应作响消息了,只有用进程管理器来结束了.
问题: A 请问还有其它方法来设置其它程序的父窗口吗? B.怎么才能使父窗口(也就是我的对话框)不假死掉?
(注:这里就算改来目标窗口的属性为 WS_CHILD 也是不行的)2.用SetParent函数可以把其它程序窗口的父窗口强行设置成一个"多文档程序"窗口,这样不会有任何问题.子窗口,父窗口都能正常运行.但是我想实现的是在一个"黑框框"中显示一个"外面"的应用程序,但是这个"多文档"程序却不是那么容易去掉那些"标题栏","菜单栏".....
问题: A,怎么去掉那些东西? B:能不能在对话框程序中动态生成一个支持多文档的窗口?3.怎么在对话框中创建一个CMainFrame类窗口.
问题: A 请问还有其它方法来设置其它程序的父窗口吗? B.怎么才能使父窗口(也就是我的对话框)不假死掉?
(注:这里就算改来目标窗口的属性为 WS_CHILD 也是不行的)2.用SetParent函数可以把其它程序窗口的父窗口强行设置成一个"多文档程序"窗口,这样不会有任何问题.子窗口,父窗口都能正常运行.但是我想实现的是在一个"黑框框"中显示一个"外面"的应用程序,但是这个"多文档"程序却不是那么容易去掉那些"标题栏","菜单栏".....
问题: A,怎么去掉那些东西? B:能不能在对话框程序中动态生成一个支持多文档的窗口?3.怎么在对话框中创建一个CMainFrame类窗口.
解决方案 »
- 使用cimg.h在VC2008下可运行但VC6报错,两个错误一直无法排除
- 奇怪,窗口重画时竟然没有调用Ondraw函数?
- 如何发现USB新设备?(FT232B)
- 谁看懂过MFC启动部分的。给我解释解释好不好。
- 请问模板类的声明和实现是不是必须都放在头文件中,那我如果想做成静态库岂不是不行?
- 为什么报错?
- 模糊查询的问题?
- 我想问一下D版的VC++6装完的时候总是显示 'this file isn't TTF or TTC...'装不完
- 当在任务栏(不是托盘)鼠标点击一个程序的图标的时候,在vc中,响应的是那个事件或者消息?
- 关于创建word编码的问题
- 关于单文档切割视图来显示位图
- stl里面有没有计算hash的函数?
先GetWindowRect
再MoveWindow
搞定
就是在我的程序中创建一个窗口就可以了,方法就按Win32程序创建窗口的方法
1.填充窗口类结构体
2.注册窗口类
3.创建窗口(保存好他的句柄)
4.显示窗口
5.再通过该窗口的句柄,把其它程序的父窗口强行设置为它.代码如下:void CTestDlg::OnButton1()
{
TCHAR szWindowClass[100]=TEXT("AAA");
HINSTANCE hInst;
TCHAR szTitle[100];
int cmdShow=1;HISTANCE hInstance=AfxGetInstanceHandle();//填充结构体
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDR_MAINFRAME);//加载图标
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);//(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCSTR)IDS_ABOUTBOX;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDR_MAINFRAME);
//注册窗口类
RegisterClassEx(&wcex);
HWND g_hWnd;
//创建窗口
g_hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, 300, 300, NULL, NULL, hInstance, NULL);
if (!g_hWnd)
{
return FALSE;
}
//隐藏它菜单
SetMenu(g_hWnd,NULL);CWnd *cWnd=CWnd::FromHandle(g_hWnd);
//隐藏标题栏
cWnd->ModifyStyle(WS_CAPTION,0);
//隐藏边框
cWnd->ModifyStyle(WS_THICKFRAME,1);
//显示对话框
ShowWindow(g_hWnd, nCmdShow);
UpdateWindow(g_hWnd);
//打开一个外部程序
ShellExecute(m_hWnd,"open","C:\\VC\\TestWinPcap\\Debug\\TestWinPcap.exe",NULL,NULL,SW_SHOW); //稍等片刻,等待程序程序完成,以尽量保证下面的函数能查找到窗口
Sleep(100);
//找到该窗口
HWND hWnd=::FindWindow(NULL,"TestWinPcap");
if(hWnd)
{
//绑架它
::SetParent(hWnd,g_hWnd);
}}
int oy=0;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[100];
switch (message)
{
case WM_COMMAND:
break;
case WM_LBUTTONDOWN:
{
CRect rect;
GetWindowRect(hWnd,&rect);
CString Str;
CPoint point;
point.x=LOWORD(lParam);
point.y=HIWORD(lParam);
ClientToScreen(hWnd,&point);
/*Str.Format("(%d,%d),(%d,%d)",rect.left,rect.top,point.x,point.y);
OutputDebugString(Str);*/
ox=point.x-rect.left;
oy=point.y-rect.top;
}
break;
case WM_MOUSEMOVE:
if(wParam==MK_LBUTTON)
{
CRect rect;
GetWindowRect(hWnd,&rect);
CPoint point;
point.x=LOWORD(lParam);
point.y=HIWORD(lParam);
ClientToScreen(hWnd,&point);
MoveWindow(hWnd,point.x-ox,point.y-oy,rect.Width(),rect.Height(),TRUE);
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
(__)
/oo\\________
\ / \---\
\/ / \ \
\\_|___\\_|/ *
|| YY|
|| ||