2009-01-01から1年間の記事一覧

HBITMAPからBITMAP構造体を得る

やり方 まさに一目瞭然ですので以下のコードをご覧ください。 // hBmp という HBITMAP型の変数があるとします BITMAP bmp; if(!GetObject( hBmp, sizeof(BITMAP), &bmp)) { // 失敗 return 0; } // 成功 情報 MSDN BITMAP 構造体 その先 参考にしたこちらの…

子ウィンドウにWM_MOUSEWHEELが来ない、受け取れない、処理できない時

チャイルドウィンドウにWM_MOUSEWHEEL(マウスホイールが回されたときのウィンドウメッセージ)が渡されない事がある。 親ウィンドウには届くんだけど、本命の子ウィンドウには届かない、そんな時。 結論 SetFocus( HWND); を使って、子ウィンドウにフォーカス…

CreateCompatibleBitmapの限界とCreateDIBSection

前置き わりとメモのような位置づけです。自分でもあまり理解していません。 CreateCompatibleBitmapでオフスクリーンバッファを作っていたが、大きいビットマップを作れないから、CreateDIBSectionを利用する事にした。 CreateDIBSectionなら巨大なビットマ…

あまりにも大雑把だけど画像ビュアーになった

追加した機能 拡大している際にスクロールバーをつけた こうしないと、マウスでつかんで移動するときに、どこまで動かせるのかわかりずらい。 タイトルバーにファイル名を表示するようにした どうせならすぐ上のディレクトリ名も表示した方が使いやすいかも…

ウマ耳画像あります

画像の拡大と縮小とスクロールができるようになりました クリックして画像をつかみ、カーソルを動かす事によってスクロールができます。 またマウスホイールで拡大縮小ができるようになりました。 ちょっとやりにくいですが、それらを同時に行うことも可能で…

クリティカルセクションに出たり入ったりするクラス

Effective C++ 第3版のを真似たつもりです。あの本ではミューティックスですが。 ソース #include <windows.h> // クリティカルセクションに出たり入ったりするクラス class CLock { public: CLock( CRITICAL_SECTION *c) : m_critsec(c), m_unlocked(false) { ::EnterC</windows.h>…

ちらつき防止 BitBlt winapi クラス化

BitBltとはそもそも BIT BLock Transfer から、BitBltだそうです。*1 使い方 この質問サイトに書いてあるサンプルが一番いいでしょうか。 http://oshiete1.goo.ne.jp/qa3052870.html こちらのを改造して使っています。実を言うとよく理解していません。 ちょ…

ひどいミス

そっち系のひどいミスをここに書いていこうかと思います。 if( ) + セミコロン if(m_rcSrc.Height <= 0); m_rcSrc.Height = 1; もし高さが0以下なら、それを1にする予定でした。 しかしちゃんとインデントもされているのに、ifのカッコの終わりにセミコロン…

エクスプローラのビュアの拡大機能についてわかったこと

