DirectSoundを使うまでもない音の再生は
sndPlaySound API
http://msdn.microsoft.com/ja-jp/library/cc428790.aspx
もしくは
PlaySound API
http://msdn.microsoft.com/ja-jp/library/cc428768.aspx
を使う。

たしか複数再生が出来ないといった制限があったはずですが、ちょっとした効果音を鳴らすにはこれで足りるかと思います。

GDI+はAquaMakerでも使っているWindows標準(拡張?)のグラフィックス機能でして、最近趣味でも仕事でもちょくちょく使ってみたりしているのですが、メリットが非常に多い反面、デメリットも結構あるので、その辺の情報を載せてみたいと思います。

描画速度が遅い

これが一番ネックで、実際に採用されにくくなっている気がします。
DrawImageで画像を転送するだけでも遅いので残念です。
オフスクリーン同士で拡大縮小回転などを一切行わない場合はLockBitsだかでメモリをロックしてmemcpyなどでメモリをコピーした方が速いこともあります。

画像の拡大縮小の描画の際、補間モードを指定出来るのですが、速度の速いバイリニア方式(InterpolationModeBilinear)を使った際、初回縮小描画時は高品質・低速な描画で、いったん拡大描画や回転描画を行うと低品質・高速な描画が行われるようになったりして安定しません。
(良い回避策はなさそうな予感)

 

メタファイル(WMF,EMF)の描画でアンチエイリアスが掛からない

GDI+の線描画機能などはアンチエイリアスを掛けられるのですが、その設定をしていてもメタファイル描画の際にはアンチエイリアスが掛かりません。
他の描画は全て綺麗なのに、メタファイルだけはジャギーが目立つので非常に残念な結果になります。

ただ、これは一応対策がありまして、メタファイルを解析してGDI+の描画機能を使ってアンチエイリアスオンの状態で描画し、それをEMF+形式(?)に記録(保存)すれば、今度はそのEMF+形式を読み込んで描画したときには、アンチエイリアスオンの状態で描画が行われます。
(一度コンバータのようなものを作ってしまえばOKです)

GDI+にはメタファイルに記録されている命令を列挙する関数がありますので、その辺を使えばなんとか実現できます。

何かアクションが起こった際(例えばマウスクリック時)に、キーボードが押されているかどうかを判定したい場合があります(シフトキー等)。

そんな時には「GetKeyState関数」を使います。

押されていると、SHORT型の最上位ビットが1になります。

最下位ビットが1のときはキーがトグル状態にあることを、0のときはトグルが解除されていることを示します。

//シフトキーの判定例(& 0x80でも良いみたい)
if(GetKeyState(VK_SHIFT) & 0x8000){
	//処理
}

ちなみに、シフトやコントロールキーと言ったキーはマクロで定義されていますが(VK_SHIFT等)、
通常の「A」や「B」と言ったキーは定義されていません。これらのキーは、キーコードを指定しれやれば良いです。

if(GetKeyState('A') & 0x8000){
	//処理
}

同時に全キー状態を取得したい場合には、「GetKeyboardState関数」を使います。
この関数は、256バイトの配列を引き渡してやると、そこへ各キーの状態を詰め込んでくれます。

こちらも、最上位ビットが1の場合は押されているという事になります。

BYTE KeyState[256];
GetKeyboardState(KeyState);

//シフトキー判定例
if(KeyState[VK_SHIFT] & 0x80){
	//処理
}

記事検索

アーカイブ