QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2002|回复: 5

The Easy Toolkit 0.1.9

[复制链接]
发表于 2006-5-3 23:52:34 | 显示全部楼层 |阅读模式
for Debian Linux: http://linuxfans.org/nuke/module ... fo&did=4300
for Windows: http://linuxfans.org/nuke/module ... fo&did=4301
参考文档(BeOS的):http://linuxfans.org/nuke/module ... fo&did=4112

多多交流,
asmcos,等到你的EGui写多一些,
我把GUI部分的也用EGui来写一写,
现在在写DirectFB的。

建议另外EGui开发多线程模型,这样的话可以不用在kernel里实现
DirectFB的Multi-App模式就是如此,虽然有fusion(只负责message-queue)
 楼主| 发表于 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]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2006-5-4 17:40:30 | 显示全部楼层
好,非常感谢
回复

使用道具 举报

发表于 2006-5-4 18:46:00 | 显示全部楼层
你的东西有点像QT和fltk,但是如果你不开源?可能很难发展?
如果这个不是个产品为什么不开源呢?
我不喜欢非开源软件,我不喜欢收费软件。呵呵。
回复

使用道具 举报

 楼主| 发表于 2006-5-4 19:01:26 | 显示全部楼层
尚未完善,我不想把一个未成品的源码展现在大家面前
所谓想遵循 BSD license,源码到时候应该是开放的,
但是我不考虑 GPL 方式。
我的目标不纯是GUI方向,这也不是我敬仰BeOS的原因。
回复

使用道具 举报

发表于 2006-5-4 20:16:27 | 显示全部楼层
哦,明白了。呵呵。

那你的目标是什么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 16:29 , Processed in 0.061243 second(s), 17 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表