<采用了单继承的类的导出> 这个……,tolua++支持采用了单继承的类的直接导出,在lua中可以像在C++中那样访问基类的方法。和其它简单类的导出没什么区别。 只是个简单的示例,我们定义一个控件基类,从它派生一个按钮类。然后在lua中分别访问基类和按钮类的方法。我们导出一个全局变量lbutton,同时也在lua中生成一个新button。 先看实际的头文件inheritance.h,我把实现也写在了头文件里。
AUICSPushed 2
AUICSDisabled 3
AUICSHide 4
AUICSFORCEDOWRD 0xFFFFFFFF
g_button的实例定义在main函数所在的文件中。 下面是inheritance.pkg文件:
对于基类CAUIControl,只导出部分方法,不导出构造函数,不允许在Lua中直接生成其实例。派生类CAUIButton可以在lua中生成实例。CAUIButton重写了基类的SetAlpha函数也增加了一些新的函数,如设置纹理函数SetTexture。 全局变量的导出很简单,
@H_301_16@extern
CAUIButton g_button@lbutton;一个语句就可以了。我们还可以为其加上tolua_readonly修饰符。我把它重名为lbutton。 好了,下面用tolua++.exe生成inherit.cpp文件:
{




{
{}
@H_301_16@virtual~CAUIControl()
@H_301_16@void SetID(@H_301_16@int nID){ m_nID nID; }
GetID(){ @H_301_16@return m_nID; }
SetText(@H_301_16@char* szText){ m_strText szText; }
@H_301_16@const GetText() m_strText.c_str(); }
SetPosition(POINT pt){ m_position pt; }
POINT GetPosition() m_position; }
SetSize(SIZE sz){ m_size sz; }
SIZE GetSize() m_size; }
SetVisible(@H_301_16@bool bVisible){ m_bVisible bVisible; }
IsVisible() m_bVisible; }
SetEnabled( bEnable){ m_bEnablebEnable; }
IsEnabled() m_bEnable; }
SetAlpha(@H_301_16@float fAlpha){ m_fAlphafAlpha; }
GetAlpha() m_fAlpha; } Render() ;
MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){@H_301_16@false;}@H_301_16@protected m_nID;
:
CAUIButton():
SetTexture( szFile)
SetTextureRects( RECT & rcNormal, rcHover,0);">rcpushed,0);"> RECT rcDisabled)
{ m_fAlpha fAlpha; printf("CAUIButton::SetAlpha, extra process here! ); }:
Render(){printf(CAUIButton::Render );}
{ printf(CAUIButton::MsgProc );
LoadTexture( szTextureFile) NULL;}
$#include
"
inheritance.h
nID);
:
#include
"
lua.hpp
{