戻る][過去ログ一覧
プチメタ
総アクセス数

   プチメタ日記:2007年8月16日(木)12時59分 固定リンク

技術ノート:WS_EX_LAYEREDスタイルのウィンドウでDirect3Dを使う

数日前に悩んでいた問題が解決した。

やはりWS_EX_LAYEREDスタイルを付加したウィンドウは
Windows側で出力周辺を触るらしく、
Direct3Dによる出力とケンカして、どうにも相性が悪い。

そこでDirect3Dを使ってバックバッファに描画したあと、
通常行うPresent関数を使わずに、
画面出力に関してはVisual C++の手法を用いる。

実はバックバッファにはGetDC関数が用意されているので
(内部でロックをしているのでDirect3Dの初期化時に
 D3DPRESENTFLAG_LOCKABLE_BACKBUFFERフラグを付加しておく)
それによってHDCを手に入れ、
BitBlt関数でウィンドウ本体へとコピーする。

こうすれば、Direct3Dで描画した内容ではあるが
最終的な出力はVisual C++アプリと変わらないので
WS_EX_LAYEREDスタイルのウィンドウでも問題が起こらない。

もちろんSetLayeredWindowAttributes関数で
透明度を変更したりしても大丈夫。

3Dでぐりぐり動く半透明Windowsアプリとかが作れたりする。
同じ問題で苦労しているプログラマのために書き残しておく。


   プチメタ日記:2007年8月16日(木)20時35分 固定リンク

Amazonのバナーで、Webページの内容に合わせた広告が表示される
「Amazonおまかせリンク」というやつをトップページに貼ったら
このDVDの広告ばかり表示されるので、すぐ外した。



原因はわかってるんですけども。


   プチメタ日記:2007年8月17日(金)17時05分 固定リンク

新しいソフトの制作に取りかかっている。

ゲームを作ろうかとも思ったけど、学生の補習を頻繁にしている今は
集中できる時間が取れない。

なので、とりあえず規模の小さなソフト、
デスクトップアクセサリ的なものを制作中。

最初に予想してた峠は越えたけど、
今度は予想外に2番目の峠が現れ、それも乗り越えた。
あとは最後の山場。制作4日目にて開発率60%。

なんとか夏のうちにベータ公開したい。


   プチメタ日記:2007年8月18日(土)13時14分 固定リンク

PS2「アーバンカオス

面白い。個人的にこれは大アタリ。
大好きなFPSではあるのだが、グラフィックも非常に質が高い上、
ステージ数も多く、その内容も豊富。

市民を守るためにギャングと戦う特殊部隊の主人公だが
FPSには珍しく「盾」を持っていて、弾を防ぐだけでなく
その盾で殴ることもできる。

いつでも防御でき、そのままリロードすることができるので
簡単すぎるように思えるかもしれないが
その分、敵の銃撃がかなり激しく
火炎瓶やアサルトライフル、ナタなどで攻撃してくる。

ヘッドショットも狙いやすく、武器の種類も多いし、
掃討、救出、逮捕など、目まぐるしく追加されるミッションも
スピード感があっていい。

スタンガンやライオットグレネードを使えば
敵を殺すことなく気絶させて逮捕することもできるし、
容赦なくチェーンソーでぶった切ってもいい。

ヘッドショット数、逮捕数、
ノーコンティニューなどの評価によって
メダルが入手でき、それが一定数たまるごとに
武器や装備が充実していくのも面白い。
それによってさらに難しいステージやレベルに挑戦できる。

時間制限の発生するミッションは結構ギリギリなので
最初はやや難易度が高く感じるが、
消防士や救護士とともに災害現場を回り、
市民や仲間を助けていくのも従来のFPSではない楽しさだ。

また、ミッション前に挿入される実写ニュース映像も
ゲームの内容とマッチしていて臨場感を出している。
英語をしゃべるアナウンサーに
日本語の吹き替えが重なるあたり、非常にリアル。

1ステージあたりのボリュームもなかなかで
最近の中では一番のアタリゲームだった。


   プチメタ日記:2007年8月19日(日)9時52分 固定リンク

犬に使うノミの薬についての質問のベストアンサー

ベストアンサーは質問者が選ぶんだと思うけど、
これで解決したのでしょうか。
「そんなこと気にせずにゲームでもしろよ」みたいな。


   プチメタ日記:2007年8月20日(月)15時19分 固定リンク

映画版マインスイーパ

Windows付属のマインスイーパをやったことがある人なら
セリフのひとつひとつにニヤリとしてしまう。

あんなシンプルなソフトを実写にすると
こんなにも心が動かされる映像になるとは。


   プチメタ日記:2007年8月20日(月)22時22分 固定リンク

アプリケーションにファイルがドロップされたことは
WM_DROPFILESメッセージが来ることでわかるけど、
ウィンドウ上にリストボックスが複数ある場合、
そのうちのどれに対してドロップされたのかを
どうやって判断すればいいのだろう。
wParamやlParamにも判別できる材料は含まれていないようだし。

そういうソフトって存在しないのか。
それとも何かしら実現できる方法があるのかなぁ。


   プチメタ日記:2007年8月21日(火)15時12分 固定リンク

外でゴキブリを見かけるとなんであんな憂鬱になるんだろう。
(家の中で見かけても憂鬱だけど)

「あっ、外にもいるんだ……」みたいな感じになる。虫なのに。
そしてたいてい家の中で見たときより弱そうだ。
周りのものが大きい屋外だと、相対的にゴキブリが遅く見える。

家の中だと黒いものが動いた瞬間、
「うわー!ゴキブリだー!」となるのに、
外だと「あ、あれ?ゴキブリ…かな?」になる。
一般的な昆虫なのかゴキブリなのかイマイチ自信がなくなる。

つまりゴキブリは内弁慶なのだ。家の中でだけ強い。


   プチメタ日記:2007年8月22日(水)19時54分 固定リンク

プログラムに関する一昨日の疑問、2件ほど情報メールが。

●ドロップされたときのマウス座標によって
 どのリストボックスか判断する
●リストボックスをサブクラス化して
 そっちのプロシージャでWM_DROPFILESを受け取る

あたりではないか、と。

うーん、なるほど。
座標の方はちょっと強引な感じなので
あまりやりたくはないなぁ。

どちらにしろ、こういう地味な作業が
意外なほどに手間がかかったりしますね。Visual C++プログラムって。


   プチメタ日記:2007年8月23日(木)8時25分 固定リンク

ここ最近で一番失敗した買い物。



Healing Moon(ヒーリングムーン)

壁にかけてリモコンで操作できる照明雑貨。
全体的にイマイチな部分が多すぎる。

周囲が暗くなったら自動的に光る設定があるのだが
よりによって背面に光センサーがあるので
壁にかけると常に暗いと判断する。明らかに設計ミス。

本体、リモコンともに、いちいちドライバーでネジを外さないと
電池交換ができない。
しかも使っていなくても本体側の電池の減りがやたら早い。

とにかく造りと設計が雑。
「ヒーリング」と付いていながらまったく癒されることもなく、
即座にゴミ箱に放り込みたくなった。


   プチメタ日記:2007年8月23日(木)22時02分 固定リンク

技術ノート:ダイアログボックスでWM_KEYDOWNを受け取る

Visual C++プログラムにおいて
ごくごく基本的なWM_KEYDOWNメッセージだが、
実はダイアログボックスの場合はこのメッセージが来ない。

WM_KEYDOWNの対処というのが初歩の技術なので
ダイアログ上でも安易に使いたくなるのだが、
実際やってみるとメッセージが来ないもので
初めて体験すると結構驚く。

というのも、ダイアログボックスは
エディットボックスやボタンなどのコントロールを配置すると
キーに関しては半自動的に反応するし、
TABキーを押すとフォーカスが移るし、
Enterキーを押すとOKボタンが押された代わりになる。

こういう処理を内部でやってくれる代わりに
キーに関する情報はすべて内部で処理されてしまって
ダイアログのプロシージャにはWM_KEYDOWNが飛んでこないのだ。

しかし、独自のキー操作処理を導入したいこともあり、
情報が来ないと非常に辛い。

そこで処理を「フック」する。
フックの名の通り、ダイアログボックスで内部処理される情報を
途中で「引っ掛ける」のだ。
フックを仕掛けておけば、該当する情報を一旦受け取れる。
その中から必要な情報に対して処理をし、
そうでない情報はそのまま通過させるのだ。

HHOOK hHook;

フックのハンドルを宣言しておく。

そしてWM_INITDIALOGの中などで

hHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,
        NULL,GetWindowThreadProcessId(hDlg,NULL));

