一、在EXE 文件目录下(如Debug)新建images 文件夹,并在里面加入back1.jpg 图片
二、在EXE 文件目录下新建properties 文件夹,并在里面加入资源描述文件resources.xml
//////////////////////////////////////////////////////////////////////////
// resources.xml
<?xml version="1.0" encoding="utf-8"?>
<ResourceManifest>
<Resources id="Game">
<!-- 这是注释 -->
<SetDefaults path="images/" idprefix="BACK_" />
<Image id="1" path="back1" />
</Resources>
</ResourceManifest>
//////////////////////////////////////////////////////////////////////////
三、运行G:/PopCap_Framework_v1.3/osframework/tools/ResourceGen.exe
点New Project
Project Name: tt
Resource XML: G:/CPP32/tt/Debug/properties/resources.xml
Resource Code: G:/CPP32/tt/Debug/properties/res
选中列表中的tt 项目,点Generate Code,在G:/CPP32/tt/Debug/properties 目录下生成了res.h 和res.cpp 两个文件
将res.h 和res.cpp 剪切到G:/CPP32/tt/src/res,并加入项目中
//////////////////////////////////////////////////////////////////
// main.cpp
// 显示图片,以加载资源的方法
#include <SexyAppBase.h>
#include <WidgetManager.h>
#include <ResourceManager.h>
#include <Widget.h>
#include <SWTri.h>
#include "res/res.h"
#define ASSERT(value) if (!(value)) { _asm{int 3};}
using namespace Sexy;
#pragma comment( lib, "winmm.lib" )
#pragma comment( lib, "wsock32.lib" )
#ifdef _DEBUG
#pragma comment( lib, "SexyAppFramework_D.lib" )
#else
#pragma comment( lib, "SexyAppFramework.lib" )
#endif
class CApp;
class CWidget : public Widget
{
public:
CWidget( CApp *app );
~CWidget();
void Draw( Graphics *g );
void Update();
public:
CApp *mApp;
};
class CWidget;
class CApp : public SexyAppBase
{
public:
CApp();
~CApp();
virtual void Init();
virtual void LoadingThreadProc();
virtual void LoadingThreadCompleted();
public:
Image* mMapImg;
CWidget* mWidget;
};
CApp::CApp()
{
mWidth = 550;
mHeight = 650;
mTitle = "APP";
mNoSoundNeeded = true;
mAutoEnable3D = true;
mMapImg = NULL;
}
CApp::~CApp()
{
mWidgetManager->RemoveWidget(mWidget);
delete mWidget;
}
void CApp::Init()
{
SexyAppBase::Init();
}
void CApp::LoadingThreadProc()
{
//you must call this to enable all the transform function
SWTri_AddAllDrawTriFuncs();
//first, it should load resouces
LoadResourceManifest();
mResourceManager->StartLoadResources("Game");
while (mResourceManager->LoadNextResource())
{
mCompletedLoadingThreadTasks++;
//mLoadingWidget->MarkDirty();
}
if (mResourceManager->HadError() || !ExtractGameResources(mResourceManager))
{
ASSERT(false);
ShowResourceError(false);
mLoadingFailed = true;
return;
}
mMapImg = GetImageById( GetIdByStringId( "BACK_1" ) );
ASSERT(mMapImg != NULL);
}
void CApp::LoadingThreadCompleted()
{
SexyAppBase::LoadingThreadCompleted();
if (mLoadingFailed)
return;
mWidget = new CWidget(this);
mWidget->Resize(0, 0, mWidth, mHeight);
mWidgetManager->AddWidget(mWidget);
}
CWidget::CWidget( CApp *app )
{
mApp = app;
}
CWidget::~CWidget()
{
}
void CWidget::Draw( Graphics *g )
{
// DrawImageF(img, 窗体坐标x, 窗体坐标y, Rect(图片坐标x, 图片坐标y, 宽, 高) )
g->DrawImageF( mApp->mMapImg, 0, 0, Rect( 0, 0,
550, 650 ) );
}
void CWidget::Update()
{
Widget::Update();
MarkDirty();
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
gHInstance = hInstance;
CApp *app = new CApp();
app->Init();
app->Start();
delete app;
return 0;
}
//////////////////////////////////////////////////////////////////
popcap 多资源的加载
在resources.xml 的资源小节再加一个图片资源:
<SetDefaults path="images/" idprefix="" />
<Image id="BACK_FOG" path="back_fog" />
images 文件夹加一张图片back_fog.png
BACK_1,和BACK_FOG 其实LoadingThreadProc()已经加载了,
并不需要显示的用GetImageById( GetIdByStringId( "BACK_1" ) ) 来加载
//////////////////////////////////////////////////////////////////////////
void CWidget::Draw( Graphics *g )
{
g->DrawImageF( BACK_1, 0, 0, Rect( 0, 0,
550, 650 ) );
// BACK_FOG 大部分是透明的,这部分不会遮住BACK_1
g->DrawImageF( BACK_FOG, 0, 0, Rect( 0, 0,
550, 650 ) );
}
//////////////////////////////////////////////////////////////////////////