Я недавно задал этот вопрос , который заставил меня начать в правильном направлении - по крайней мере, для загрузки MFC DLL и попытки показать окно dlg.
Проблема в том, что типичное диалоговое окно ужасно как главное окно для приложения. Мне довольно просто создать новый exe-проект, чтобы делать то, что я хочу, но проблема в том, что у меня есть DLL, а инструменты просто не позволяют мне подключать классы к формам окон в ресурсе редактор. Поэтому я не могу справиться с нужными мне событиями.
Мои вопросы:
- Как мне создать и отобразить CFormView (на основе IDD_FORMVIEW, который я создал в редакторе ресурсов) в проекте MFC DLL?
- Как получить форму для отображения и обработки ввода?
- Как добавить обработчики событий / сообщений для этого окна? (Пункт меню для этого из редактора .rc выделен серым цветом)
- Как настроить меню для формы? (свойства ресурса в редакторе не позволяют мне связать его с ресурсом меню. (Я не могу понять, почему)
Ссылки, на которые я смотрел, довольно легки и неоднозначны относительно того, как это сделать. Большинство из них предполагают, что я могу создать мэйнфрейм как приложение MFC для одного документа с помощью «мастера», что не так.
Прямо сейчас я вызываю Create () для класса окна, который я создал, и передаю CWnd рабочего стола в качестве родителя.
Я не уверен, что правильно классифицировал CFormView. На самом деле, я почти уверен, что сделал мало того, что мне нужно, хотя я пытался следовать инструкциям, которые видел.
Затем я вызываю ShowWindow (SW_SHOW), но все равно ничего не вижу.
Я думаю, это ДОЛЖНО быть простым. Все, что я хочу сделать, это показать форму, которую я создал в редакторе форм.
Как мне это сделать и какой самый простой способ?
Вот некоторый код - код cpp, который вызывает его
MainForm *mf = new MainForm();
mf->Create(CWnd::GetDesktopWindow());
mf->ShowWindow(SW_SHOW);
Вот файл .h для класса MainForm
#include "afxcmn.h"
// MainForm form view
class MainForm : public CFormView
{
DECLARE_DYNCREATE(MainForm)
public:
MainForm();
virtual ~MainForm();
public:
virtual BOOL Create(CWnd* pParent);
public:
enum { IDD = IDD_FORMVIEW_MAIN };
#ifdef _DEBUG
virtual void AssertValid() const;
#ifndef _WIN32_WCE
virtual void Dump(CDumpContext& dc) const;
#endif
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
CListCtrl m_SymbolSetList;
};
и вот cpp для MainForm
#include "stdafx.h"
#include "MainForm.h"
// MainForm
IMPLEMENT_DYNCREATE(MainForm, CFormView)
MainForm::MainForm()
: CFormView(MainForm::IDD)
{
}
MainForm::~MainForm()
{
}
void MainForm::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_SYMBOLSETS, m_SymbolSetList);
}
BEGIN_MESSAGE_MAP(MainForm, CFormView)
END_MESSAGE_MAP()
// MainForm diagnostics
#ifdef _DEBUG
void MainForm::AssertValid() const
{
CFormView::AssertValid();
}
#ifndef _WIN32_WCE
void MainForm::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif
#endif //_DEBUG
BOOL MainForm::Create(CWnd* pParent)
{
CRect rect;
//pParent->GetClientRect(rect);
return CFormView::Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, pParent, 0, NULL);
}