|
楼主 |
发表于 2006-5-4 14:31:22
|
显示全部楼层
以下展示一个我翻译《BeOS 程序员入门导读》时第四章例子的 ETK++ 改版:
编译办法(Linux或MinGW):
[code:1]
$ g++ `pkg-config --cflags etkxx` view-test.cpp -o ./view-test `pkg-config --libs etkxx`
[/code:1]
view-test.cpp的内容:
[code:1]
/****************************************
* 注意:这里代码中的中文要用 UTF-8 编码
****************************************/
#include <etk/app/Application.h> // 使用 EAppIication 必须包含的头文件
#include <etk/interface/Window.h> // 使用 EWindow 必须包含的头文件
#include <etk/interface/View.h> // 使用 EView 必须包含的头文件
// 类的声明
class MyApp;
class MyWindow;
class MyView;
// 自定义 Application 类
// 用 MFC 理解相当于 CWinApp
// 用 QT 理解相当于 QApplication
// 用 GLIB 理解相当于 GMainLoop
class MyApp : public EApplication
{
public:
MyApp();
private:
MyWindow* m_win; // 此成员一般受 EApplication 管理,MyApp 销毁时自动释放
};
// 自定义 Window 类
class MyWindow : public EWindow
{
public:
MyWindow(ERect frame, const char* title, e_window_type type, euint32 flag);
virtual bool QuitRequested(); // 结束应用程式时调用的函数
private:
MyView* m_view; // 此成员因为 AddChild 受 EWindow 管理,MyWindow 销毁时自动释放
};
// 自定义 View 类
class MyView : public EView
{
public:
MyView(ERect frame, const char *name, euint32 resizingMode, euint32 flag);
virtual void Draw(ERect updateRect); // 响应重新绘画事件的调用函数
};
MyApp::MyApp()
:EApplication("application/x-vnd.big56-MyApp")
{
m_win = new MyWindow(ERect(100,100,300,150), "EView 测试", E_DOCUMENT_WINDOW, 0);
m_win->Show(); // 此时其它线程一般不操作该窗口,所以不用 Lock/Unlock
// 假如你要把 MyWindow 的事件接收交给 MyApp 的话,也就是 MyWindow 不会占用一个线程,
// 那么上面 "m_win->Show()" 换成下面的代码
#if 0
Lock();
m_win->Lock();
m_win->ProxyBy(this);
m_win->Unlock();
Unlock();
m_win->Lock();
m_win->Show();
m_win->Unlock();
#endif
}
MyWindow::MyWindow(ERect frame, const char* title, e_window_type type, euint32 flag)
:EWindow(frame, title, type, flag), quit_send(false)
{
frame.OffsetTo(0, 0); // 窗口框架 ERect 左上角坐标偏移到 (0,0)
m_view = new MyView(frame, "theView", E_FOLLOW_NONE, E_WILL_DRAW);
AddChild(m_view);
}
bool MyWindow::QuitRequested()
{
// 结束应用程式
etk_app->PostMessage(E_QUIT_REQUESTED);
return true;
}
MyView::MyView(ERect frame, const char* title, euint32 resizingMode, euint32 flags)
:EView(frame, title, resizingMode, flags)
{
SetViewColor(200, 200, 200); // 设置背景颜色
// 创建字体
EFont font;
// 设置字体样式
// 这里"SimSun"可换为任何支持中文的字体,
// 如Windows版本可把"SimSun"换成"宋体"
font.SetFamilyAndStyle("SimSun", "Regular");
// 设置字体大小
font.SetSize(20);
// 设置EView的字体
SetFont(&font, E_FONT_FAMILY_AND_STYLE | E_FONT_SIZE);
}
void MyView::Draw(ERect updateRect)
{
MovePenTo(20, 20); // 移动笔位置,此时相当于字符绘制时的基线起点
DrawString("你好,这是测试。");
}
int main(int argc, char **argv)
{
MyApp app;
// 开始进行 Application 的事件处理
app.Run();
return 0;
}
[/code:1] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|