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

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

 2010-10-15 09:07:42 来源:Web开发网   
核心提示:控件与窗体如果您以前进行过 Win32 GUI 编程,应该对对话框很熟悉,GUI库:使本机应用程序具备Windows窗体的简易性(4),您也应该很了解 API 处理对话框创建 (::CreateDialog) 的方式与处理窗口创建的方式 (::CreateWindow[Ex]) 有很大不同,作为编程人员,假设您拥有一个

控件与窗体

如果您以前进行过 Win32 GUI 编程,应该对对话框很熟悉。您也应该很了解 API 处理对话框创建 (::CreateDialog) 的方式与处理窗口创建的方式 (::CreateWindow[Ex]) 有很大不同。作为编程人员,您无需记住两个签名差异很大的复杂函数。它们均属于窗口类型。eGUI++ 只有一种创建窗口的方式:new_ 函数。

对于不同类型的窗口,窗体这个名称要比对话框这个名称更有表现力。它描述显示其他包含数据的控件的窗口。这两个名称我都接受,但是我更喜欢用窗体这个名称。实际上,从代码中您会看到:

typedef form dialog;

从概念上讲,只有两种窗口类型:控件和窗体。控件是显示一些数据的窗口,它可能允许用户进行修改。每个控件类都是从“控件”类派生的。窗体是承载一个或多个控件以及它们的一些自身逻辑(例如,允许对某些数据进行操作的逻辑)的窗口。

每个窗口类型的实际功能根据该窗口的用途而变化。例如,您需要注意,窗体允许您枚举其子控件,而控件不允许;这样,您的代码就不易出错了。同时,您也很少需要创建控件;通常它们已经存在于窗体上了 — 因为您已使用资源编辑器将它们放置在那里。

窗体本身划分为两种类型:模式对话框和消息框。要创建模式对话框,只需在创建窗体时添加 form::style::modal。要创建消息框,请使用 msg_box<> 函数将按钮指定为模板参数:

if ( msg_box<mb::ok | mb::cancel>("q") == mb::ok)
  std::cout << "ok pressed";

此外,msg_box<> 知道按钮组合在编译时是否有效:

// ok
  msg_box<mb::yes | mb::no>("q");
  // compile-time error
  msg_box<mb::ok | mb::yes>("q");

窗体编程

重申一下,窗体在 Win32 API 中称为“对话框”。对于 Windows 窗体而言,已证明窗体编程是一项成功的策略。每个窗体上均有一些控件,而每个窗体只解决一项任务。您可以使用能承载控件或其他窗体的选项卡,而无需使用又旧又复杂的单文档界面 (SDI) 或多文档界面 (MDI)。因此,您不会看到任何 CFrameWnd、CMDIChildWnd 或类似内容;它们没有存在的必要。如果您希望在一个窗体上承载多个窗体,只需使用 tab_form 类。使用该类,您可添加子窗体,每个子窗体都位于自已的选项卡上。

处理窗体

尽管我讨厌向导,但我知道有时一些向导确实可以使编程任务变得简单。因此,我在创建窗体之前创建了“新建类”向导。在类视图中,选择“添加类”,然后在“类别”中,选择“eGUI”。在左侧,选择“eGUI 窗体”,单击“添加”。指定类名称,便完成了创建(图 5)。该向导将创建一个名为“<dlgname>.h”的头文件,一个名为“<dlgname>.cpp”的源文件以及一个名为“<dlgname>_form_resource.h”的附加头文件,eGUI++ 会在内部维护这些文件。

图 5 添加类

最后一个头文件包含您在窗体中使用的所有控件名称。因此,您无需创建额外的控件变量和使用数据交换(像在 MFC 中一样),而直接使用控件。假设您拥有一个登录对话框,该对话框具有两个编辑框(“用户名称”和“密码”)和两个按钮(“确定”和“取消”),如图 6 所示。

图 6 编辑框和按钮

将为您生成下列文件:

// login.h
#pragma once
#include "login_form_resource.h"
struct login : form,
private form_resource::login {};
// login.cpp
#include "stdafx.h"
#include "login.h"

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

Tags:GUI 本机 应用程序

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