最近需要做2D游戏编译器,就学习了下MFC,那老师的话来说他就是简单粗暴,
说道简单,我认为不过就是使用熟练的就简单了,但是里面的原理还真不简单,最近也在看《深入浅出MFC》,作者真的很厉害,幽默的言语间就把MFC大卸八块,想想大陆的书好的真不多。
实现分割条,主要使用的是CSplitterWnd,这个类,如果你想让分割条不动,那么你就得重写一个类,并且继承CSplitterWnd这个类,并且重写OnLButtonDown()的这个方法,只要你不实现这个方法,那么分割条就不会动了。知道了这个原理,那么对其它控件就是一样的了。。。 是不是很简单
如果你想利用VS手动添加一个类,让它继承CSplitterWnd这个类,那么就得说对不起,MS好像没有把所有的类都放进去,我用的VS2008,不知道VS2010是什么情况,但是也不要着急嘛, 可以想想MFC的那张继承大表,现在想想确实很大啊,有耐心的数数吧,话说现在的人都很浮躁啊,找到CSplitterWnd了吗,找到他父亲,看他父亲在MFC的VS中类生成的器中有没,没有再它父亲的父亲 找到了没??, 这个办法是通用的,还有就是一个简单的办法,就是我们用的基本的控件,大多数都是从CWnd继承的,那么我们就直接选择CWnd了。。。
下面看下生成的结果:
//Splitter.h
#pragma once
// CSplitter
class CSplitter : public CWnd
{
DECLARE_DYNAMIC(CSplitter)
public:
CSplitter();
virtual ~CSplitter();
protected:
DECLARE_MESSAGE_MAP()
};
//Splitter.cpp
// Splitter.cpp : 实现文件
//
#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就可以了。这样我们的这个基础类就完成了。
你要想分割条不动,我上面说的有。
下面说说:完成了那么就得谢谢MainFrame了
实现这个我们首先需要给CMainFrame添加一个成员变量(CSplitter) m_splitter
同时要实现 virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);方法
下面就是方法的具体描述了:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
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;
}
需要注意的呢还得创建视图,在上面你可以发现这个问题,
我使用了一个自动生成的CMy2DTerrainEditor01View, 还有我利用VS自动创建的CLeftTreeView,
这个例子我想创建一个做视图为一个树形的视图,右边想画一个地图。
大概就这样了
posted on 2011-04-05 11:02
Cunch 阅读(1094)
评论(0) 编辑 收藏 引用 所属分类:
MFC