您的位置:首页 > 其它

哈哈~今天进展顺利

2005-02-15 20:57 429 查看
还没有做到界面的部分,不过今天的进展还是令我十分满意的。
首先我解决了全屏/窗口模式的动态切换问题。嗯..是我自己想出来的方法,没有参考,不知道跟gp的是否一样。不过我想原理大概都差不多吧。实现了动态切换是十分好玩的一件事



其次,新加了一个CSurface类要来包装ddsurface,这样管理起来方便多了,而且这是十分重要的一个部分,以后都很难会直接用到ddsurface了。这个类包括了动画,建立点击测试区,位图文件的绑定(这样就能解决页面丢失时恢复重新载入位图数据的问题了),还有把原先CGraph的LoadBitmap等几个在ddutil的函数都移了过去CSurface。以后还会增加对Surface的garma调整等等函数。源码帖得够多了这次只把头文件弄出来,刚刚几本搞好这个类的大体结构。

备注一下:窗口管理还要一个拖放源/目标的变量。

#pragma once
#pragma comment(lib,"ddraw.lib")
#pragma comment(lib,"winmm.lib")

#include "mmsystem.h"
#include <stdio.h>
#include "./global.h"

class CSurface
{
public:
CSurface(void);
~CSurface(void);
protected:
// 返回rgb与调色板上颜色相近的颜色调色板索引
DWORD ColorMatch(IDirectDrawSurface * pdds, COLORREF rgb);
// 把hbm位图Copy到目标Surface
HRESULT CopyBitmap(IDirectDrawSurface * pdds, HBITMAP hbm, int x, int y, int dx, int dy);
public:
IDirectDrawSurface * GetSurface(void);
// 恢复页面
bool Restore(void);
// 返回当前BltRect
LPRECT GetBltRect(void);
// 设置Surface的关键色
HRESULT CSurface::SetColorKey(COLORREF rgb);
// 加载一个Bitmap到页面(与LoadBitmap不同的是,这个函数不会创建Surface)
bool ReloadBitmap();
// 创建一个离屏Surface,并加载bmp图片到页面
bool LoadBitmap(LPCSTR szBitmap);
protected:
// 用于定位当前帧所在区域
RECT m_BltRect;
// 相关联的Surface
LPDIRECTDRAWSURFACE lpDDS;
// 是否动画页面
bool m_IsAnimate;
// 动画栅格当前行
int m_nRow;
// 动画栅格当前列
int m_nCol;
// 页面宽度
int m_nSurfWidth;
// 页面高度
int m_nSurfHeight;
// 动画页每帧宽度
int m_nFrameWidth;
// 动画页每帧高度
int m_nFrameHeight;
// 是否建立规则点击测试区(CreateRange Function Save, use for InRange Function)
char m_szFile[256];
bool m_bRegular;
// 动画速度,这里是延时,单位毫秒.
int m_nFrameRate;
public:
// 设置页面为动画页
void SetAnimate(int FrameWidth, int FrameHeight, int FrameRate);
// 调整动画帧速,如果还没设置动画参数则返回false
bool AdjustFrameRate(int NewFrameRate);
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