Windows

コモンコントロールとWM_NOTIFYとWM_COMMAND

通知メッセージのくせにWM_COMMANDで届く WM_COMMANDと言えばメニューバーが操作されたときに届くメッセージ。 だけどそれだけじゃない。 なんと、コンボボックスが操作されたとき、通知メッセージがWM_COMMANDで届く。 (コンボボックスはコモンコントロール…

インスタンスハンドルとモジュールハンドルの違い

前書き HINSTANCEとHMODULEの違いについて、また、使い分けについて、調べたことをまとめようと思います。 違いは何なのか 歴史的な違い HINSTANCE と HMODULE の違い こちらをご覧ください。(タイトルがまんまかぶってますね) 2行でまとめると、歴史的に…

ウィンドウハンドルから実行ファイル名を取得する

前書き 昨日書いたのですが、間違って消してしまったのでもう一度投稿します。 ソースは残っているのですが、そのほかに何を書いたのかは忘れました。 グーグルキャッシュにも残ってなかった。IEのキャッシュも更新しちゃった。 なので書き直します。 ソース…

プロセスIDからウィンドウハンドルを取得する

前書き 「プロセスIDならわかるけど、ウィンドウハンドルはわからないなー」なんていう状況、よくありますよね? 僕は先ほど初めてそのような状況に出くわしましたけど。 流れ トップレベルウィンドウを列挙 各ウィンドウのプロセスIDを調べる 目当てのプロ…

C/C++でフォルダ(ディレクトリ)のサイズを取得する

VC++でフォルダ(ディレクトリ)のサイズを取得する例って、検索してもひっかからないんですよね。需要ないのかな。 エラーチェックは中途半端なので、安心して使えませんけど。 "C:\System Volume Information"など、特別なアクセス権が必要なフォルダが含…

コマンドライン引数の謎。引数に、スペース(空白)や、引用符を含める方法。

前置き(追記) ちゃんと検索したら、ちゃんと情報が出てきました。 http://www.up-cat.net/%25A5%25B3%25A5%25DE%25A5%25F3%25A5%25C9%25A5%25D7%25A5%25ED%25A5%25F3%25A5%25D7%25A5%25C8%25A4%25CE%25A5%25A8%25A5%25B9%25A5%25B1%25A1%25BC%25A5%25D7%25…

ファイルなのか、ディレクトリ(フォルダ)なのかの判別

IsFile/IsDirectoryっていうのを作ってみました。動作確認はXPのみ。 インクルードするやつ まずこんな感じのをコピってください。 #include <windows.h> #include <tchar.h> // PathIsDirectory() #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") IsFile関数 // ファイルかどう</shlwapi.h></tchar.h></windows.h>…

Unicodeでprintf

前置き printfじゃなくて、wprintfを使うらしいです。 char なら printf。w_char なら wprintf。そして、TCHAR なら _tprintf。 _tprintfを使う 前処理が必要みたいです。 #include <locale.h> _tsetlocale( LC_ALL, _T("Japanese")); // これが前処理 // // ・・・ // ・・</locale.h>…

WinAPIでディスプレイの解像度を取得する(まとめ)

WindowsAPIで画面のサイズを得る方法は、調べてみたらいくつかあるようです。 中には、タスクバーの領域を除いたサイズを返す関数もあるようです。 GetSystemMetrics式 これはフツーのやり方。 int dispx = GetSystemMetrics(SM_CXSCREEN); int dispy = GetS…

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 こちらのを改造して使っています。実を言うとよく理解していません。 ちょ…

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

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

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

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

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

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