好多天不写博了,因为这两天正crack一个小程序头都大了。今天算一个段落了,再学一点WinX吧!
今天是手册的第二部分,BKGND篇。程序写上来先:
/********************************************************************
*
* 文件名称:test_bkgnd.cpp
* 摘 要:简要描述本文件的内容
*
* 当前版本:vv0.1
* 作 者:福柯
* 完成日期:2007年01月13日
*
* Copyright (c) 2007,Programming Lab.
* All rights reserved.
*********************************************************************/
#include <winx.h>
#include "resource.h"
class CHelloDlg1 : public WinX::ModalDialog<CHelloDlg1,IDD_DIALOG1>
{
WINX_BKGND_BRUSH(BLACK_BRUSH); //设置对话框背景的颜色
WINX_CTLBKGND_BRUSH(CtlStatic,GRAY_BRUSH); //设置对话框上控件的颜色
};
class CHelloDlg2 : public WinX::ModalDialog<CHelloDlg2,IDD_DIALOG1>
{
WINX_CTLBKGND_NULL(CtlStatic); //空刷
WINX_BKGND_PATTERN(IDB_BITMAP1);//背景图片
};
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
CHelloDlg1 dlg;
dlg.DoModal();
CHelloDlg2 dlg2;
dlg2.DoModal();
return 0;
}
附加品是,要在工程里加入资源,一个Dialog ,一个bitmap。
在画图片时,设置成空刷,是起一个透明的效果,不然,自己去试试成什么样子吧!
WinX说,没有一个大的继承结构,没有大的虚表,一直不明白是怎么实现的。今天终于有了初步的理解了。
那个WINX_BKGND_BRUCH()会生成一个OnEeaseBkgnd()的成员函数。这就是说,用宏来向类里加函数。当然如果没有用这个宏,就不会有这个函数,也就不会有相应的代码了。这样做,好处是很明显的,代码量受到的控制,但会牺牲一定的灵活性。比如你不能这样写:
class CHelloDlg1 : public WinX::ModalDialog<CHelloDlg1,IDD_DIALOG1>
{
WINX_BKGND_BRUSH(BLACK_BRUSH); //设置对话框背景的颜色
WINX_CTLBKGND_BRUSH(CtlStatic,GRAY_BRUSH); //设置对话框上控件的颜色
WINX_CTLBKGND_BRUSH(CtlButton,WHITE_BRUSH); //让按键的背景是白色
};
这样,同样的函数会被重复定义。不过,现实中,也不一定会有这样的代码。如果要实现这个功能,以后再说吧!
不过,你可以给不同的控件指定相同的实景色,只要把控件类型用|连接就OK了!