windows

std::unique_ptrでHDCとHGLRCを扱う。

ゲームフレームワーク的なものを作る。番外編1。 windowsプログラミングにおいて、HDCなどのハンドルの管理は非常に面倒ですよね? HWND hwnd = ...; HDC hdc = GetDC( hwnd ); GDIを使った描画など; ReleaseDC( hwnd, hdc ); //使い終わったらReleaseするの…

ゲームフレームワーク的なものを作る。(1)〜Gameクラス〜

前回「windowsでゲームループを作る。(2)〜Windowクラス〜 - while( c++ );」のゲームループをさらに発展させて、ゲームフレームワーク的なものを適当に作っていきます。 Gameクラスを作る ゲームを起動するためには、事前に様々なオブジェクトの初期化が必…

windowsでゲームループを作る。(2)〜Windowクラス〜

VC++2010を使い始めたので、出来るだけC++0xの機能を使いつつ、前回(http://d.hatena.ne.jp/setuna-kanata/20100512/1273685558)のプログラムを書き換えていきます。 Windowクラス まずはHWNDのラッパークラスであるWindowクラスを作ります。今回必要にな…

windowsでゲームループを作る。

C/C++とwindowsでゲームを作る時、ウィンドウクラスを登録して、ウィンドウを作って、メッセージループを回して、ウィンドウプロシージャを用意して…と、非常に面倒ですよね。正直main関数内でそのようなつまらない記述を見たくないわけです。もっと素直に …

threadクラスの実装。その3-eventクラス-

condition variableのほうが一般的でしょうか? とりあえずwindowsなので、イベントのラッパーを作ってみます。 eventクラス #include <windows.h> class event { typedef HANDLE handle_t; public: event( bool manual_reset, bool init_state ) { handle = CreateEven</windows.h>…

threadクラスの実装。その2-intrusive_ptrを使う-

出来るだけdeleteは書きたくないので、前回実装したintrusive_ptrを使って修正します。 修正する項目は thread_data_baseクラスのデストラクタをprotectedにする thread_data_baseクラスに参照カウンタを追加。 thread_data_baseクラスにintrusive_ptr_add_r…

threadクラスの実装。その1

XAudio2のイベント通知のためにthreadクラスが必要になったので、テンプレートを使って実装してみたいと思います。ただし、pthreadは使ったことがないので、windowsのみの実装になります。 参考サイト Boost.Threads 前回雑記で書いたthreadクラスの実装を晒…

スレッドからSendMessageしてはいけない(場合がある)。

↑のような、スレッドを使ったストップウォッチ(StopWatch)を作っています。 Start/Stopボタン スレッドの開始/停止 Resetボタン 表示0、スレッド停止 スレッド 経過時間を表示 MVCのControllerは概ね以下のような処理になると思います。 class StopWatchCont…

MVC

こちらOpenGL GUI Applicationを参考にMVCを使ったwindowsアプリに修正します。 まずは、OpenGLを使わずに単純なアプリで実験します。 ボタンを押した回数をカウントするだけのアプリ download VC++2008EE MVC Model アプリケーションのデータを動作を定義 V…

OpenGLを使ってみる。その1 -初期化編-

OpenGLのレンダーターゲット周りを触ってみたくなったので、しばらくOpenGLを使っていきます。久しぶりのC++です。 開発環境 windows vista/xp VC++2008ExpressEdition c++ wgl(GLUTは使わない) ウィンドウを作る 面倒なのでWin32アプリケーションウィザード…

Windows Theme API 2-コントロールのテキストを不透明にする-

やっと出来ました。長かった。。。 左の「button1」が正しく描画されている状態です。 手順 1.ボタンのサブクラス化 SetWindowLongPtr 2.ボタンの描画の前に、ペイントバッファを用意 BeginBufferedPaint 3.メモリデバイスコンテキストに描画(デフォルトの…

Windows Theme API

DrawThemeTextExで描画 WTLのソースを見ながら必要な部分だけ自分のプログラムに組み込んでみました。 テキストの周りのglowがいいですねぇ。 背景が黒くても文字が読めますね。 さて、以下ソースです。 1.uxtheme.dllをロードしてtheme APIがサポートされ…

Aero Glass2

文字色の問題は原因がわからないので、先にAero GrassAero Glassの方を進めて行きます。クライアント領域を透明化する方法は、とりあえず2種類あるようです。 DwmEnableBlurBehindWindow()で指定したregionを透明化。NULLを指定するとクライアント領域全体 D…

Aero Glass

以下のようにクライアント領域全体を透明化してみましょう。 ただしボタンなどの黒い部分も透明になってしまいます。 C#で試してみる 参考サイト http://msdn.microsoft.com/ja-jp/magazine/cc163435.aspx サンプルをダウンロードして実行すると以下のような…

マニフェストを使ったビジュアルスタイルの変更。

あけましておめでとうございます。 今後も突っ込みどころ満載な、微妙な内容の日記になると思いますが、 宜しくお願い致します。 さて、2009年一発目は前回delegate5 - while( c++ );のコメントで教えて頂いた、マニフェストによるビジュアルスタイルの変更…

delegate5

前回delegate4 - while( c++ );の続き。以下のようなプログラムでフォームに対してボタンを配置することが出来る様になりました。 class HogeForm : public Form { private: ButtonPtr button1; ButtonPtr button2; public: HogeForm() : Form() , button1( …

delegate4

前回delegate3-C#風windowsアプリ - while( c++ );の続き。 日があいてしまったので、別エントリに書きます。 class.h アプリケーションで使用しているnamespace、クラス、列挙型の一覧を記述しておきます。 shared_ptrで管理するクラスはdef_managed_class…

delegate3-C#風windowsアプリ

以前の http://d.hatena.ne.jp/setuna-kanata/20081207/1228668906 delegate2 - while( c++ ); を使って、C#に近い形でwindowsアプリを作ってみます。もちろんC++/nativeです。 C#・C++/CLIを使え、とか突っ込まないで下さいw 目標 Formを継承したメインフ…

C++でjava風リスナを実装する

前回いまさらwindowsプログラミング - while( c++ );のプログラムにリスナを追加してみます。 今日の目標 WindowListenerインターフェイスを実装した派生クラスをウィンドウに追加する。 WindowClosing()でSystem::Exit()を呼び出すと、プログラムが終了する…

いまさらwindowsプログラミング

ちょっと気分転換で、windowsプログラミングを。 VC++ExpressEditionを使っています。 WinMain #include <windows.h> int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { return 0; } これまでのようにcoutで出力できるように、コンソールを割り当てましょう。 </windows.h>…