上にマウスホイールを回すと拡大する ウィンドウに表示しきれなくなるとスクロールバーが付く ホイールボタンを押しながらカーソルを動かすと移動できる(スクロールバーが付いてる時) 画像のサイズはホイールを回すごとに1.2倍になる(コントロールパネル…

ミューティックスの所有権を同じスレッドから何度も得ようとするとどうなるか

題名からしてわかりにくいので、まずはそれについて説明。 Mutex(ミューティックス)は同期オブジェクト(synchronization object)の一つです。 これの所有権を得るにはWaitFunctionsと呼ばれる関数(*1)を呼び出し、所有権を解放するときにはReleaseMutex…

マウスのホイールの回転とWM_MOUSEWHEELウィンドウメッセージ

わりとメモのような位置づけです。 ソースはMSDN。正確でより詳しい情報を知りたい場合はそちらをお読みください。 概要 WM_MOUSEWHEELはマウスホイールが回されたときにフォーカスを持つウィンドウに送られる。 DefWindowProc関数(デフォルトウィンドウプ…

基盤は出来上がりました

アニメGIFを表示できるようになり、ドラッグアンドドロップにも対応して、これから感覚で操作できる自由な拡大機能を実装する予定。スクロールで拡大縮小、原寸大表示(クリックしたままドラッグすることで移動できる)など。 画像を表示している部分がディ…

マルチスレッドSDIとは何なのか

WTL

SDIについて WTLのアプリケーションウィザードでSDI, MDI, マルチスレッドSDI, 他色々を選択できます。 IT用語辞典 e-Wordsによれば、SDIはメモ帳で、MDIはExcelのようなウィンドウです。Excelは1つの親ウィンドウが、複数の子ウィンドウそれぞれに1枚ずつシ…

GDI+の初期化と終了 その2

要約 以前に書いたやつにエラーチェックを加えました。 このクラスはコンストラクタで初期化処理を行い、デストラクタで終了処理を行ってくれる優れものです。Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)作者: スコット・メイ…

IEのアニメGIFの再生速度について

IEは表示時間を微調整する GIFアニメ再生速度テスト用の画像を作成の下のほうに色々とまとめられています。 活動漫画館式動画講座やGIFアニメの速度についてを見ると、やはりIEは待機時間(delay)に限度を設けているらしい。(やっぱ独自仕様ってやつね。…

IEコンポーネントじゃ画像の拡大縮小ができないじゃん

IEコンポーネントじゃ拡大縮小できない ただしソースはソニー。IEの拡大縮小は、IEコンポーネントではなく、IE独自の機能らしいです。 実際、IEコンポーネントに該当するメソッドが見当たりません。 Explorerの画像ビュアーの機能は最低限実装したいと思って…

本日の成果

というかメモです。 GDI+で画像ビュアを作ろうとしてアニメGIFの表示で挫折し、IEコンポーネントでビュアを作っています。 以後、このビュアに関する話題では ビュア というタグをつけます。 WTL関係のエラーの解決策 error C3861: 'SetMsgHandled': 識別子…

GIFのまとめ

アニメGIFについての技術的なまとめです。 自前で表示するコードを色々書いたのですが、表示のタイミング(各コマの表示時間)が明らかに合わなかったり、そもそも未熟で上手く書けない、そしてなによりも同期オブジェクトやスレッドに嫌気が差しました。 GIF…

アニメGIFの各コマの待機時間を調べるコード

コードじゃなくてソフトがほしい方へ Giamというソフトがおすすめです。もちろん僕の作品じゃないですけど。Windows向けです。 http://homepage3.nifty.com/furumizo/giamd.htm 本題 GIFの細かい仕様は何となくわかったけど、それはまた今度。 フレーム,ディ…

gdiplus.hをインクルードするとコンパイルできないとき

結論→先に、#include IStreamが定義されていないとか、関数の戻り値の型が無いなどといわれます。 #include <windows.h> #include <gdiplus.h> INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow) { return 0; } 上記のようなコードではコンパイルが通ります</gdiplus.h></windows.h>…

GDI+の初期化と終了

使う前には初期化、使い終わったら最後に終了処理を行います。 行わなかった場合はどうなるのでしょうか・・・。きっとgdiplus.dllが困るのでしょう。 初期化と終了の関数のプロトタイプです。 Status GdiplusStartup( ULONG_PTR token *token, const GdiplusSt…

GDI+を使うための準備

まず必要なものと設定を書いておきます。 Windows SDK *1 http://www.microsoft.com/downloads/details.aspx?familyid=E6E1C3DF-A74F-4207-8586-711EBE331CDC&displaylang=en 設定 Windows SDKをインクルードしたらそれのInclude,Libディレクトリのパスを VC…

今日の成果

このような形で公開していかないとmemo.txtが肥大化してしまいます。 やる気をそぐページを発見した UsefullCodeさん。その節(*1)はお世話になりました。 http://www.usefullcode.net/imageviewer/ なんとまあ、WTL×GDI+で画像ビュアーを作ってるではあり…

GDI+での画像の読み込みと表示

画像(ラスタイメージ)を画面に表示するにはImage,Graphicsオブジェクトが必要です。 Imageクラスのコンストラクタに、画像ファイル名かストリームへのポインタを渡して オブジェクトを作成し、それのポインタを、GraphicsオブジェクトのDrawImageメソッドに…

GDI+を使う上でよく見かけそうな用語やクラス

ほとんどがSDKを訳したやつです。 クラス GdiplusBaseクラス GDI+オブジェクトのメモリの確保/解放を行うクラス。 GDI+の全てのクラスの基底クラスとして使われている。 このクラスのインスタンスを作ることはまず無い。 Image Imageクラスはベクタイメージ(…

GDI+ 前書き

GDIとは? SDKを読んだところ、どうやら、「WinAPIでできないグラフィックや映像の処理を可能にするライブラリ。Win64でもOK。」らしいです。 つまりJPEGやGIF、PNGを使えるようになるライブラリですと。 画像関係についてくわしく 以下SDKの糞訳。Microsoft…

基本情報技術者試験の勉強に役立った本 その3

大好評シリーズの3回目です。大事な本の紹介を忘れてました。情報はなぜビットなのか 知っておきたいコンピュータと情報処理の基礎知識作者: 矢沢久雄出版社/メーカー: 日経BP社発売日: 2006/09/07メディア: 単行本(ソフトカバー)購入: 3人 クリック: 38回…