仕事・・・・(ヽ´ω`)
自分のプログラム勉強ができんぞおおおおおおお!!!(ヽ´ω`)
あれですね。
仕事楽しいのはいいんですけど締め切りが近いのが本当につらい・・・
後3日あれば完成度高い物を出せるというのに
無駄な会社の虚栄心で納品が近い → 間に合うかい(ヽ´ω`) → (ヽ´ω`)
嘘です。ゆるりと作るためにも。いつも後一週間は欲しいです。
開発者にとっては苦行です♡。
バグが出るんだよおおおおおおお!!!! その期間までに形を作れてもそっからがバグとのシャルウィーダンスで12時の鐘も真っ青なガラスの靴はシンデレラなんだよぉおおおおおおおおお!!
良い物を出させるためには時間をおくれ・・・(ヽ´ω`)
それか人員を増やしておくれ・・・・(ヽ´ω`) 切に願う。
同期か後輩欲しい・・・
ちなみに一人で2つのプロジェクトを抱えているおかげで、
只今中々に気持ちが悪いものとなっております。
言語が一緒だったらいいんだけど iPhone( Objective-C + OpenGL ES ) と Windows( C++ + DirectX ) だからこんがらがるぅ~(ヽ´ω`)
机の上にはWindows用のディスプレイが2つ。
MacBookが1つ。
修正作業 → 別のプロジェクトの修正作業 → 別のプロジェクトの打ち合わせ → 別のプロジェクトの修正メール → 別の女・・・
毎日がてんやわんやのべろべろんちょですわ(ヽ´ω`)
出来るなら一度にたくさんの相手をしたいけど、人間、
3Pは出来そうで出来ないものなんです。
なんで受注から締め切りがこんなに近いのか。
僕は不思議でなりませんよ・・・(ヽ´ω`)
あ。(ヽ´ω`)
三連休は色々と遊んだので無事帰れたらブログに書き綴りたいと思います・・・(ヽ´ω`)
(ヽ´ω`)
昨日、会社の飲み会でした。
福岡らしく もつ鍋のお店屋さんに行って、
コースを食べ、飲み放題を付けました( なんと4名様以上だと飲み放題無料 )
お料理が凄い美味しかった。
フォアグラのコロッケ食べたときは
『このコロッケUMEEEEEE!!』
でしたけど、 フォアグラ?(・・; ってなりました。
もつが生もつ( 多分冷凍をしていない意味 )ですっっっごく美味しかった。
ヤバイ。
もつ鍋で感動したのはこれで二軒目だわ・・・
ここのもつ鍋は癖になる。。。
もつの唐揚げもヤバイ。
取り敢えず、
もつヤバイ。
もつエマージェンシーもつもつもっつん
もつの唐揚げは初めて食べましたけど、
居酒屋で頼むランキング一気に上位に食い込みましたね。
それほど衝撃的だった。
しかし席が狭かったので、ちょっち窮屈でしたね(ヽ´ω`)
前回が掘りごたつで、今回は畳部屋だったんですが、、
掘りごたつの偉大さに気づいた。
床に穴空いてるだけで開放感全然ちげーわ。
(ノ`Д´)ノ彡┻━┻
やっぱり穴は必要ですね。
突っ込む所があるだけであんなに気持ちよくなるとは・・・
穴は偉大だ。
ワタミとかのチェーン店居酒屋は凄い研究されて店作ってあるんだな- と感じました。
掘りごたつに薄暗い照明。
狭く感じない席配置 とか。
で、
お酒飲み過ぎた・・・
そのお店、お部屋に焼酎が置いてありました。
僕は焼酎苦手なんですが、
途中飲むものが無くなったので仕方なく焼酎を作って飲んでたんです。
『やっぱ焼酎はまだ苦手だなぁー(ヽ´ω`)』
と、ちょびちょび飲んでたんですが、
やっぱり物足りなかったので日本酒を新規オーダー。
で、日本酒が来た。
机の上には焼酎と日本酒。
( ゚Д゚)⊃ 旦 旦
・・・
どっちが日本酒でどっちが焼酎だよ
_, ,_
( ゚Д゚)
ほろよい状態の僕。
そんな細かいことを気にする余裕もないので、
その時手についたグラスを飲むことにしました。
なので
焼酎 → 日本酒 → 焼酎 → 日本酒
と見事に交互にぐびぐび。。
その後に来た カクテルや梅酒、ハイボールも ぐびぐび。
∧_∧
(ii!゚Д゚:;・ヽ。; ..;
|つ |:・.ヽ;・.; :ヽ. :
~と_)__) :・: 。・; ;゚・ゲェログェゥグェァオェ
=二三三三二
ちゃんと家に帰ってから吐きましたよ!
(勝ち誇り)
めっちゃきつかった・・・(ヽ´ω`)
しかしやっぱり
焼酎と日本酒を交互に行ったのが一番の原因な気がします<丶´Д`>
やはり僕には3Pはキツすぎました。。
違う人種同士とプレイをしたらそらきつい・・・
それがボブ・サップみたいなお酒なら尚更
お酒の席だとどうも調子乗って飲み過ぎる傾向にありすぎるので
次からは自尊心と一歩身を引く気持ちを持ってお酒の席に臨もうと思います( ゚д゚ )
オチ : 記憶が無い
福岡らしく もつ鍋のお店屋さんに行って、
コースを食べ、飲み放題を付けました( なんと4名様以上だと飲み放題無料 )
お料理が凄い美味しかった。
フォアグラのコロッケ食べたときは
『このコロッケUMEEEEEE!!』
でしたけど、 フォアグラ?(・・; ってなりました。
もつが生もつ( 多分冷凍をしていない意味 )ですっっっごく美味しかった。
ヤバイ。
もつ鍋で感動したのはこれで二軒目だわ・・・
ここのもつ鍋は癖になる。。。
もつの唐揚げもヤバイ。
取り敢えず、
もつヤバイ。
もつエマージェンシーもつもつもっつん
もつの唐揚げは初めて食べましたけど、
居酒屋で頼むランキング一気に上位に食い込みましたね。
それほど衝撃的だった。
しかし席が狭かったので、ちょっち窮屈でしたね(ヽ´ω`)
前回が掘りごたつで、今回は畳部屋だったんですが、、
掘りごたつの偉大さに気づいた。
床に穴空いてるだけで開放感全然ちげーわ。
(ノ`Д´)ノ彡┻━┻
やっぱり穴は必要ですね。
突っ込む所があるだけであんなに気持ちよくなるとは・・・
穴は偉大だ。
ワタミとかのチェーン店居酒屋は凄い研究されて店作ってあるんだな- と感じました。
掘りごたつに薄暗い照明。
狭く感じない席配置 とか。
で、
お酒飲み過ぎた・・・
そのお店、お部屋に焼酎が置いてありました。
僕は焼酎苦手なんですが、
途中飲むものが無くなったので仕方なく焼酎を作って飲んでたんです。
『やっぱ焼酎はまだ苦手だなぁー(ヽ´ω`)』
と、ちょびちょび飲んでたんですが、
やっぱり物足りなかったので日本酒を新規オーダー。
で、日本酒が来た。
机の上には焼酎と日本酒。
( ゚Д゚)⊃ 旦 旦
・・・
どっちが日本酒でどっちが焼酎だよ
_, ,_
( ゚Д゚)
ほろよい状態の僕。
そんな細かいことを気にする余裕もないので、
その時手についたグラスを飲むことにしました。
なので
焼酎 → 日本酒 → 焼酎 → 日本酒
と見事に交互にぐびぐび。。
その後に来た カクテルや梅酒、ハイボールも ぐびぐび。
∧_∧
(ii!゚Д゚:;・ヽ。; ..;
|つ |:・.ヽ;・.; :ヽ. :
~と_)__) :・: 。・; ;゚・ゲェログェゥグェァオェ
=二三三三二
ちゃんと家に帰ってから吐きましたよ!
(勝ち誇り)
めっちゃきつかった・・・(ヽ´ω`)
しかしやっぱり
焼酎と日本酒を交互に行ったのが一番の原因な気がします<丶´Д`>
やはり僕には3Pはキツすぎました。。
違う人種同士とプレイをしたらそらきつい・・・
それがボブ・サップみたいなお酒なら尚更
お酒の席だとどうも調子乗って飲み過ぎる傾向にありすぎるので
次からは自尊心と一歩身を引く気持ちを持ってお酒の席に臨もうと思います( ゚д゚ )
オチ : 記憶が無い
ポン・デ・リング生(意味深)
味 : 普通
みなさんも
するときはちゃんとポン・デ・リングを付けましょう。
生なので従来と違い、付けた時の違和感が軽減されています。
味:普通
味 : 普通
みなさんも
するときはちゃんとポン・デ・リングを付けましょう。
生なので従来と違い、付けた時の違和感が軽減されています。
味:普通
~~~~~ お仕事 ~~~~
Windows アプリケーションでマウス操作を使う時が出て来ました。
何気なく使っていた WM_LBUTTONDOWN ( 左ボタンが押された ) 等のウィンドウメッセージ。
折角なので マウス操作、キーボード操作、ゲームパッド等 など,,
について色々と調べてみました。
*************************************************************************************
まずはおなじみウィンドウメッセージ。
OSから来たメッセージ ( ウィンドウが閉じられた~。 キーボードが押された~ など )
をプログラムが解釈してウィンドウプロシージャに送ってくれます。
そして、ウィンドウプロシージャ内で僕らプログラマーが switch文でメッセージごとにそれぞれ処理を書いていく感じですね。
その中に
・マウスの左 or 中央 or 右 ボタンが押された。 もしくは離された。
・マウスが移動した。
などのイベントもあります。 ↓一覧
コピペ最高ぉー! ウッヒョォー!
XBUTTON1 、 2 というのは マウスの横についている2つのボタンで、
サイトの 「戻る」「進む」等を行なってくれます。
ちなみに今僕のマウスにはついていません( ;∀;)
『”マウスが押された。” ってだけじゃいらねーよ!
こちとら座標がほしいんじゃ!!(威圧)』
はい。ごもっともです。
座標は ウィンドウプロシージャの引数、
↑ のコードで言うと lParam に入っています。
32bit の 上位16ビットに x 座標。 下位16ビットに y 座標が格納済みです。
これらを取り出す簡単な方法は次のマクロを使用します。
コレで簡単に
マウスの「クリックされた時の座標」や「動いた時の座標」が取れるわけです。
この座標はアプリケーションウィンドウの
クライアント領域の左上から数えたピクセル数になります。
なかなか便利なものであるな。
なので
クライアント領域より左に行けば マイナス値が、
右に行けば クライアント座標より大きくなった値が入ってきます。
WM_XBUTTON_DOWN と WM_XBUTTON_UP は Xボタン1, 2
両方共このメッセージになるので、
今度は 上のコードでいう wParam で識別します。
ダボォクリックに対応させるには、
ウィンドウクラスの
を指定して作成すると..
例えば左ボタンをダブルクリックした場合、
の順にメッセージが帰ってきます。
右ボタン, 中央, Xボタンも ~DBLCLK が付いて帰ってきます。
Window内でクライアント領域の外、
↑の画像だと水色の部分がマウスで左クリックされたときは
NC が 付いたメッセージで返され、 WM_NCLBUTTONDOWN となります。
他のボタンでも一緒です。 ただ NC が付く。
駄菓子菓子!!
WM_NCMOUSEMOVE などで座標を受け取った場合、
この座標はクライアント領域から数えたピクセルの数( クライアント座標 )ではなく、
ディスプレイの左上から数えたピクセル数( スクリーン座標 )になる!!
こらびっくりやー(ヽ´ω`)
取り敢えずここまでで、一個プロジェクトを作ってみました。
マウスをクライアント領域内で動かすとクライアント領域の座標をタイトルバーに表示し、
Window上ではスクリーン座標をタイトルバーに表示します。
左クリックされたらウィンドウが半透明、無透明が交互に切り替わります。
右クリックの場合、クライアント領域のみ透明化します。
【 (URL) WinAPI -> MouseTest_01.zip 】
【 (URL) MouseTest_01.txt 】
***********************************
※ Windowの透明化
方法は二種類ある。
① ウィンドウクラスを作成する時に CreateWindowEX で作成し、
引数の一番目 dwExStyle に透明化を行うよう WS_EX_LAYERED も指定する。
② CreateWindow で作成後、 SetWIndowLong で ES_EX_LAYERED を新たに指定する。
自分は、
自分のプロジェクトが CreateWindow で作成していたので、後者を選択しました。
---②の場合---
スタイルを上書きされるので前のスタイルを覚えておく。
2番目の引数を GWL_EXSTYLE にしないと表示がおかしくなりました。
で、スタイルを変更
これで透明化の準備ができたので、透明化する。
これは SetLayeredWIndowAttributes を使います。
4番目の引数で
第2引数を使用するなら LWA_COLORKEY を
第3引数を使用するなら LWA_ALPHA を使用します。
***********************************
まだまだウィンドウメッセージ関連でありまして...
Window からマウスが出てしまったらどうなるか?
調べた結果...
反応なし。
WM_MOUSEMOVE とか死んでました。
そして最も HOW!? と感じたのが、、、
クライアント領域内で左クリックをしてそのまま Window 外 に出たとします...
そしてWindow外でマウスから手を離した場合・・・
WM_LBUTTONUP は呼ばれません。
( ゚д゚ )
これは うーん となりました。
正直、 ”Window外に出た” という情報と
"Window外でボタンが離された" という情報が欲しかったからです。
"Window外に出た"
そんなの WM_MOUSEMOVE で取得した座標、
X または Y が ”0” か ”設定したWindowの大きさと同じ” になった時に通知するようにしたらいいじゃん。
それがそうともいかず、
====================================
① 実行中に Windowの大きさを変えた時の場合はどうするか。
② 0 や 800( Windowの幅 ) などの座標値が来ずにクライアント領域から出てしまった場合。
====================================
問題が出てきてしまいます。
こらめんどくせぇ。
そう思って色々調べてたら
"ウィンドウ外に出てもマウスを追跡する機能"
が存在しました!(`・ω・´)
これでクライアン領域外に出たマウスを追跡してくれれば
マイナスの値やウィンドウの幅高さ以上の座標値。
また、
ウィンドウの外でマウスが離されても WM_LBUTTONUP が来てくれそうです。
① の問題は GetClientRect で毎回クライアント領域を取得して処理をかければ大丈夫でした(´・ω・`)
この SetCapture
Window内にマウスがあろうとなかろうとずっと追跡してくれるすぐれものですが、、、
多用すべきではない。( MSDN )
使わない時( マウスがクリックされていないのに座標を追跡するなど )でも
がんがんメッセージを送ってくる。
= パフォーマンスに関わるので、、、
通常は
ボタンが押された時( WM_LBUTTONDOWN )に
SetCapture( hWnd );
を呼び出して、ボタンが離されたら、
// キャプチャを解除
ReleaseCapture();
を行う。
この関数を WM_LBUTTONUP などに記述して必ず解除してあげましょう。
コレを追加したプロジェクトを上げてみます。
今回はシンプルに座標をタイトルバーに表示するだけです。
左ボタンを押さずに window外 に出てもタイトルバーは何も変わりませんが、
押したままwindow外に出た場合、 座標系が変化し続けます。
【 (URL) WinAPI -> MouseTest_02.zip 】
【 (URL) MouseTest_02.txt 】
==========================================
こんなかんじでウィンドウメッセージのマウス操作は終了してみます。
ここで疑問に思ったのが・・・
あれ?
マウスを左クリックした状態で、マウスを動かさずに放置した場合はどうなるんだろう・・・
結果 ↓
何もメッセージ来ません。
これですよ・・・
僕としては押している間動いてなくてもリピートして欲しかったのですが、
WM_**** ではどうも無さそう・・・(´;ω;`)
// キーの処理を行う関数
GetKeyState( ・・・ );
で、ゲームループ内でキーボードのPUSH情報やマウスのクリック情報は取得できますが、
これを使ってマウスを調べた場合、座標がない。。。。
ゲームループ内で取得できるのはすごい嬉しかったんですが・・・
それで DirectInput とか調べてたんですが、
MSDNによると、DirectInputは
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これは推奨されなくなりました。
ウィンドウメッセージを利用してください(本気)
XBOX360 ?
XInputを利用してください。
( XBOX系のコントローラーを簡単に読みこんでくれる )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
と書いてました・・・ どないせいっちゅうねん(´・ω・`)
DirectInput は 様々なデバイスの対応をしている。
XInput は XBOXデバイス のみ。
しかし DirectInput は ウィンドウメッセージを推奨していると・・・・
イェア!!! (*´д`*)
しばらくコレに関しては自分の中で結果が出るまで放置することにしよう ( ーωー )
マイクロソフトは DirectX に力を全く入れなくなった気がする。
これは C# に移行して XNA を使えということか・・・
もしくは OpenGL
おわり
Windows アプリケーションでマウス操作を使う時が出て来ました。
何気なく使っていた WM_LBUTTONDOWN ( 左ボタンが押された ) 等のウィンドウメッセージ。
折角なので マウス操作、キーボード操作、ゲームパッド等 など,,
について色々と調べてみました。
*************************************************************************************
まずはおなじみウィンドウメッセージ。
OSから来たメッセージ ( ウィンドウが閉じられた~。 キーボードが押された~ など )
をプログラムが解釈してウィンドウプロシージャに送ってくれます。
そして、ウィンドウプロシージャ内で僕らプログラマーが switch文でメッセージごとにそれぞれ処理を書いていく感じですね。
/**
* ウィンドウプロシージャー
* OSから来るメッセージを処理するコールバック関数です。
* [引数]
* hWnd : ウィンドウハンドル
* msg : メッセージ
* wParam : メッセージの最初のパラメータ
* lParam : メッセージ二番目のパラメータ
* [戻り値]
* メッセージ処理結果
*/
LRESULT CALLBACK WindowProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
//===================================
// メッセージ処理
// メッセージはswitchで処理すると簡単
//===================================
switch ( msg )
{
case WM_CLOSE: //** ウィンドウが閉じられた
case WM_DESTROY: //** 誰かに殺された
case WM_QUIT: //** 終了メッセージ
// アプリケーションを終了する
PostQuitMessage( 0 );
break;
//** キーが押された
case WM_KEYDOWN:
// 押されたのはESC?
if ( wParam == VK_ESCAPE )
// アプリケーションを終了する
PostQuitMessage( 0 );
break;
//** ユーザー指定コマンド
case WM_COMMAND:
break;
//** システムコマンド
case WM_SYSCOMMAND:
switch ( wParam )
{
// スクリーンセーバーとモニタ電源OFFの防止
case SC_SCREENSAVE:
case SC_MONITORPOWER:
return 0;
}
break;
}
//** 興味ないイベントは全部 DefWindowProc関数に処理させる
return DefWindowProc( hWnd, msg, wParam, lParam );
}
その中に
・マウスの左 or 中央 or 右 ボタンが押された。 もしくは離された。
・マウスが移動した。
などのイベントもあります。 ↓一覧
メッセージ | 意味 |
---|---|
WM_LBUTTONDOWN | 左ボタンを押す |
WM_LBUTTONUP | 左ボタンを離す |
WM_MBUTTONDOWN | 中央ボタンを押す |
WM_MBUTTONUP | 中央ボタンを離す |
WM_RBUTTONDOWN | 右ボタンを押す |
WM_RBUTTONUP | 右ボタンを離す |
WM_XBUTTONDOWN | XBUTTON1 または XBUTTON2 を押す |
WM_XBUTTONUP | XBUTTON1 または XBUTTON2 を離す |
コピペ最高ぉー! ウッヒョォー!
XBUTTON1 、 2 というのは マウスの横についている2つのボタンで、
サイトの 「戻る」「進む」等を行なってくれます。
ちなみに今僕のマウスにはついていません( ;∀;)
『”マウスが押された。” ってだけじゃいらねーよ!
こちとら座標がほしいんじゃ!!(威圧)』
はい。ごもっともです。
座標は ウィンドウプロシージャの引数、
↑ のコードで言うと lParam に入っています。
32bit の 上位16ビットに x 座標。 下位16ビットに y 座標が格納済みです。
これらを取り出す簡単な方法は次のマクロを使用します。
int x = GET_X_LPARAM( lParam );
int y = GET_Y_LPARAM( lParam );
--- (注) Windowsx.h ---
int y = GET_Y_LPARAM( lParam );
--- (注) Windowsx.h ---
コレで簡単に
マウスの「クリックされた時の座標」や「動いた時の座標」が取れるわけです。
//** 左ボタンが押された
case WM_LBUTTONDOWN:
break;
//** 左ボタンが離された
case WM_LBUTTONUP:
break;
//** 右ボタンが押された
case WM_RBUTTONDOWN:
break;
//** 右ボタンが離された
case WM_RBUTTONUP:
break;
//** マウスが動いた
case WM_MOUSEMOVE:
break;
この座標はアプリケーションウィンドウの
クライアント領域の左上から数えたピクセル数になります。
なかなか便利なものであるな。
なので
クライアント領域より左に行けば マイナス値が、
右に行けば クライアント座標より大きくなった値が入ってきます。
WM_XBUTTON_DOWN と WM_XBUTTON_UP は Xボタン1, 2
両方共このメッセージになるので、
今度は 上のコードでいう wParam で識別します。
UINT button = GET_XBUTTON_WPARAM(wParam);
if (button == XBUTTON1)
{
// XBUTTON1 がクリックされた
}
else if (button == XBUTTON2)
{
// XBUTTON2 がクリックされた
}
ダボォクリックに対応させるには、
ウィンドウクラスの
WINDCLASS wc;
wx.style = CS_DBLCLKS;
wx.style = CS_DBLCLKS;
を指定して作成すると..
例えば左ボタンをダブルクリックした場合、
WM_LBUTTON_DOWN → WM_LBUTTON_UP →
WM_LBUTTONDBLCLK → WM_LBUTTON_UP
WM_LBUTTONDBLCLK → WM_LBUTTON_UP
の順にメッセージが帰ってきます。
右ボタン, 中央, Xボタンも ~DBLCLK が付いて帰ってきます。
Window内でクライアント領域の外、
↑の画像だと水色の部分がマウスで左クリックされたときは
NC が 付いたメッセージで返され、 WM_NCLBUTTONDOWN となります。
他のボタンでも一緒です。 ただ NC が付く。
駄菓子菓子!!
WM_NCMOUSEMOVE などで座標を受け取った場合、
この座標はクライアント領域から数えたピクセルの数( クライアント座標 )ではなく、
ディスプレイの左上から数えたピクセル数( スクリーン座標 )になる!!
こらびっくりやー(ヽ´ω`)
取り敢えずここまでで、一個プロジェクトを作ってみました。
マウスをクライアント領域内で動かすとクライアント領域の座標をタイトルバーに表示し、
Window上ではスクリーン座標をタイトルバーに表示します。
左クリックされたらウィンドウが半透明、無透明が交互に切り替わります。
右クリックの場合、クライアント領域のみ透明化します。
【 (URL) WinAPI -> MouseTest_01.zip 】
【 (URL) MouseTest_01.txt 】
***********************************
※ Windowの透明化
方法は二種類ある。
① ウィンドウクラスを作成する時に CreateWindowEX で作成し、
引数の一番目 dwExStyle に透明化を行うよう WS_EX_LAYERED も指定する。
② CreateWindow で作成後、 SetWIndowLong で ES_EX_LAYERED を新たに指定する。
自分は、
自分のプロジェクトが CreateWindow で作成していたので、後者を選択しました。
---②の場合---
スタイルを上書きされるので前のスタイルを覚えておく。
LONG style = GetWindowLong( hWnd, GWL_EXSTYLE );
2番目の引数を GWL_EXSTYLE にしないと表示がおかしくなりました。
で、スタイルを変更
SetWIndowLong( hWnd, GWL_EXSTYLE, WS_EX_LAYERED | style );
これで透明化の準備ができたので、透明化する。
これは SetLayeredWIndowAttributes を使います。
SetLayeredWIndowAttributes(
HWND hWnd, // ウィンドウハンドル
COLORREF crKey, // 指定した色を透明化する
BYTE bAlpha, // ウィンドウ全体を透明化する ( 0 ~ 255)
DWORD dwFlags // 第二引数か第三引数どちらを使用するか。
);
HWND hWnd, // ウィンドウハンドル
COLORREF crKey, // 指定した色を透明化する
BYTE bAlpha, // ウィンドウ全体を透明化する ( 0 ~ 255)
DWORD dwFlags // 第二引数か第三引数どちらを使用するか。
);
4番目の引数で
第2引数を使用するなら LWA_COLORKEY を
第3引数を使用するなら LWA_ALPHA を使用します。
***********************************
まだまだウィンドウメッセージ関連でありまして...
Window からマウスが出てしまったらどうなるか?
調べた結果...
反応なし。
WM_MOUSEMOVE とか死んでました。
そして最も HOW!? と感じたのが、、、
クライアント領域内で左クリックをしてそのまま Window 外 に出たとします...
そしてWindow外でマウスから手を離した場合・・・
WM_LBUTTONUP は呼ばれません。
( ゚д゚ )
これは うーん となりました。
正直、 ”Window外に出た” という情報と
"Window外でボタンが離された" という情報が欲しかったからです。
"Window外に出た"
そんなの WM_MOUSEMOVE で取得した座標、
X または Y が ”0” か ”設定したWindowの大きさと同じ” になった時に通知するようにしたらいいじゃん。
それがそうともいかず、
====================================
① 実行中に Windowの大きさを変えた時の場合はどうするか。
② 0 や 800( Windowの幅 ) などの座標値が来ずにクライアント領域から出てしまった場合。
====================================
問題が出てきてしまいます。
こらめんどくせぇ。
そう思って色々調べてたら
"ウィンドウ外に出てもマウスを追跡する機能"
が存在しました!(`・ω・´)
// ウィンドウハンドルを指定することで
// ウィンドウから見たマウスをいつでもどんなときもキャプチャ( ウィンドウメッセージを送る )する。
SetCapture( HWND hWnd );
// ウィンドウから見たマウスをいつでもどんなときもキャプチャ( ウィンドウメッセージを送る )する。
SetCapture( HWND hWnd );
これでクライアン領域外に出たマウスを追跡してくれれば
マイナスの値やウィンドウの幅高さ以上の座標値。
また、
ウィンドウの外でマウスが離されても WM_LBUTTONUP が来てくれそうです。
① の問題は GetClientRect で毎回クライアント領域を取得して処理をかければ大丈夫でした(´・ω・`)
この SetCapture
Window内にマウスがあろうとなかろうとずっと追跡してくれるすぐれものですが、、、
多用すべきではない。( MSDN )
使わない時( マウスがクリックされていないのに座標を追跡するなど )でも
がんがんメッセージを送ってくる。
= パフォーマンスに関わるので、、、
通常は
ボタンが押された時( WM_LBUTTONDOWN )に
SetCapture( hWnd );
を呼び出して、ボタンが離されたら、
// キャプチャを解除
ReleaseCapture();
を行う。
この関数を WM_LBUTTONUP などに記述して必ず解除してあげましょう。
コレを追加したプロジェクトを上げてみます。
今回はシンプルに座標をタイトルバーに表示するだけです。
左ボタンを押さずに window外 に出てもタイトルバーは何も変わりませんが、
押したままwindow外に出た場合、 座標系が変化し続けます。
【 (URL) WinAPI -> MouseTest_02.zip 】
【 (URL) MouseTest_02.txt 】
==========================================
こんなかんじでウィンドウメッセージのマウス操作は終了してみます。
ここで疑問に思ったのが・・・
あれ?
マウスを左クリックした状態で、マウスを動かさずに放置した場合はどうなるんだろう・・・
結果 ↓
何もメッセージ来ません。
これですよ・・・
僕としては押している間動いてなくてもリピートして欲しかったのですが、
WM_**** ではどうも無さそう・・・(´;ω;`)
// キーの処理を行う関数
GetKeyState( ・・・ );
で、ゲームループ内でキーボードのPUSH情報やマウスのクリック情報は取得できますが、
これを使ってマウスを調べた場合、座標がない。。。。
ゲームループ内で取得できるのはすごい嬉しかったんですが・・・
それで DirectInput とか調べてたんですが、
MSDNによると、DirectInputは
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これは推奨されなくなりました。
ウィンドウメッセージを利用してください(本気)
XBOX360 ?
XInputを利用してください。
( XBOX系のコントローラーを簡単に読みこんでくれる )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
と書いてました・・・ どないせいっちゅうねん(´・ω・`)
DirectInput は 様々なデバイスの対応をしている。
XInput は XBOXデバイス のみ。
しかし DirectInput は ウィンドウメッセージを推奨していると・・・・
イェア!!! (*´д`*)
しばらくコレに関しては自分の中で結果が出るまで放置することにしよう ( ーωー )
マイクロソフトは DirectX に力を全く入れなくなった気がする。
これは C# に移行して XNA を使えということか・・・
もしくは OpenGL
おわり
どうも( ノ゚Д゚)こんばんわ
大寒のみぎり、ますます御発展のこととお喜び申し上げます。
突然ですが、
未だにガラケーという僕。
プログラマという職業につきながら、、、
iPhoneプログラムをちょっとお仕事でしとるというものなのに。。。
ガ ラ ケ ー
今じゃおばあちゃんおじいちゃんでさえスマホでガチャ回してるってのに。。
俺はなぁ~にやってんだか(ヽ´ω`)
駄菓子菓子!!!
このたび!!!!!
ついに!!!!!!!!!!!!!!!
ガラケーをもう一台増やしましたぁー・・・ドヤァ( ゚д゚ )
※ 金色のやつです。
FOOOOOOOOOOO!!! (´∀`∩)↑age↑
なんでやっ!!!!ドンッ!!!(激昂)
なんで! ガラケーを!
増やした嗚呼ああ嗚呼!!???!?!?!?
・・・
それはですね。
おちょこよりも深い、、 ふか~~い訳があるんです。
ある日
後輩Aくんが家に来て、
今ウィルコムで
『二台一緒に機種を購入すると1台は2年間基本料金タダ!』
というキャンペンをやってるから
後輩Bと一緒にウィルコムにする! と言いました。
この時点で後輩A、BはAndroid二台持ちになるという
なかなかオチャメな事になることに対するツッコミは置いておきましょう。
で、後輩Bはこの日バイトだったので僕が一緒についていったんですよ。
(暇だからとかじゃない。決して...((゚Д゚)) )
ベスト電器に着き、携帯売り場で店員のうっとおしい押し売りを堂々たる態度で跳ね除け、
(店員:携帯のご紹介いたしましょうか?
僕:あ、いえ、、大丈夫ですぅ・・(震え声) ←このやり取りを 5回ぐらい )
ウィルコムコーナーに行き、
ウィルコムの契約内容を一緒に聞いていたんです。
----------------------------------------------------------------------
店員さんめっちゃ可愛かった。 びびった。
あとで後輩Aくんにその話したら
「あそこの店員さんが可愛かったので、あそこのウィルコムで変えたんですよw」だと。
さすが。やるな。
----------------------------------------------------------------------
ウィルコムについて詳しく教えてもらえた。
-----【ウィルコムの利点】-----
・ウィルコム同士は通話料タダ
・1000円(月)払っていただくと他社の契約会社に電話する際、10分までタダ。
これは月500回まで使用可能。
しかも、スマホではコレが無料。(ガラケーは別途1000円かかる)
・電話番号が PHS回線の 070 で始まる電話番号と
3G回線の090 で始まる電話番号の二種類があり、
3G回線はソフトバンクのを借りているらしく、ソフトバンクがサービスしている
「ソフトバンク同士の電話代タダ」が適用される。( これは相手から掛かってきた場合のみ )
・元々の機種代が安いので月額安い (大体6000円ぐらいだった気がする。)
ウィルコム同士の電話がタダで、
かつ他社携帯でも10分間の制約付きとはいえタダとは安い。
正直うらやましかった。(´・ω:;.:...
そういう内容を
10分ぐらい聞いてると、ふとその店員さんが
『只今土日限定で 2台以上ご契約の方に
もう1台プレゼントさせていただいているんですよ~』
と。
後輩A : ( ゚д゚ )!?
僕 : (ヽ´ω`)!?
ま・ま・ま・まじか!!!!!!?
それなら・・・もしかしたら・・・
もしかしたらもう1台スマホが来て、、、それを俺が貰ったら
俺もついに
スマホライダー(?)に!? ガタッ!!
提供品 : ガラケー。
後輩A、僕 : (´・ω・`)
まぁ、そらそうやな。 と、二人共心のなかで静かに思った。
これはメール、電話専用らしく、
その分ガラケーらしく電池持ちがよく、軽い。
しかも月額にかかる料金は一切なし。
お姉さんによると、
親御様や友人さんに渡してもらっても結構。
もちろんウィルコムなのでウィルコム同士の電話はタダ。
しかし、他社との電話代はかかります。 と。
でも!
月額1000円払っていただくと、先ほどの 、
他社携帯への通話が10分( 月500回まで )タダ!
とのこと!!
ガラケーとはいえ、
これはこれですごい良いサービスじゃん!?
正直落胆からの上がりっぷりがやばくて僕の股間はクライマックス。
店頭にはまったく宣伝してなかったけど、コレを宣伝すれば確実に契約者増えると思うんだけど・・・
顔には出さないが、
急にそわそわしだす僕。(((( ;´ω`)))))
ここで後輩Aくんが
『なら、先輩使います?』
はい。
喜んで。ベリースペシャルサンクスセクロス
と、いう経緯でタダで携帯を捕まえたわけでございます。
ウィルコムにする方はすごい電話する人ですね。
しかし、電話する = ウィルコムというわけではないんですよ...!!((((;゚Д゚))(震え声)
電話する相手を増やすためにも、友達作らないとね(b´∀`)ネッ!
書いててすげー虚しくなった・・・
うあ゙ぁあ ・゚・(´Д⊂ヽ・゚・ あ゙ぁあぁ゙ああぁぁうあ゙ぁあ゙ぁぁ
俺が高校の時はガラケー二台持ちは結構見たんですけどねー・・・
時代の流れは速いもんですなぁ。。。
今は あいぽん5にするかXperiaZにするか超迷っているところですがお金がない。
元々スマホにした所で恐らくほぼ使わないだろうという考えから
買えてなかったんですよね-。。。
おそらく道具の無駄遣い。
このままdocomo解約してこのウィルコム機1台にしようかな(´・ω・`)
そしたら月額1000円 。超安い
ウィルコムは本当に安いですよ-。 PHSの音質は最高に悪いですけどね・・・(T_T)
大寒のみぎり、ますます御発展のこととお喜び申し上げます。
突然ですが、
未だにガラケーという僕。
プログラマという職業につきながら、、、
iPhoneプログラムをちょっとお仕事でしとるというものなのに。。。
ガ ラ ケ ー
今じゃおばあちゃんおじいちゃんでさえスマホでガチャ回してるってのに。。
俺はなぁ~にやってんだか(ヽ´ω`)
駄菓子菓子!!!
このたび!!!!!
ついに!!!!!!!!!!!!!!!
ガラケーをもう一台増やしましたぁー・・・ドヤァ( ゚д゚ )
※ 金色のやつです。
FOOOOOOOOOOO!!! (´∀`∩)↑age↑
なんでやっ!!!!ドンッ!!!(激昂)
なんで! ガラケーを!
増やした嗚呼ああ嗚呼!!???!?!?!?
・・・
それはですね。
おちょこよりも深い、、 ふか~~い訳があるんです。
ある日
後輩Aくんが家に来て、
今ウィルコムで
『二台一緒に機種を購入すると1台は2年間基本料金タダ!』
というキャンペンをやってるから
後輩Bと一緒にウィルコムにする! と言いました。
この時点で後輩A、BはAndroid二台持ちになるという
なかなかオチャメな事になることに対するツッコミは置いておきましょう。
で、後輩Bはこの日バイトだったので僕が一緒についていったんですよ。
(暇だからとかじゃない。決して...((゚Д゚)) )
ベスト電器に着き、携帯売り場で店員のうっとおしい押し売りを堂々たる態度で跳ね除け、
(店員:携帯のご紹介いたしましょうか?
僕:あ、いえ、、大丈夫ですぅ・・(震え声) ←このやり取りを 5回ぐらい )
ウィルコムコーナーに行き、
ウィルコムの契約内容を一緒に聞いていたんです。
----------------------------------------------------------------------
店員さんめっちゃ可愛かった。 びびった。
あとで後輩Aくんにその話したら
「あそこの店員さんが可愛かったので、あそこのウィルコムで変えたんですよw」だと。
さすが。やるな。
----------------------------------------------------------------------
ウィルコムについて詳しく教えてもらえた。
-----【ウィルコムの利点】-----
・ウィルコム同士は通話料タダ
・1000円(月)払っていただくと他社の契約会社に電話する際、10分までタダ。
これは月500回まで使用可能。
しかも、スマホではコレが無料。(ガラケーは別途1000円かかる)
・電話番号が PHS回線の 070 で始まる電話番号と
3G回線の090 で始まる電話番号の二種類があり、
3G回線はソフトバンクのを借りているらしく、ソフトバンクがサービスしている
「ソフトバンク同士の電話代タダ」が適用される。( これは相手から掛かってきた場合のみ )
・元々の機種代が安いので月額安い (大体6000円ぐらいだった気がする。)
ウィルコム同士の電話がタダで、
かつ他社携帯でも10分間の制約付きとはいえタダとは安い。
正直うらやましかった。(´・ω:;.:...
そういう内容を
10分ぐらい聞いてると、ふとその店員さんが
『只今土日限定で 2台以上ご契約の方に
もう1台プレゼントさせていただいているんですよ~』
と。
後輩A : ( ゚д゚ )!?
僕 : (ヽ´ω`)!?
ま・ま・ま・まじか!!!!!!?
それなら・・・もしかしたら・・・
もしかしたらもう1台スマホが来て、、、それを俺が貰ったら
俺もついに
スマホライダー(?)に!? ガタッ!!
提供品 : ガラケー。
後輩A、僕 : (´・ω・`)
まぁ、そらそうやな。 と、二人共心のなかで静かに思った。
これはメール、電話専用らしく、
その分ガラケーらしく電池持ちがよく、軽い。
しかも月額にかかる料金は一切なし。
お姉さんによると、
親御様や友人さんに渡してもらっても結構。
もちろんウィルコムなのでウィルコム同士の電話はタダ。
しかし、他社との電話代はかかります。 と。
でも!
月額1000円払っていただくと、先ほどの 、
他社携帯への通話が10分( 月500回まで )タダ!
とのこと!!
ガラケーとはいえ、
これはこれですごい良いサービスじゃん!?
正直落胆からの上がりっぷりがやばくて僕の股間はクライマックス。
店頭にはまったく宣伝してなかったけど、コレを宣伝すれば確実に契約者増えると思うんだけど・・・
顔には出さないが、
急にそわそわしだす僕。(((( ;´ω`)))))
ここで後輩Aくんが
『なら、先輩使います?』
はい。
喜んで。ベリースペシャルサンクスセクロス
と、いう経緯でタダで携帯を捕まえたわけでございます。
ウィルコムにする方はすごい電話する人ですね。
しかし、電話する = ウィルコムというわけではないんですよ...!!((((;゚Д゚))(震え声)
電話する相手を増やすためにも、友達作らないとね(b´∀`)ネッ!
書いててすげー虚しくなった・・・
うあ゙ぁあ ・゚・(´Д⊂ヽ・゚・ あ゙ぁあぁ゙ああぁぁうあ゙ぁあ゙ぁぁ
俺が高校の時はガラケー二台持ちは結構見たんですけどねー・・・
時代の流れは速いもんですなぁ。。。
今は あいぽん5にするかXperiaZにするか超迷っているところですがお金がない。
元々スマホにした所で恐らくほぼ使わないだろうという考えから
買えてなかったんですよね-。。。
おそらく道具の無駄遣い。
このままdocomo解約してこのウィルコム機1台にしようかな(´・ω・`)
そしたら月額1000円 。超安い
ウィルコムは本当に安いですよ-。 PHSの音質は最高に悪いですけどね・・・(T_T)