首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

想写一个GUI库,欢迎一起来写或是提些建议。解决办法

2012-03-17 
想写一个GUI库,欢迎一起来写或是提些建议。想写一个GUI库,欢迎一起来写或是提些建议。原因是:1. 我能找到的G

想写一个GUI库,欢迎一起来写或是提些建议。
想写一个GUI库,欢迎一起来写或是提些建议。
原因是: 
1. 我能找到的GUI库都不怎么好用,没怎么用C++的GP,对成员指针等不怎么应用。
  可能是过于考虑移植性了。 我想做的,为了我看着舒服,甚至可以只用GCC 4.5支持的特性。
2. 长得都一样,按钮都是圆角矫形,用鼠标一点都只是变凹下去,没有哪个点一下冒一阵烟雾的。
3. 都太局限,不能方便的做动画。用了opengl,也不能和其它界面元素整合。
初步想法:

1. signals
  回调有用继承多态实现的,就独立设计的触发注册的。
  继承多态实现的反映很快,不过过于耦合。 
  触发注册实现的,要么用起来觉得很不舒服,要么就是极慢(比如某库用boost实现)

  我想做的是库内部组件消息传递走继承方式,用户界面是触发注册。
  比如:
  //先定义一个普通函数和一个成员函数
  void message( const char* msg){
  std::cout << "msg=" << msg << std::endl;
  }
  class T{
  void message( const char* msg){
  std::cout << "msg=" << msg << std::endl;
  }};

  
  T t;
  //定义一个参数为const char*,返回值为void的信号
  signal<void(const char*)> msg;
  //注册触发
  msg.connect( &message);
  //注册触发
  msg.connect( &t, &T::message);
  //发射信号
  msg.emit( "hello world");

2. drawing
  所有组件不使用系统原有的,自己绘制。 准备使用cairo。
  也就是说,只要求系统生成一个空白窗体,之后在里面绘制自己想要的组件。
  这样达到了一种较好的控制,甚至是实现flash一样的效果。
  参考FLTK
3. events.
  用一个主窗体接收事件,窗体内部的组件都自己实现事件处理与分发。
  只有这部分是平台相关,不过这一部分占的比例不大。
  参考FLTK
4. 风格
  采用VCL的设计风格,不是用set,get来设置或是取得成员,而是重载运算符。
  比如:

  //一个窗体
  class Window{
  public:
  _int (width); //宽 (_int是一个宏,实现上很有意思的)
  _int (height); //高
  protected:
  //设置宽的函数。 没有设置高的函数,于是高只读。
  void $set_width( int var){
  if ( var >200 && var < 800){
  //宽己改变,重绘。
  }
  }
  };

  这样:
  Window w;
  w.height = 200; //编译挫败,height不可以设置。
  w.width = 300; //在200,800之间,可以设置。








[解决办法]
挺好的,想实现成什么样子呢?
[解决办法]
up 
mark
[解决办法]
关注 顶
[解决办法]
关注下
[解决办法]
支持
[解决办法]
这个太偏图像处理了,祝楼主顺利!
[解决办法]
你看看minigui 那些吧,这个事开源的,估计你可以借鉴一些,
不过就是这个是主要考虑在轻量级的系统上使用的
如果你想搞图形处理
现在也有开源的OpenGL函数库的 ,估计你也可以参考一下

[解决办法]
支持LZ
我等LZ的库做界面:-)

[解决办法]
mark
[解决办法]
开源的跨平台GUI库,大名鼎鼎的wxWidgets(www.wxwidgets.org/),所有的事件处理都用到了成员指针,摈弃了MFC丑陋的函数签名封装,将MFC数十种不同的消息函数签名统一封装到不同的Event里,极大的美化了消息映射的处理机制.(MFC的AFX_MSGMAP_ENTRY丑陋的成员和函数签名映射在软件工程的标准看来完全就是枚举所有情况的硬编码);对用GP,楼主可以看看Notus这个库(http://notus.sourceforge.net/),肯定让你直呼过瘾,什么design by concepts啊,meta programming啊,眼花缭乱.
[解决办法]
支持,建立一个开源库吧
[解决办法]
wxWidgets i like it


[解决办法]
我也胡乱发表一下自己的意见
lz想法很好的。但是LZ下了多的决心呢?还有技术上有问题吗?这个不是一段时间能做出来的,需要几年甚至你的一生来做哦。如果还在由于,最好放弃。
1. 我能找到的GUI库都不怎么好用,没怎么用C++的GP,对成员指针等不怎么应用。 
可能是过于考虑移植性了。 我想做的,为了我看着舒服,甚至可以只用GCC 4.5支持的特性。
这个问题我想LZ是想有很好的移植性。我认为楼主程序可以作成后台和前台,后台用C++做,是程序的核心,前台是界面支持。不同平台都用同一个后台程序(因为C++都是一样的),前台再另外考虑嘛。相对来说前台简单多了哈。
2. 长得都一样,按钮都是圆角矫形,用鼠标一点都只是变凹下去,没有哪个点一下冒一阵烟雾的。
这个效果可以重绘按牛实现嘛。就算做个按牛实现烟雾,也只是一个烟雾按牛,万一别个要下雨按牛呢,每个人要求不一样,要实现一个很完美的按牛是不可能的,。现在的函数库存在有别个的道理。
3.都太局限,不能方便的做动画。用了opengl,也不能和其它界面元素整合。 
这个就不了解了,不发表意见。
我们做程序一般都是主要做里面的东西,界面只要不太丑能看得过去就可以了。功能才是最主要的嘛。
[解决办法]

探讨

  Window w;
  w.height = 200;    //编译挫败,height不可以设置。
  w.width  = 300;    //在200,800之间,可以设置。

热点排行