原始人のプログラミング日記

println(++C++); // println(C++), ++C;

ぼくの かんがえた さいきょうの らいぶらり

嘘です。最弱です。

文明が成熟した現代において、素のC++で書かれたライブラリは作者のひいき目から見ても弱いです。
C++自体は弱くないので好きです。

Kawazuiniライブラリ

GitHubソースコードを公開しています。

github.com

特徴

  • 使うにはKApplicationを継承したクラスのupdate()とdraw()を実装するだけ。
  • ライブラリのクラスはすべて「K-」ではじまる。
  • WindowsAPIが使える。
  • OpenGLが使える。
  • GLUTを使わずに作成されている。

使用方法

前提として
  • WindowsAPIを使用しているのでWindows限定です。
  • C++11に準拠して書いているつもりです*1
  • ライブラリを使用して起きるいかなる不具合について責任は取りません。
事前準備

リンクの必要なライブラリ

  • lgdi32
  • lgdiplus
  • lOle32
  • lmsimg32
  • lwinmm
  • lOpenGL32
  • lGLU32

遠い昔の記憶によれば、MinGWC++環境にすべて入っているはず。
なので、特別にライブラリをインストールする必要はないと思います。

具体的なソースコード

main.cpp

#include "Kawazuini.h"
#include "MyApp.h"

int WINAPI _tWinMain(
        HINSTANCE aInst,
        HINSTANCE aPrevInst,
        LPSTR aCmdLine,
        int aCmdShow
        ) {
    KWindow::MainArgs args{aInst, aPrevInst, aCmdLine, aCmdShow};

    try {
        KWindow window(args, KRect(800, 800), "ウィンドウタイトル", true);
        MyApp app(window);
        window.show();
        app.start(50);
    } catch (Error& e) {
        message(e.what(), "初期化エラー");
        return 1;
    };

    return 0;
}

MyApp.h

#ifndef MYAPP_H 
#define MYAPP_H 

#include "Kawazuini.h"

class MyApp final : public KApplication {
private:
    KGLTextLabel mFPSLabel;
public:
    MyApp(KWindow& aWindow);
    ~MyApp() = default;

    void draw() const override;
    void update() override;
};

#endif /* MYAPP_H */

MyApp.cpp

static const KImage IMG_CHARSET_MEDIUM(IDI_CHARSET_MEDIUM);
static const KCharset CHARSET_MEDIUM(IMG_CHARSET_MEDIUM, 16);

MyApp::MyApp(KWindow& aWindow) :
KApplication(aWindow),
mFPSLabel(KVector(), CHARSET_MEDIUM, loadString(IDS_FPS) + "100") {
    mFrontUI.addContent(mFPSLabel);
}

void MyApp::draw() const {
    KDrawer::DRAW();
}

void MyApp::update() {
    static const String TEXT_FPS("FPS : ");
    mFPSLabel.setText(TEXT_FPS + toString(mFrame));
}

これだけでウィンドウが生成されて画面上にフレームレートが描画されるはずです。*2*3

終わりに

ライブラリは趣味で作っているだけなので、温かい目で見ていただければいいと思います。
また今回説明していないことも、GitHubにあげているドキュメントに書いてあったりするので、もし使おうと思ったらそちらを見てください。
適当でしたが、こんな感じでやっていきます。

*1: MinGWでのコンパイル以外は検証していません。

*2:OpenGLでUIが作成されているため、文字列描画のために文字列描画用の画像が必要になります。

*3:ソースコードコンパイルしてないので失敗するかもしれません。