コンテンツにスキップ

Windows Template Library

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。PixelBot (会話 | 投稿記録) による 2007年11月14日 (水) 18:52個人設定で未設定ならUTC)時点の版 (ロボットによる 追加: de:Windows Template Library)であり、現在の版とは大きく異なる場合があります。

Windows Template Library (WTL)はマイクロソフトによるWin32をラップ(カプセル化)するオブジェクト指向C++ライブラリ。WTLはプログラマが利用するAPIの1つである。MFCの軽量な代替として開発された。WTLはマイクロソフトのATLCOMActiveXのためのもう1つの軽量API)を拡張する。

マイクロソフトは2004年5月、オープンソースライセンスに基づいてWTLのソースコードを自由に利用できるようにした。マイクロソフトはSourceForgeというインターネット上のオープンソースコードのためのリポジトリにソースコードを投稿し、Common Public Licenseに基づいてリリースした。このライブラリはバージョン7.5の時点で、Microsoft Permissive Licenseとのデュアルライセンスでもあった[1]

WTLの多くのAPIは標準のWin32と直接的に対応しており、多くのWindowsプログラマーにとってなじみの深いインターフェイスである。未サポートのライブラリであるため正式なドキュメントはあまりない。この問題に立ち向かうため"WTL Documentation"プロジェクト[2]がスタートしたが現在でもまだドキュメントは完全ではない。

概要

WTLは、小さくて高速なコードという大きな利点のあるATLに対して、アプリケーションや様々なUIコンポーネントの両方のために、より複雑なユーザーインターフェイスをサポートするようにATLを拡張するクラスのセットである。WTLのクラスは、ATLベースのアプリケーション、サーバー、コンポーネント、コントロールに対して、リッチなWin32ベースのUIを実装するための最適かつ簡単な方法であるように設計された。

WTLは、フレームやポップアップウィンドウを初めとして、MDI、標準・コモンコントロール、コモンダイアログ、プロパティシートやページ、GDIオブジェクト、UIのアップデート、スクロールバーウィンドウ、スプリッターウィンドウ、コマンドバーなど、様々なユーザーインターフェイスの要素をサポートする。WTLのクラスは主にテンプレートであり、最小限のインスタンスデータとインライン関数を使う。これらはフレームワークとしてデザインされたものではないため、特定のアプリケーションモデルを強制せず、どのようなスタイルでも受け入れられる。クラスはフックやスレッドローカルのメモリ領域を利用しないのでこれらのテクニックの押しつけに制約されない。これらには従属関係が無く、ストレートなSDKのコードと自由に混ぜることができる。要するに、WTLは、より論理的でオブジェクト指向的なモデルをプログラマに提供しつつも、SDKによるプログラムと比べてもサイズとスピードでほとんど遜色のない非常に小さくて効率的なコードを出力する。

プログラム例

Hello worldを表示するプログラムである。

#include <windows.h>
//ATLヘッダ
#define _ATL_NO_AUTOMATIC_NAMESPACE
#include <atlbase.h>
#include <atlwin.h>
//WTLヘッダ
#define _WTL_NO_AUTOMATIC_NAMESPACE
#include <atlapp.h>
#include <atlcrack.h>

class HelloWindow : public ATL::CWindowImpl<HelloWindow>
{
public:
    // ウィンドウクラス名を登録
    DECLARE_WND_CLASS(TEXT("HelloWindow"));

private:
    // メッセージマップ
    BEGIN_MSG_MAP(HelloWindow)
        MSG_WM_PAINT(OnPaint)
        MSG_WM_DESTROY(OnDestroy)
    END_MSG_MAP()

    void OnPaint(HDC)
    {
        WTL::CPaintDC dc(m_hWnd);
        dc.TextOut(10, 10, TEXT("Hello, world"), -1);
    }

    void OnDestroy()
    {
        PostQuitMessage(0);
    }
};

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int nCmdShow)
{
    HelloWindow wnd;
    if (!wnd.Create(NULL, ATL::CWindow::rcDefault, TEXT("Hello, world"), WS_OVERLAPPEDWINDOW))
    {
    	return -1;
    }

    wnd.ShowWindow(nCmdShow);
    wnd.UpdateWindow();

    WTL::CMessageLoop msgLoop;
    return msgLoop.Run();
}

関連項目

外部リンク