ATL/WTL

MFC/ATLのコレクションクラスと文字列クラスをRangeにする

今度こそ完成した、はず (ドキュメント) こういうものを作ると、これらのクラスは使ってはいけないとよく分かる! ただCSimpleArrayと文字列クラスは役に立つかもしれない ついでにWTLも サンプルコード

さよならラッパー

気づくのが遅すぎたかもしれない・・・window_ptr, window_ref []inline[] []void[] []enable_window[][]([][]window_ref[] []wnd[][], [][]bool[] []on[][])[] []{[]

モダンな?::GetWindowText

ずっとこの有名な関数をC++にするとどうなるのか考えていた 今のところの結論、WindowTextはRangeである・・・ダウンロード 実装はただのBoost.ScopedArrayです Boost.BaseFromMemberは意外と使う機会が多い []#include[] []<pstade/tomato/window/window_text.hpp>[] []#include[] []<pstade/oven/sequence_cast.hpp>[]</pstade/oven/sequence_cast.hpp></pstade/tomato/window/window_text.hpp>

Boost.Sequence?

昨日の続きですが、普通にresizeを提供した方がいい気がする このような感じで []TCHAR[] []szSrc[][][] = [][]_T[][]([][]"hello, cstring_begin!"[][]);[] []std[][]::[][]basic_string[][]<[][]TCHAR[][]> [][]ans[][]([][]szSrc[][]);[] []{[] []std[][]…

crtp_cast

ATL/WTLではCRTPというテクニックを多用している これはtemplateを使ったTemplate Methodパターンである(ややこしい) static_castが使えるが意味が多すぎるので避けたい、そこで・・・ダウンロード キャストさえ面倒な人にはauto_derived []#include[] []<pstade/crtp_cast.hpp>[]</pstade/crtp_cast.hpp>

Use ATL7/WTL under VCExpress

Visual C++ 2005 Express Editionで.NET 2003のSDKやATL7を使えるようだ・・・ATL3の場合 しかし_ATL_MIN_CRTを使えるようにする方法は分からず エラーが出たら template<>をコメントアウトする・・・参照 基底クラスのテンプレート引数として自分自身を渡す…

boolean_cast

BOOLとboolを変換します・・・ダウンロード BOOLとboolの暗黙の変換は安全ですが警告がでます それを消そうとして return ::SomeAPI() == TRUE; とするのは危険です 成功の値としてTRUE(1)ではなく「0ではない」値を返すAPIがあるから static_castは意味が多…

Boost.ConfigがeMbedded Visual C++ 4.0で定義する主なマクロ

BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS 実行時まで失敗が分からないので注意 BOOST_(APPEND_)EXPLICIT_TEMPLATE_(NON_)TYPEを必ず使うこと それでもコンパイルが通らない場合があった BOOST_NO_FUNCTION_TEMPLATE_ORDERING BOOST_NO_MEMBER_TEMPLAT…

Boost.ParameterをATLで使う

ドキュメントが更新された。使い方が少し変わった。完成? _ATL_MIN_CRTを定義していると何も言わずにクラッシュするので注意。 []#pragma[] []once[][]#pragma[] []warning[][]( push )[] []#pragma[] []warning[][]( disable : 4100 )[][]#ifdef[][] _ATL_…

メッセージハンドラの実装

win32gui メンバ関数を静的オブジェクトの初期化を利用して自動的に登録しているようだ MFC メンバ関数を登録するために、メッセージマップが必要 WTLとketchup ただのif文をメッセージマップで作る notus まだ実装してないようだ

The ketchup message map library

納得のいく形になってきた。 まるで関係の無さそうなbiscuitとほとんど同じことをやっている。 MPL Sequenceとmpl::foldによるコンパイル時のコードの生成はコンパイルに時間がかかるので使えない。 代わりにBoost.PreprocessorとBoost.Waveで手作りする。 …

Boost.MPLでWTLのマクロの削除を試みる

ソースはこちら デバッグ時には、「全般→デバッグ情報の形式→行番号のみ(/Zd)、または無効」を選択しないとコンパイラがクラッシュすることがある 使用法は以下のような感じになる(この例でプログラムサイズはマクロより2KBほど大きくなる) []struct[] []big…