C++ 内嵌exe窗口程序

本文详述了如何将EXE程序内嵌为子窗口并调整其样式为WS_CHILD,实现与父窗口的交互。通过查找窗口、修改窗口属性及设置父窗口,确保子程序随主程序同步运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般内嵌程序都是作为子窗口嵌入父窗口的。所以如果我们需要内嵌exe窗口程序,那么我们就需要找到exe的顶层窗口。然后去掉WS_CAPTION | WS_BORDER | WS_THICKFRAME等属性,增加WS_CHILD属性。

//查找该窗口是否存在(如果exe窗口使我们自子设立的,事实上我们可以通过进程间通信来替代findwindow)
	HWND hFindWnd = ::FindWindow(_T("xxxclass_name"), _T("xxxxtitle"));
	//如果窗口不存在则启动exe
	if (!hFindWnd)
		::ShellExecute(GetSafeHwnd(), _T("open"), _T("xxx.exe"), _T(""), _T("xxx运行目录"), SW_SHOWMAXIMIZED);
	
	hFindWnd = ::FindWindow(_T("xxxclass_name"), _T("xxxxtitle"));
	if (hFindWnd)
	{
		//修改窗口属性为WS_CHILD
		DWORD dwModifuStyle = WS_CAPTION | WS_BORDER | WS_THICKFRAME;
		long dwStyle = GetWindowLong(hFindWnd, GWL_STYLE);
		dwStyle &= ~dwModifuStyle;
		dwStyle |= WS_CHILD;
		::SetWindowLong(hFindWnd, GWL_STYLE, dwStyle);
		//设置父窗口为容器窗口
		::SetParent(hFindWnd, GetSafeHwnd());

		RECT rtClient;
		GetClientRect(&rtClient);
		::MoveWindow(hFindWnd, rtClient.left, rtClient.top, rtClient.right, rtClient.bottom, TRUE);
	}

Note:当主程序退出的时候应该同步退出子程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值