桌面管理类及窗口、控件类

桌面管理类负责窗口的显示,传递窗口消息,管理皮肤资源等作用。
大致架构如下:

class CDesktop
{
    AddWindow(CGameWin *win);    // win是新增窗口的指针, 插入链表头
    Render(IDirectDrawSurface TargetSurface);    //TargetSurface为渲染目标
    LoadSkin(LPCTSTR szSkin);    //szSkin为皮肤存放的目录,自动打开为: ./skin/(szSkin)/*.*
    ……
}

AddWindow函数将win的指针存放到类中的一个链表里面.
链表维持的是窗口的指针地址,链表的排列顺序代表窗口的Z轴循序。
越是靠前,代表窗口越处于顶层。在Render方法中,向目标Surface渲染所有窗口。渲染顺序从链表尾开始。命令消息传递顺序从链头开始。

鼠标消息传递至窗口,窗口本身再按相同原理搜索窗口上的控件,如果不在当前窗口则继续下一个窗口的搜索。如果找到控件,则返回控件指针,存于Desktop类的私有变量,代表当前焦点所在控件。

CWin及CControl均从CObject派生,CObject有一方法GetType返回当前类的类型字符串。
CWin,CButton,CMenu等重载该函数,分别返回“Window”“Button”“Menu”等字符串。

按键消息可以根据当前焦点控件的类型,强制转换,然后进行响应操作。
例如CEdit控件为文本框,可以用ExecKey(假设)命令响应按键命令。
假如目标为CButton控件,Enter键可以直接调用Click()过程。

还要注意Enabled等属性,具体参考VB相对控件属性。
还有要防止狂按Enter导致连续点击这样的错误发生。

年初一 凌晨 4:20am,到此为止。睡觉……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值