志摩さんの献血紀行にお供してきました。
今回の行き先は三重県。
木曽三川(木曽川・長良川・揖斐川)を超えて西へ目指すは四日市。
写真が木曽三川のどれだかはオレには判りませんすいません。
何故か近鉄。
なんか三重っぽくなってきた。(どんなだ)
切符を目的地まで正しく買っていないオレは乗り越し清算。
「近鉄だからスルットKANSAIが使える券売機がある」と志摩さんがおっしゃったので、スルットKANSAIで乗り越し清算を試みてみた。
・・・とおもったら自動清算機が無い。
仕方が無いので駅員に清算してもらう。
「これ使えますかー?」「それは大阪でしか使えません」
はい撃沈。
こちらの公式サイトによると、青山町より東では使えないそうで。
思いっきり東だよな。
あきらめて現金で清算。
しかし、外の券売機にカードを入れてみると・・・。
ウホッ。
(志摩さんによると名古屋駅でも券売機によってはスルットKANSAI使えるそうで)
そんなこんなで。
四日市献血センタキター。
商業ビルの中で明るい雰囲気じゃなーい?
・・・ってマスコットキャラ怖わぁっ!!!!!
『血をくれーー!!!!』
マジ恐ろしい・・・。
これじゃ来た人逃げそう・・・。
で、おそるおそる献血ルームへ。
名古屋ですごく待たされたのに対して、四日市チョースピーディ。
あれよあれよという間に問診・検査と終了してDVDを選ぶ暇もなくベッドの上。
DVD見たかった・・。
暇なんで成分献血マシーン(?)の写真を撮って見ました。
なかなか面白い動きをしよる。
採血→返血を3セット繰り返す。
採血のときは何も感じないんだけど、返血の時にちょっと痛い気がする・・。
針を刺すときと抜くときが一番痛いんですが。
そんなこんなで献血三重県編終了。
やれやれ。
待合室で飲み物飲んでゆったり休憩。
・・ん?
・・・なんか物騒なカレンダーが飾ってあるな。
なんかココ、献血したい気持ちを失いそうなものが多いな(w
・・・。
さて、記念品とかつづきは専門家におまかせします。
いつも献血ネタが楽しい志摩さんサイトでご確認ください。
Windowsにおいて、ウインドウの位置を保存しておいて次回起動時に復元するといった事は普通の設計です。
しかしながら、保存した時とデスクトップのサイズが変わっていたりしてウインドウが画面外に行ってしまうという心配がちょっとあります。
特にウインドウがマウスで触れないと移動も出来ないような設計だと困ってしまいます。
なので、最初にウインドウがモニタの表示領域に入っているのかをチェックする必要があります。
で、やりがちなミスが以下のパターン。
//間違ったやりかた、デスクトップの領域を取得
rt.left = 0;
rt.top = 0;
rt.right = GetSystemMetrics( SM_CXSCREEN );
rt.bottom = GetSystemMetrics( SM_CYSCREEN );
上記では確かにデスクトップのサイズが取得出来るのですが、実はプライマリモニタだけの領域です。
マルチモニタ環境においては一番左上の座業は0ではなく負の値である事もあります。
上をちょっと改良してSM_CXSCREEN,SM_CYSCREENの代わりにSM_CXVIRTUALSCREEN,SM_CYVIRTUALSCREENを使うと仮想デスクトップ領域が得られます。
つまり全てのモニタを囲む大きな矩形領域です。
更にSM_XVIRTUALSCREEN,SM_YVIRTUALSCREEN でデスクトップの左上の座標が得られます。
しかしながらこれでも不安が残ります。
各モニタのサイズが違ったら仮想デスクトップの中に無効な領域が存在することになるからです。
じゃどうすれば良いのかって事ですがMonitorFromWindow()を使えば一発解決です。
このAPIはウインドウを指定して、そのウインドウが複数あるモニタの表示領域と一番多く重なるモニタのハンドルを返してくれます。
そしてMONITOR_DEFAULTTONULLを指定すると全く重なる領域がない場合にはNULLが返ります。
こんな感じで。
if(!MonitorFromWindow(hWnd,MONITOR_DEFAULTTONULL)){
//有効なモニタの中に入ってない
}
まぁ、これだと1ピクセルでも重なっていればOKって事になってしまって、そんなのユーザーが見つけられねぇよって事になりそうではあります。
その場合は姉妹品(?)のMonitorFromPoint()を使って自分で座標の重なり具合をチェックすればOKです。
タイトルにした「デスクトップの領域を得る方法」が書いてないですね。
領域自体を数値として取得したいならば、途中に書いた方法で仮想デスクトップ領域を得て満足するか、もっと完全な領域を取得したかったらGetMonitorInfo()を使えばいいかと思います。
§ K@i [職場変わる前は血を抜いてくれと言わんばかりだったけど、今は血が足りませんw三重はなかなか素敵な献血センスですねw]
§ ひかりん [なんか、献血機械のくせしてやたらハイテクですね。 一台貰っていってハバネロ育成用に流用してみてはいかがですか?]
§ yuki [10:00に切符買ってる…]
§ 電脳姉 [いいなあ献血。 日頃の私生活が乱れすぎているのが発覚したため献血却下された(T_T)]
§ Suika [K@iさん>> ボクもなんか貧血気味な気がする・・・。 ひかりんさん>> けっこう複雑なことしますからハイテクですよ..]
§ できすとりん@会社 [>物騒なカレンダ すいません、家でも使ってます(ぇ]
§ Suika [どこでもらえるんですかw]