随笔 - 30  文章 - 67  trackbacks - 0
<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(8)

随笔分类

随笔档案

文章档案

收藏夹

Oops

搜索

  •  

积分与排名

  • 积分 - 78347
  • 排名 - 269

最新评论

阅读排行榜

评论排行榜

最近需要做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(this12))
 {
  TRACE0(
"Failed to create m_splitter\n");
  
return FALSE;
 }

 CRect rect;
 GetClientRect(
&rect);

 
//Left View
 if(!m_splitter.CreateView(00, RUNTIME_CLASS(CLeftTreeView),
  CSize((rect.right 
- rect.left)*0.30), pContext))
 {
  TRACE0(
"Failed to Create the Left View");
  
return FALSE;
 }

 
//Right View
 if(!m_splitter.CreateView(01, RUNTIME_CLASS(CMy2DTerrainEditor01View),
  CSize((rect.right 
- rect.left)*0.70), pContext))
 {
  TRACE0(
"Failed to Create the Left View");
  
return FALSE;
 }

 SetActiveView((CView
*)m_splitter.GetPane(00));

 m_splitter.ShowWindow(SW_SHOW);
 m_splitter.UpdateWindow();

 
return TRUE;
}


 



需要注意的呢还得创建视图,在上面你可以发现这个问题,
我使用了一个自动生成的CMy2DTerrainEditor01View, 还有我利用VS自动创建的CLeftTreeView,
这个例子我想创建一个做视图为一个树形的视图,右边想画一个地图。

大概就这样了
 

posted on 2011-04-05 11:02 Cunch 阅读(805) 评论(0)  编辑 收藏 引用 所属分类: MFC

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理