65.9K
CodeProject 正在变化。 阅读更多。
Home

用于快速简便开发Win32应用程序的库

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.50/5 (9投票s)

2004年10月11日

4分钟阅读

viewsIcon

67453

downloadIcon

1261

win32easy 是一个静态库,它使 Win32 编程变得像旧式的 C 语言编程一样简单,带有一个“main”例程。

引言

Windows 编程可能是一项非常繁琐的任务,即使对于经验丰富的程序员来说也是如此。众多的 API 函数和窗口消息、组件对象模型等使得应用程序功能非常强大,但另一方面,这可能非常令人沮丧,因为即使是一个简单的应用程序,也需要投入大量的时间和精力来构建。后一种情况尤其适用于计算机相关科学领域(如生物信息学)的人员,他们主要专注于科学研究,并不真正想理解 Win32 API 的所有细节。其结果是,在科学界,我们有许多界面极其糟糕且不直观的软件。

很多时候,我们对 Windows 应用程序的需求是体面的输入和方便的输出。将数据例如从 Excel 转换为文本文件,通过应用程序进行处理,然后再重新格式化回 Excel,这是非常令人恼火的。不幸的是,科学界的大多数程序都是这种情况。

Win32Easy 是一个静态库,它有助于加速 Win32 应用程序的开发过程。Win32Easy 提供了一些类来处理窗口化以及与其他应用程序(如 IE 和 Excel)通过 COM 进行交互。这些类隐藏了程序员的复杂性,但库的代码非常透明且易于理解,这与 Microsoft Foundation Classes (MFC) 不同。此外,该库类数量不多,而是提供了最重要的类。该库并非旨在完全避免 Win32 原生代码;相反,它有助于以无缝的方式使用它。

使用 Win32Easy

典型的应用程序代码如下所示

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
             LPSTR lpCmdLine, int nCmdShow)
{
    /*no panic, just initializing OLE - we are communicating with Office */
    HRESULT hr;
    if(FAILED(hr = OleInitialize(0)) )
       throw ole_exception(hr); 


    HtmlWin htmlWindow(hInstance);
    htmlWindow.OpenURL(L"http://www.google.com/");

    //do some work
   TextOutWindow tow(hInstance);
   tow.PrintText(TEXT("Some text"));


   Chart ch(hInstance);
   double dx[] = {10,20,30,40,50,60,70};
   double dy[] = {100,400,900,1600,2500,3600,4900};
   ch.Setx(0, dx, 7);
   ch.Sety(0, dy, 7);


   tow.WaitForEnd();
   return 0;
}

就这样。您不会在主例程中找到像消息循环或创建窗口时繁琐的数百个参数。这种繁琐确实存在于 HtmlWinTextOutWindow 类的实现中,但这并不会干扰代码的清晰度及其主要焦点——程序必须执行的计算。它看起来像一个经典的 C++ 程序,带有一个主例程。事实上,带有主例程的旧命令行代码可以轻松地移植到 GUI 应用程序。

它是如何工作的?

其工作机制很简单:表示窗口的对象会创建自己的线程并在那里处理所有 GUI 工作。程序流程集中在主线程的 WinMain 过程中,而消息处理和其他与窗口相关的操作则隐藏在对象的实现中。自然,win32easy 库有助于开发主导型应用程序,这些应用程序引导用户完成整个计算过程,而不是仅仅等待用户操作。这种行为通常非常受欢迎,尤其是当开发人员希望避免其应用程序的潜在用户阅读冗长的手册时。

部分类示例

本节的目的是提供一些有用类的示例,并展示它们的一些成员函数,以演示使用该库执行任务的便捷性,而这些任务仅使用 Win32 原生代码完成将非常复杂。

MSExcel

如果您需要以 Excel 文件读取或保存计算结果,此类非常方便。它提供了创建新文件、打开和保存现有文件的功能。通过直接的 OLE 进行此操作时,您需要为许多中间对象创建大量接口,这使得代码非常难以管理。仅举几例成员函数

int OpenFile(LPOLESTR fname);
int SaveAs(LPOLESTR Fname);
int SetCellsArray(LPOLESTR lpSheet, LPRECT lpr, int *pdx);
int GetCellsArray(LPOLESTR lpSheet, LPRECT lpr, double *parr) const;
int CellValue(LPOLESTR lpSheet, int iRow, int iColumn, double *d);

TerminalWindow

很多时候,有必要告知用户当前正在进行的进程或提供一些文本信息。仅使用 TextOut(HDC...) 函数并不是一种非常方便的方式,因为您需要处理屏幕上的文本行、滚动、数字到文本的可能转换。如果能有一个类似旧的 printf(...) 函数的功能,能够处理所有这些,并且在窗口中显示,并且还能将文本复制到剪贴板,那就太好了。TerminalWindow 就可以做到这一切。

bool PrintText(int iResID, va_list args) const;
bool PrintText(LPCTSTR format, va_list args) const;
bool PrintText(int iResID) const; 
bool PrintText(LPCTSTR lszText) const;

库主页

有关该库的详细信息以及每个对象及其成员函数的描述,请在此处获取:here。此外,您还会找到一个由 win32easy 驱动的分子动力学应用程序,该应用程序使用了所有现代技术,如 GUI、COM 和 DirectX。

享受轻松的 Win32 开发。

© . All rights reserved.