最近需要做2D游戲編譯器,就學(xué)習(xí)了下MFC,那老師的話來說他就是簡單粗暴,
說道簡單,我認(rèn)為不過就是使用熟練的就簡單了,但是里面的原理還真不簡單,最近也在看《深入淺出MFC》,作者真的很厲害,幽默的言語間就把MFC大卸八塊,想想大陸的書好的真不多。
實(shí)現(xiàn)分割條,主要使用的是CSplitterWnd,這個(gè)類,如果你想讓分割條不動,那么你就得重寫一個(gè)類,并且繼承CSplitterWnd這個(gè)類,并且重寫OnLButtonDown()的這個(gè)方法,只要你不實(shí)現(xiàn)這個(gè)方法,那么分割條就不會動了。知道了這個(gè)原理,那么對其它控件就是一樣的了。。。 是不是很簡單
如果你想利用VS手動添加一個(gè)類,讓它繼承CSplitterWnd這個(gè)類,那么就得說對不起,MS好像沒有把所有的類都放進(jìn)去,我用的VS2008,不知道VS2010是什么情況,但是也不要著急嘛, 可以想想MFC的那張繼承大表,現(xiàn)在想想確實(shí)很大啊,有耐心的數(shù)數(shù)吧,話說現(xiàn)在的人都很浮躁啊,找到CSplitterWnd了嗎,找到他父親,看他父親在MFC的VS中類生成的器中有沒,沒有再它父親的父親 找到了沒??, 這個(gè)辦法是通用的,還有就是一個(gè)簡單的辦法,就是我們用的基本的控件,大多數(shù)都是從CWnd繼承的,那么我們就直接選擇CWnd了。。。
下面看下生成的結(jié)果:
//Splitter.h
#pragma once
// CSplitter
class CSplitter : public CWnd
{
DECLARE_DYNAMIC(CSplitter)
public:
CSplitter();
virtual ~CSplitter();
protected:
DECLARE_MESSAGE_MAP()
};
//Splitter.cpp
// Splitter.cpp : 實(shí)現(xiàn)文件
//
#include "stdafx.h"
#include "2DTerrainEditor0.1.h"
#include "Splitter.h"
// CSplitter
IMPLEMENT_DYNAMIC(CSplitter, CWnd)
CSplitter::CSplitter()
{
}
CSplitter::~CSplitter()
{
}
BEGIN_MESSAGE_MAP(CSplitter, CWnd)
END_MESSAGE_MAP()
// CSplitter 消息處理程序
注意到上面的紅字了沒, 我們需要的是CSplitterWnd 是吧,那么就好辦了吧,
把Cwnd換成CSplitterWnd就可以了。這樣我們的這個(gè)基礎(chǔ)類就完成了。
你要想分割條不動,我上面說的有。
下面說說:完成了那么就得謝謝MainFrame了
實(shí)現(xiàn)這個(gè)我們首先需要給CMainFrame添加一個(gè)成員變量(CSplitter) m_splitter
同時(shí)要實(shí)現(xiàn) virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);方法
下面就是方法的具體描述了:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加專用代碼和/或調(diào)用基類
if(!m_splitter.CreateStatic(this, 1, 2))
{
TRACE0("Failed to create m_splitter\n");
return FALSE;
}
CRect rect;
GetClientRect(&rect);
//Left View
if(!m_splitter.CreateView(0, 0, RUNTIME_CLASS(CLeftTreeView),
CSize((rect.right - rect.left)*0.3, 0), pContext))
{
TRACE0("Failed to Create the Left View");
return FALSE;
}
//Right View
if(!m_splitter.CreateView(0, 1, RUNTIME_CLASS(CMy2DTerrainEditor01View),
CSize((rect.right - rect.left)*0.7, 0), pContext))
{
TRACE0("Failed to Create the Left View");
return FALSE;
}
SetActiveView((CView*)m_splitter.GetPane(0, 0));
m_splitter.ShowWindow(SW_SHOW);
m_splitter.UpdateWindow();
return TRUE;
}
需要注意的呢還得創(chuàng)建視圖,在上面你可以發(fā)現(xiàn)這個(gè)問題,
我使用了一個(gè)自動生成的CMy2DTerrainEditor01View, 還有我利用VS自動創(chuàng)建的CLeftTreeView,
這個(gè)例子我想創(chuàng)建一個(gè)做視圖為一個(gè)樹形的視圖,右邊想畫一個(gè)地圖。
大概就這樣了
posted on 2011-04-05 11:02
Cunch 閱讀(1141)
評論(0) 編輯 收藏 引用 所屬分類:
MFC