1. Qt 라이브러리는 MFC 모듈 대화 상자를 호출합니다.
- QT에 의해 호출되는 모달 대화 상자는 내보내기 기능 시작 부분에 추가해야 하는 리소스 클래스에 속합니다.
AFX_MANAGE_STATE(AfxGetStaticModuleState());
- MFC EXE 파일에서 전송된 Dll의 경우 앱 클래스의 초기화 함수가 모달 대화 상자의 해당 코드를 호출하여 TRUE를 반환함을 유의해야 한다.
- 마법사를 사용하여 MFCLibrary1이라는 이름의 MFC 동적 라이브러리를 추가합니다.
- 대화 리소스를 추가하고 대화 디자인 인터페이스에 CTestDialog와 같은 MFC 인터페이스 클래스를 추가합니다.
class CTestDialog : public CDialogEx
{
DECLARE_DYNAMIC(CTestDialog)
public:
CTestDialog(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CTestDialog();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum {
IDD = IDD_DIALOG1 };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
};
- 내보내기 클래스 추가(엔지니어링 프로젝트에서 해당 내보내기 매크로 정의 TEST_EX 추가)
//
#pragma once
#ifdef TEST_EX
#define TEST_SDK __declspec(dllexport)
#else
#define TEST_SDK __declspec(dllimport)
#endif
class TEST_SDK TestExport
{
public:
void showDialog()
{
//下面这句号一定加,否则QT调用会报(afxwin1.inl 第21行的错误)
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//启动模态对话框;
CTestDialog dlg;
dialog.DoModal();
}
};
- Qt에 전화
일반적인 일반 프로시저 호출과 어떤 식으로든 차이가 없습니다.
QObject::connect(ui.pushButton, &QPushButton::clicked, []()
{
TestExport test;
test.showDialog();
});
- 업적
둘, Qt 라이브러리 내장 MFC 대화 제어
- MFCLibrary1 동적 라이브러리 관련 기능은 기본적으로 유사합니다.
- TestExport 클래스에 대화 상자 창 핸들을 가져오는 메서드를 추가합니다.
CTestDialog* dialog = new CTestDialog();
void* TestExport::getDialogHandle()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//将对话框当成控件用;
dialog->Create(IDD_DIALOG1);
dialog->ShowWindow(SW_SHOW);
dialog->DoModal();
return dialog->GetSafeHwnd();
}
- qt 프로그램은 MFC 컨트롤에 액세스합니다.
QObject::connect(ui.pushButton, &QPushButton::clicked, [=]()
{
TestExport test;
void* handle = test.getDialogHandle();
if(handle)
{
auto m_window = QWindow::fromWinId((WId)handle);
m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
auto mWidget = QWidget::createWindowContainer(m_window);
this->setCentralWidget(mWidget);
}
});
- 업적