Show toolbar

2013年8月5日 星期一

Create Static Splitter Window using MFC

標題:使用MFC建立靜態分割視窗
VC++ (SplitterWindow.cpp):
#include <afxwin.h>
#include "SplitterWindow.h"
#include <afxext.h>
/********** 這裡是CDocument類別 **********/
class DocBoxy : public CDocument
{
//在此撰寫Document內容
DECLARE_DYNCREATE(DocBoxy);
};
IMPLEMENT_DYNCREATE(DocBoxy, CDocument) //宣告DocBoxy為run-time類別
/********** 這裡是CFormView類別 **********/
class FormViewBoxy : public CFormView
{
public:
FormViewBoxy() : CFormView(FormViewBoxy::IDD) {};
~FormViewBoxy() {};
public:
enum { IDD = IDD_FORMVIEW };
DECLARE_DYNCREATE(FormViewBoxy) //宣告run-time類別
};
IMPLEMENT_DYNCREATE(FormViewBoxy, CFormView) //宣告ViewBoxy為run-time類別
/********** 這裡是CView類別 **********/
class MainViewBoxy : public CView
{
public:
MainViewBoxy(){}
~MainViewBoxy(){}
void OnDraw(CDC * aDC) //必須覆寫的虛擬函數
{
for(int i=0;i<10;i++)
{
aDC->TextOut(20 * i, 20 * i, L"MainBoxy!!");
}
}
DECLARE_DYNCREATE(MainViewBoxy) //宣告run-time類別
};
IMPLEMENT_DYNCREATE(MainViewBoxy, CView) //宣告ViewBoxy為run-time類別
/********** 這裡是CFrameWnd類別 **********/
class FrameBoxy : public CFrameWnd
{
public:
CSplitterWnd StaticSplit;
FrameBoxy(){}
~FrameBoxy(){}
afx_msg void OnExit() //宣告關閉檔案事件
{
if(MessageBox( TEXT("Are you sure you want to close this window?"), TEXT("SplitterWindowBoxy"), MB_OKCANCEL | MB_ICONQUESTION ) == 1 )
{
DestroyWindow();
}
}
//注意!! StaticSplit必須放在兩個View類宣告之後才能使用
BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
StaticSplit.CreateStatic(this,1,2); //建立靜態分裂視窗
StaticSplit.CreateView(0, 0, RUNTIME_CLASS(FormViewBoxy), CSize(300,400),pContext); //建立瀏覽區所使用的View物件
StaticSplit.CreateView(0, 1, RUNTIME_CLASS(MainViewBoxy), CSize(300,400),pContext); //建立繪圖區所使用的View物件
StaticSplit.SetActivePane(0,1); //設定繪圖區為作用的子視窗
return TRUE;
}
//在此撰寫Frame內容
DECLARE_DYNCREATE(FrameBoxy) //宣告run-time類別
DECLARE_MESSAGE_MAP() //宣告訊息映射表
};
//宣告FrameBoxy為run-time類別
IMPLEMENT_DYNCREATE(FrameBoxy, CFrameWnd)
//建立訊息映射表
BEGIN_MESSAGE_MAP(FrameBoxy, CFrameWnd)
ON_COMMAND(ID_FILE_EXIT, OnExit)
END_MESSAGE_MAP()
/********** 這裡是CWinApp類別 **********/
class AppBoxy : public CWinApp
{
public:
BOOL InitInstance()
{
CDocument *doc; //宣告指向文件的指標
CSingleDocTemplate* DocTemplate; //宣告指向單文件樣版物件的指標
DocTemplate = new CSingleDocTemplate( //建立具有單文件樣版物件
IDR_MENU, //用於單文件框架之資源的識別子
RUNTIME_CLASS(DocBoxy), //單文件視窗的Document
RUNTIME_CLASS(FrameBoxy), //單文件視窗的視窗框架
RUNTIME_CLASS(FormViewBoxy) //單文件視窗的View
);
AddDocTemplate(DocTemplate); //將單文件樣版物件設定給MyApp
doc = DocTemplate->CreateNewDocument(); //建立新的文件
m_pMainWnd = DocTemplate->CreateNewFrame( doc, NULL ); //建立一個視窗框架
DocTemplate->InitialUpdateFrame ( (CFrameWnd*)m_pMainWnd, doc ); //起始化視窗框架物件,並連結View物件
m_pMainWnd->ShowWindow(SW_SHOW); //顯示視窗
return true;
}
};
AppBoxy appboxy; //建立應用程式物件,程式進入點
範例結果:


動態教學:
Open
直接下載:
http://docs.google.com/uc?id=0B8HdyDgIiLuHREdOUmVuSUtoZzA

說明:
在MFC中建立分割視窗,左視窗為CFrameWnd類別可設計表單,右視窗為CView類別可進行繪圖,注意須建立『IDD_FORMVIEW』之Dialog資源。

沒有留言:

張貼留言