我最近問了this question這讓我開始朝着正確的方向 - 至少是加載MFC DLL並試圖顯示一個dlg盒子。如何在MFC規則DLL中創建和使用CFormView? (visual studio 2008)
問題是,典型的對話框作爲一個APP的主窗口是可怕的。對我來說,創建一個新的exe項目來做我想做的事情是相當簡單的,但問題是我有一個DLL,而且這些工具似乎不允許我將這些類連接到資源中的窗體窗體上編輯。因此,我似乎無法處理我需要的事件。
我的問題:
- 如何創建並在MFC DLL項目顯示一個CFormView(基於我在資源編輯器創建的IDD_FORMVIEW)?
- 如何獲取表單並處理輸入?
- 如何爲該窗口添加事件/消息處理程序? (從.rc編輯器執行該操作的菜單項灰顯)
- 如何將菜單設置爲formview? (編輯器中資源的屬性不允許我將它與菜單資源相關聯(我弄不明白爲什麼)
我一直在尋找的鏈接是非常輕而且模糊的關於如何大多數人認爲我可以通過「嚮導」創建一個大型機作爲MFC單文檔應用程序 - 事實並非如此
現在我在我製作的窗口類上調用Create()作爲父母的桌面的CWnd
我不確定我已經正確地劃分了CFormView。事實上,我很確定我已經做了一些我所需要做的事情,儘管我試圖跟隨ins我見過的結構。
然後我打電話給ShowWindow(SW_SHOW),但我什麼都看不到。
我覺得這應該很簡單。我想要做的就是顯示我在表單編輯器中創建的表單。
我該怎麼做,最簡單的方法是什麼?
下面是一些代碼 - 調用它
MainForm *mf = new MainForm();
mf->Create(CWnd::GetDesktopWindow());
mf->ShowWindow(SW_SHOW);
下面是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;
};
這裏.h文件的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);
}
的CPP
是的,我知道Qt是遠遠優越的,我已經下載它,並且正在努力學習它。但是現在我們沒有時間學習如何構建,使用和部署它。它將用於我們軟件的下一個版本。 – Tim 2009-12-23 05:53:08