とし、フックを仕掛ける。
第1引数にWH_KEYBOARDを指定するとキーに関する情報が
第2引数で指定したKeyboardProc関数に飛んでいく。

KeyboardProcは以下の形で記述しておく。

LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,
                       LPARAM lParam)
{
  //0未満のときはCallNextHookEx関数にメッセージを渡し、
  //CallNextHookExが返した値を返さなければならない
  if(nCode < 0){
    return CallNextHookEx(hHook,nCode,wParam,lParam);
  }

  //キーに関する情報が来たなら
  if(nCode==HC_ACTION){
    //キーの情報をダイアログボックスに送ってやる

    //キーの遷移状態のビットをチェックして
    //WM_KEYDOWNとWM_KEYUPを区別する
    if((lParam & 0x80000000)==0){
      SendMessage(hDlg,WM_KEYDOWN,wParam,lParam);
    }else{
      SendMessage(hDlg,WM_KEYUP,wParam,lParam);
    }
  }

  return CallNextHookEx(hHook,nCode,wParam,lParam);
}

この関数の中で、キーに関する情報が通過する際に
目的のダイアログにSendMessageでWM_KEYDOWNメッセージを送れば
ダイアログプロシージャの方で対処ができる。

勝手にキー情報をつぶしてしまうと
本来、ダイアログ内部で処理されるキーまで反応しなくなるので
CallNextHookExを使って、受け取った情報を再度流してやる。

