WEB开发网
开发学院软件开发C++ GUI库:使本机应用程序具备Windows窗体的简易性 阅读

GUI库:使本机应用程序具备Windows窗体的简易性

 2010-10-15 09:07:42 来源:Web开发网   
核心提示:此代码不言而喻;mul_str 通过将字符串转换成双精度型并将其与转换率相乘,使双精度型与字符串相乘,GUI库:使本机应用程序具备Windows窗体的简易性(7),要像上面那样处理事件,我必须做大量工作,我用该变量来确保每个方法访问都是线程安全的,在扩展窗口类时,假设您拥有一个具有三个编辑框的窗体,其中每个编辑框都将生

此代码不言而喻;mul_str 通过将字符串转换成双精度型并将其与转换率相乘,使双精度型与字符串相乘。

要像上面那样处理事件,我必须做大量工作。假设您拥有一个具有三个编辑框的窗体。其中每个编辑框都将生成某一组事件。对于每个这样的事件(例如,on_change),我可以为每个控件生成一个可覆盖的函数

void on_change(edit::ev::change& e, ctrlname_);

或者只生成一个可覆盖的函数:

void on_change(edit::ev::change& e);

我更喜欢前一种解决方案 — 客户端代码比较简单(与 Visual Basic 方法更加类似)。您可以轻松地看到处理的内容(后一种解决方案与其不同,在事件的实施过程中,您必须手动查询通过 e.sender 生成事件的控件)。

这就是我实施第一种解决方案的原因。但是,实际上这其中也包含大量工作。eGUI++ 会监视资源编辑器。当添加新的控件或重命名控件时,会更新所有 <dlgname>_form_resource.h 文件。请注意,对于 form_resource::<dlgname> 类中的每个 <dlgname>_form_resource.h 文件,您必须从现有控件覆盖所有通知,而对于每个这样的已覆盖通知,则查找可以发送它的控件。下一步是生成将转发到每个控件的另一个可覆盖函数的实现。例如,图 10 显示了适用于具有两个编辑框和两个按钮的登录窗体的代码。

图 10 登录窗体代码

struct form_resource::login {
 wnd<edit> name;
 wnd<edit> passw;
 wnd<button> ok, cancel;
 typedef ... ok_;
 typedef ... cancel_;
 typedef ... name_;
 typedef ... passw_;
 virtual void on_change(edit::ev::change& e, name__) {}
 virtual void on_change(edit::ev::change& e, passw__) {}
 virtual void on_change(edit::ev::change& e) {
  if ( e.sender == name) on_change(e, name__());
  else if ( e.sender == passw) on_change(e, passw__());
 }
 // ... same for other edit notifications
 virtual void on_click(button::ev::click & e, ok__) {}
 virtual void on_click(button::ev::click & e, cancel__) {}
 virtual void on_click(button::ev::click & e) {
  if ( e.sender == ok) on_click(e, ok__());
  else if ( e.sender == cancel) on_click(e, cancel__() );
 }
 // ... same for other button notifications
};

最后,您可以通过从 new_event<> 派生事件来创建自己的事件。无论您是发送现有事件还是您自己的事件,过程是相同的:使用 send_event 函数:

struct hover : new_event<hover> {
int x,y; // position
hover(int x,int y) : x(x),y(y) {}
};
w->send_event( hover(x,y) );

此库是线程安全的。另外,每个窗口都具有 m_cs 互斥变量(基本上是 CRITICAL_SECTION),我用该变量来确保每个方法访问都是线程安全的。在扩展窗口类时,您可以重用 m_cs 变量或创建自己的变量 — 这由您决定。

上一页  2 3 4 5 6 7 8 9  下一页

Tags:GUI 本机 应用程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接