白雪公主的后妈 2023-05-11 15:56 采纳率: 26.3%
浏览 119
已结题

mfc对话框中如何嵌入c#winform窗口

mfc对话框中如何嵌入c#winform窗口,类似下图把图一嵌入到图2指定的位置

img

img

  • 写回答

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;
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月19日
  • 创建了问题 5月11日