mfc对话框中如何嵌入c#winform窗口,类似下图把图一嵌入到图2指定的位置
8条回答 默认 最新
- threenewbee 2023-05-11 16:03关注
获得3.30元问题酬金 用winexec启动程序,FindWindow找到C#的窗口(最好循环获取,因为启动需要时间,不是立刻调用就能得到)
然后用 SetWindowLong 修改窗体的样式去掉边框,用SetParent将窗体装入mfc以下代码你需要根据实际,略微修改
#include <afxwin.h> // 声明全局变量用于存储C#窗口的句柄 HWND g_hCSharpWnd = NULL; // MFC对话框类 class CMyDialog : public CDialog { public: CMyDialog(CWnd* pParent = NULL) : CDialog(IDD_MYDIALOG, pParent) {} // MFC消息映射宏 DECLARE_MESSAGE_MAP() // MFC对话框消息处理函数 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); }; // MFC消息映射宏 BEGIN_MESSAGE_MAP(CMyDialog, CDialog) ON_WM_CREATE() END_MESSAGE_MAP() // MFC对话框消息处理函数 int CMyDialog::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; // 启动C#程序 WinExec("YourCSharpProgram.exe", SW_SHOW); // 循环获取C#窗口句柄,直到找到为止 while (g_hCSharpWnd == NULL) { // 使用C#窗口的标题或类名进行查找,根据实际情况修改 g_hCSharpWnd = FindWindow(NULL, "YourCSharpWindowTitle"); // 等待一段时间再次尝试查找 Sleep(1000); } // 修改C#窗口的样式,去掉边框 LONG style = GetWindowLong(g_hCSharpWnd, GWL_STYLE); style &= ~WS_BORDER; SetWindowLong(g_hCSharpWnd, GWL_STYLE, style); // 将C#窗口装入MFC对话框 CWnd* pCSharpWnd = CWnd::FromHandle(g_hCSharpWnd); pCSharpWnd->SetParent(this); // 调整C#窗口的位置和大小 CRect rect; GetClientRect(&rect); pCSharpWnd->MoveWindow(rect); return 0; } // MFC应用程序类 class CMyApp : public CWinApp { public: virtual BOOL InitInstance(); }; // MFC应用程序初始化函数 BOOL CMyApp::InitInstance() { CMyDialog dlg; m_pMainWnd = &dlg; dlg.DoModal(); return FALSE; } // 全局MFC应用程序对象 CMyApp theApp;
解决 无用评论 打赏 举报 编辑记录