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

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

 2010-10-15 09:07:42 来源:Web开发网   
核心提示:无 windows.h包括 windows.h 的主要问题是它太容易产生错误,什么能让您停止监视永远不会发生的事件?假设您是 button 类,GUI库:使本机应用程序具备Windows窗体的简易性(2),而在等待键盘事件;您将永远不可能等到,那么,而您也会注意到某些属性是特定于操作系统的:property<in

无 windows.h

包括 windows.h 的主要问题是它太容易产生错误。什么能让您停止监视永远不会发生的事件?假设您是 button 类,而在等待键盘事件;您将永远不可能等到。

那么,您为什么还需要 windows.h 呢?您应该能够使用常规 C++ 类用 C++ 编写 Windows 应用程序。因此,您无需知道 windows.h 的内部信息:无需知道 WM_LBUTTONDBLCLK、WM_LBUTTONUP 以及其他较长的事件名称。无需知道 LPNMITEMACTIVATE、NMHDR 或其他任何可疑的 C 结构。也无需知道更多的 C 样式转换。良好的 C++ GUI 库的主要功能应该是抽象出 Win32 API 并允许您处理类。

您是否对原始 C 结构(如图 1 所示)做了充分的处理?我知道我做了。因此,我现在可以按如下方式编写代码:

wnd<rebar> w = new_(parent);
rebar::item i(rebar::item::color | rebar::item::text);
w->add(i);

图 1 补全旧窗口代码

// The old way
hwndRB = CreateWindowEx(WS_EX_TOOLWINDOW,
 REBARCLASSNAME, NULL,
 WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|
 WS_CLIPCHILDREN|RBS_VARHEIGHT|
 CCS_NODIVIDER,
 0,0,0,0, hwndOwner, NULL, g_hinst, NULL);
...
rbi.cbSize = sizeof(REBARINFO);
rbBand.cbSize = sizeof(REBARBANDINFO);
rbBand.fMask = RBBIM_COLORS | RBBIM_TEXT |
 RBBIM_BACKGROUND;
rbBand.fStyle = RBBS_CHILDEDGE;

您可以看到,eGUI++ 隐藏了复杂性:您只需处理 C++ 类,而无需记住复杂的 API 函数(如 CreateWindowEx)、常数名称(WS_* 常数)或类似 REBARPARAMINFO 的复杂 C 结构。

eGUI++ 面向 Windows 2000 及更新版本。默认情况下,它的目标操作系统是 Windows XP SP2。但是,您可以选择让它面向其他操作系统,以便减少或增加可用功能。如果希望使其面向其他操作系统,只需在包含任何 eGUI++ 标头之前将 #define EGUI_OS 指定为其他操作系统常数(参见图 2)。

图 2 指定操作系统

// code from eGUI++
struct os {
typedef enum type {
win_2k,
win_2k_sp4,
win_xp,
win_xp_sp2,
win_vista
};
};
#ifndef EGUI_OS
#define EGUI_OS os::win_xp_sp2
#endif

当知道此代码中的 #ifdefs 很少时,您会非常高兴,因为这样阅读起来就容易多了。而您也会注意到某些属性是特定于操作系统的:

property<int,os::win_xp> some_prop;

例如,当您面向早期版本的操作系统并尝试使用上面的属性时,会发生编译时错误。

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

Tags:GUI 本机 应用程序

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