Windowsプログラミング

ダミーを使え

DirectShowを使ったWindowsアプリケーションで,去年から「できねー」って思ってたことが,ダミーを使ったらあっさりできた. 結構,既存のライブラリを活用することがあって,ライブラリが想定している使い方より細かいことをやろうとすると一苦労する.こ…

クライアント領域とウィンドウサイズの関係

Win32APIによって操作できるウィンドウの領域には,ウィンドウ全体の領域とクライアント領域がある.ウィンドウを生成する関数CreateWindowの引数には,ウィンドウの横方向のサイズ(X),縦方向のサイズ(Y)を指定する.この横方向のサイズ×縦方向のサイズがウ…

Win32APIで独立した複数のウィンドウの作成

ごく基本的なことだけど,Win32APIで独立した複数のウィンドウを作成する方法をメモ.Win32APIでは,CreateWindowの第一引数で指定されたクラス名をウィンドウの識別子として使用する.なので,これを変えてCreateWindowを呼び出せば,複数のウィンドウを作…

ウィンドウ再描画時のちらつき防止

ウィンドウのクライアント領域を再描画する関数に,InvalidRectが用意されてる. が,1秒間に何回もクライアント領域を再描画する必要があると,かなり画面がちらつく. ウィンドウの背景色で,クライアント領域全体を塗りつぶした方がいくらかまし. Select…

乱数を色として見てみる

OpenGLの頂点の色のRGBそれぞれに異なる乱数を指定して,TRIANGLE_STRIPをたくさん描画してみた. 頂点数60の結果の一フレーム. 頂点数600の結果の一フレーム. 頂点数600000の結果の一フレーム. 「あ,ランダムな色になってる」って確認できる. でも擬似…

DirectShowによる動画像の上下左右反転

カメラ映像を上下左右反転させるように中間フィルタ(TransInPlace Filter)を作成してみた.カメラの位置,向きに制約がある場合は,こういう風にソフトウェア的に処理するのが重宝する.反転させるメソッドは以下のような感じ. m_lVidHeight, m_lVidWidthは…

DirectShowでのマウス,キーボードメッセージの伝達

DirectShowでは,IVideoWindowインタフェースで,映像を表示するウィンドウに関する様々な設定,制御ができる. マウス,キーボードメッセージを受け取らせるウィンドウの指定は,m_pVW->put_MessageDrainで行える. HRESULT hr = m_pVW->put_Message((OAHWN…

Windowsの座標系からOpenGLの座標系への変換

windowsでは,座標の原点が左上にあり,右方向がX軸の正の方向となっていて,下方向がY軸の正の方向となっている.X軸の座標の値は,0以上DISP_MAX_X(ディスプレイのX軸方向の最大画素数)以下となる.同じく,Y軸の座標の値は,0以上DISP_MAX_Y以下となる.…

ウィンドウサイズの変更を禁止

ウィンドウプロシージャの,switch (message)の中に,以下の処理を記述する. case WM_GETMINMAXINFO: MINMAXINFO *pmmi; pmmi = (MINMAXINFO *)lParam; pmmi->ptMinTrackSize.x = WINDOW_WIDTH; // ウィンドウの最小幅 pmmi->ptMinTrackSize.y = WINDOW_HEI…

ウィンドウの描画領域内にあるマウスカーソルを消す

マウスカーソルが,ウィンドウの描画領域内にあるときのみ,カーソルを消す処理を実装中.以下のようなコードで自分は消してみた.Win32 APIのShowCursor関数は何度も呼び出すことができるけど,内部カウンタを持っていて,内部カウンタが0以下の時はカーソ…

ウィンドウ内のカーソル位置をコンソールに出力(Win32, C++)

//&nbsp;Test2.cpp&nbsp;:&nbsp;アプリケーションのエントリ&nbsp;ポイントを定義します。 // #include&nbsp;"stdafx.h" #include&nbsp;"Test2.h" #include&nbsp;<fcntl.h> #include&nbsp;<iostream> #include&nbsp;<io.h> #define&nbsp;MAX_LOADSTRING&nbsp;100 //&nbsp;グローバル変</io.h></iostream></fcntl.h>…

KINOTEXアプリケーションの設定方法(VS 2008)

現在研究で,KINOTEX Trialを使用したアプリケーションを開発中.Visual Studio 2008による,KINOTEX Trial APIを用いたアプリケーションの作成方法を記す.KINOTEXのマニュアルではMFCアプリケーションを例としているが,自分はMFCを使わない派なので,Win3…

MFCのWINVERのエラー

VistaでVisual Studio 2008でMFCを使って開発をすると,デフォルトでは#error Your version of the Windows SDK is earlier than 6.0. Try setting the 'WINVER' and '_WIN32_WINNT' definitions in your project to less than 0x0600. とかってエラーがでる…