MFC中显示cocos2d-x

来源:未知 责任编辑:智问网络 发表时间:2013-11-08 08:44 点击:

存在的问题:没实现立即动态更改分辨率,而是通过缩放改变窗口的大小:
void CAnimateMakerView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
#if 1
if (::IsWindow(m_picture.m_hWnd))//&&m_bInitCoco)
{
CRect rect;
m_picture.GetWindowRect(rect);
ScreenToClient(rect);
rect.right = cx - rect.left;
rect.bottom = cy - rect.left;
m_picture.MoveWindow(rect);
if (m_bInitCoco)
{
m_picture.resize(rect.Width(),rect.Height());
printf("cocos2d size=%dX%d",rect.Width(),rect.Height());
//CCDirector::sharedDirector()->reshapeProjection(CCSizeMake(rect.Width(),rect.Height()));
}
}
#endif
}


Cocos2dXWin.cpp
// Cocos2dXWin.cpp : 实现文件
//

#include "stdafx.h"
#include "AnimateMaker.h"
#include "Cocos2dXWin.h"
#include "CCEGLView.h"
#include "CCApplication.h"
#include "AppDelegate.h"


// CCocos2dXWin

IMPLEMENT_DYNAMIC(CCocos2dXWin, CWnd)

CCocos2dXWin::CCocos2dXWin()
{
    m_iWidth=0;
    m_iHeight=0;
}

CCocos2dXWin::~CCocos2dXWin()
{
}


BEGIN_MESSAGE_MAP(CCocos2dXWin, CWnd)
END_MESSAGE_MAP()

 

// CCocos2dXWin 消息处理程序

BOOL    CCocos2dXWin::CreateCocos2dXWindow() 

    //新建一个CRect变量获取窗口的客户区大小 
    CRect   tClientRect; 
    GetClientRect(&tClientRect); 
    //调用cocos2d中的CCApplication::sharedApplication()获取Cocos2d-x程序类单件实例对象。调用其run函数。在这里我们传入四个参数,与第一章“HelloWorld”不同的是这里增加了新参数“当前窗口的句柄”。这是使用MFC来嵌入Cocos2d-x窗口的关健所在。我们暂时埋个伏笔,后面再详解。 

    //resize(tClientRect.Width(),tClientRect.Height());
    CCEGLView* eglView = CCEGLView::sharedOpenGLView();
    m_iWidth=tClientRect.Width();
    m_iHeight=tClientRect.Height();

    eglView->setFrameSize(m_iWidth,m_iHeight, GetSafeHwnd());

    cocos2d::CCApplication::sharedApplication()->run(1);//GetSafeHwnd(),TEXT("第一个Cocos2d-x程序"),tClientRect.Width(),tClientRect.Height()); 
    //这里将变量设置为TRUE 

    m_bInitCocos2dX = TRUE; 
    return TRUE; 

void CCocos2dXWin::resize(float width, float height)
{
    if (m_bInitCocos2dX)
    {
        CCEGLView* eglView = CCEGLView::sharedOpenGLView();
        //eglView::CCEGLViewProtocol.setFrameSize(width, height);

        //eglView->setFrameSize(width, height, GetSafeHwnd());
        eglView->resize(width, height);
    //    float newScale = (float)(enabled ? 2 : 1);
        //eglView->setContentScaleFactor(5);
        float scaleX=width/m_iWidth;
        float scaleY=height/m_iHeight;
       
        //float scale=scaleY<scaleX?scaleY:scaleX;
        float scale=MIN(scaleY,scaleX);
        CCDirector::sharedDirector()->setContentScaleFactor(scale);

    }
}
Cocos2dXWin.h
#pragma once


// CCocos2dXWin
// #include "CCEGLView_win32.h"
// #include "Classes/AppDelegate.h"
#include "cocos2d.h"
#include "AppDelegate.h"
class CCocos2dXWin : public CWnd
{
DECLARE_DYNAMIC(CCocos2dXWin)

public:
CCocos2dXWin();
virtual ~CCocos2dXWin();
//创建Cocos2dX窗口
BOOL CreateCocos2dXWindow();
AppDelegate app;
void resize(float width, float height);
protected:
DECLARE_MESSAGE_MAP()

//是否已经初始化
BOOL m_bInitCocos2dX;
float m_iWidth;
float m_iHeight;

};

 

void CCEGLView::resize(int width, int height)
{
if (! m_hWnd)
{
return;
}


POINT ptDiff;

// calculate new window width and height

RECT rcClient;
if (!m_bUseMfc)
{
RECT rcWindow;
GetWindowRect(m_hWnd, &rcWindow);
GetClientRect(m_hWnd, &rcClient);
ptDiff.x = (rcWindow.right - rcWindow.left) - rcClient.right;
ptDiff.y = (rcWindow.bottom - rcWindow.top) - rcClient.bottom;
rcClient.right = rcClient.left + width;
rcClient.bottom = rcClient.top + height;
}

m_windowWidth = width;
m_windowHeight = height;
const CCSize& frameSize = getFrameSize();
if (frameSize.width > 0)
{
m_windowTouchScaleX = frameSize.width / width;
m_windowTouchScaleY = frameSize.height / height;

TCHAR buff[MAX_PATH + 1];
memset(buff, 0, sizeof(buff));
swprintf_s(buff, MAX_PATH, L"%s - %0.0fx%0.0f - %0.2f",
kWindowClassName, frameSize.width, frameSize.height, 1.0f / m_windowTouchScaleX);
SetWindowText(m_hWnd, buff);
if (m_bUseMfc)
{
OutputDebugString(buff);
OutputDebugString(_T("\n"));
}
}

if (!m_bUseMfc)
{
AdjustWindowRectEx(&rcClient, GetWindowLong(m_hWnd, GWL_STYLE), false, GetWindowLong(m_hWnd, GWL_EXSTYLE));

// change width and height
SetWindowPos(m_hWnd, 0, 0, 0, width + ptDiff.x, height + ptDiff.y,
SWP_NOCOPYBITS | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER);
}

}

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • cocos2d-x学习笔记(19)--label 、label atlas
    • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
    • Cocos2d-x学习(一):HelloWorld
    • cocos2dx在xcode下开发,编译到android上(2)
    • cocos2d 设置屏幕默认方向
    • Cocos2d-x 2.0 之 Actions “三板斧” 之一
    • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
    • cocos2d-x学习笔记(18)--游戏打包(windows平台)
    • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1