2020年9月28日月曜日

ハイテクなローテク

暇なので会社でちょい便利ツールを作る


縛りがVC+2010(MFC)ってのが面倒ではあるんだけど、

手癖だけで組めるので設計ロスがほぼ0だからまぁいいか


ツールだけど教え子の教育用も兼ねてるので

色々楽しいコードを入れておく


とりあえずちょい便利ツールなのに

・プラグインでUIが変わる(差し替えは再起動不要)

・多言語サポート(言語変更は再起動不要)

あたりを実装しておこう


MFCなんでリソースファイル/リソースDLLに

プラグイン個別のUIや言語毎のStringTable書けばちょろいんだけど

MFCだとリアルタイム切り替えってところが微妙にできない


とりあえず、SQLiteのBlobデータに入れて、

MFC/GDIオブジェクトに戻せばいんじゃね

とかいう謎の設計を試みる


GdiPlusのBitmapやFontに戻すのはByte配列から楽ちんなんだけど

CBitmapとかMFC型がなまらめんどい

あいつらファイルかリソースから読む前提でしか作られてないからなぁ


デバイスコンテキストとか用意するのめんどくさいから

GdiplusのBitmapからHBitmap作って、

HBitmapからCBitmap作る

お、できるじゃんか


と思ったらCImageListに入れると、背景色が抜けない


マスクの仕方ミスったかと思ったけどそうでもない

うーんと唸ってても仕方ないので、メモリ見てると

bitperpixel:32

あれなんで32bitカラーになってるんだお前


どうもGdibitmapからHBitmapにした時点で

32bitに化けるらしく、そのままでもCBitmapにはできるものの

CImageListの追加時の背景色マスクが32bitCBitmapでは

ラスタオペレーション失敗してマスク配列作成失敗するっぽい?


とりあえず雑はやめて

byte配列からBITMAPFILEHEADERとBITMAPINFOHEADER作って

真面目にBITMAP構造体からデバイスコンテキスト使って

DIBなCBitmap作成


手抜きはアカン


こんなん256色やTrueColorのBITMAPをゴリゴリファイルから読んだ世代でないと

さっぱりわからんぞ

さすがMFCだぜ…

0 件のコメント:

コメントを投稿