これでダイアログプロシージャの方では
ほぼ通常通りの処理が書ける。

case WM_KEYDOWN:
  switch(wParam){
  case VK_DELETE:
    //自分にフォーカスがあるときだけ反応する
    if(GetFocus()==GetDlgItem(hDlg,IDC_LIST1)){
      //やりたい処理を書く
    }
    break;
  }
  break;

場合によっては、反応するコントロールに
フォーカスがあるかどうかをチェックした方が綺麗な結果になる。

なお、対象のダイアログボックスを閉じるとき、
つまりEndDialogなどを行うときに

UnhookWindowsHookEx(hHook);

としてフックを解除しておく。


ダイアログボックスでキーを使うという需要は高いだろうに
単純なようで意外と手間のかかるこの処理。
同じ問題でつまづくプログラマは多いと思うので
ここに情報を残しておく。


   プチメタ日記:2007年8月24日(金)13時21分 固定リンク

スゲエ大胆なものでDJする人

まさに神。


   プチメタ日記:2007年8月25日(土)9時10分 固定リンク

携帯の待ち受けをアプリにするとバッテリーの消費が膨大なので
FLASHのファイルを壁紙に設定することにしている。
ただの画像と違ってバッテリー残量や電波強度とも連動できるし、
アプリよりも軽い。

最初にFLASHのファイルを
壁紙設定できることに気づいたときには結構驚いた。
ただし、内部に携帯用かどうかのフラグがあるらしく、
パソコン用のFLASHは携帯には使えない。

FLASH待ち受けを探していて最近見つけた
フラっとおいでよ三文堂」がなかなかいい。
「喫煙室」「AcidMetal」が特にシュール。

携帯用FLASHが作れるソフトがあれば
エヴァメーター携帯版を作っても面白いかも。


   プチメタ日記:2007年8月25日(土)22時57分 固定リンク

先日の鉄塔に登った女性のニュース
ジョジョファンなら嫌でもピンと来たはず。

あの女性の手のひらには笛になったり
ナイフを隠したりできるタコがあったり。

あまりにスタンドの力が強すぎて自分自身が捕まっているのだ。
そう思えば自分で登っておきながら
「助けて」と叫ぶのも説明がつく。


   プチメタ日記:2007年8月26日(日)16時34分 固定リンク

アイコのヌンチャク
バンダイのヌンチャク
任天堂のヌンチャク
ヌンチャクのヌンチャク

「誕生日にヌンチャクが欲しい」とか言われたら
どれを買っていけばいいのか悩むな。

最後のやつかな。


   プチメタ日記:2007年8月27日(月)20時00分 固定リンク

大好きなおでんブログの部屋ジオラマが素晴らしい

どこが面白いかと聞かれてもわからないけど
間違いなく面白い妻のブログが大好きだ。


   プチメタ日記:2007年8月28日(火)8時37分 固定リンク

「ブリーズビートキャンプ」が流行ってるなぁ。

とかって間違えそうになる。


   プチメタ日記:2007年8月29日(水)21時58分 固定リンク

デスノート版サザエさん

くだらないけど面白い。


   プチメタ日記:2007年8月30日(木)14時58分 固定リンク

うーむ、今日のプレゼンはイマイチだ。
規模とプレゼンのデキは比例しない。
逆に、プレゼンのデキは今までの評価を
良くも悪くも一気に塗り替える力がある。

10日前のプレゼンが素晴らしかったのは感激した。


   プチメタ日記:2007年8月31日(金)12時16分 固定リンク

こないだのサラリーマンNEOの
果てしなきカワイイ願い」は面白かった。

カワイイと何かしら基準が甘くなる、ってのは
あながち間違ってないかも。仕事の上でも。

高いプレゼン力とかカリスマ性とか地位とかと
同じように、ひとつの能力なのかもしれない。「カワイイ」って。


前へ前へ     次へ次へ

戻る戻る
表紙へ表紙へ