メニュー
Infomation
■お知らせ
[スパム対策]コメントにURLを含めると自動的に削除されます。
■このサイトについて
一応残していますが、全時代の遺物。全ての情報は古く役に立ちません 連絡先:メールアドレス
■日記更新情報
RSSRSS|RSS(本文のみ)|lirs
実験&リサーチ
巡回先
製作環境
 

 



2004|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|11|12|
2011|01|
2014|05|08|
2017|07|
2018|03|
2020|08|10|
2021|11|

2006年01月20日(Friday) [長年日記]

_ マルチディスプレイ

マルチディスプレイでよく遭遇する問題。

負の座標の位置に開いたアプリケーションが正しく動作しない。。

具体的にいうとプライマリモニタの左側(又は上)にセカンダリ以降のモニタを配置した場合。

例えばクリックしてもメニューが開かないとか、画面外に出てるっぽいとか。

どういうコーディングになっているか想像してみる。

まぁ、符号の扱いの問題なんだろうなぁ。

例えばマウスの左ボタンを押した事をあらわすWM_LBUTTONDOWNメッセージ。(これ以前にも書いた気がしますが)

VC6付属のMSDNライブラリにはこう書いてある。


WM_LBUTTONDOWN

fwKeys = wParam; // key flags

xPos = LOWORD(lParam); // horizontal position of cursor

yPos = HIWORD(lParam); // vertical position of cursor


これを見て、なんとなく

int xPos=LOWORD(lParam);

とやると負の値が来た時におかしくなる。


たとえば-10の場合、lParam = -10 = FFFFFFF6h で、LOWORDマクロによりFFF6h

これがintにキャストされると65526になる。

正しい修正例としては、

int xPos=(int)(short)LOWORD(lParam);


でもこれ、WM_MOVEの方はて間違えないように親切に書いてある。


WM_MOVE

xPos = (int)(short) LOWORD(lParam); // horizontal position

yPos = (int)(short) HIWORD(lParam); // vertical position


よくわからんな。

ちなみに最新のMSDNをを見るとちゃんとGET_X_LPARAMマクロを使って書いてある。

#ifndef GET_X_LPARAM

#define GET_X_LPARAM(lParam) ((int)(short)LOWORD(lParam))

#endif

#ifndef GET_Y_LPARAM

#define GET_Y_LPARAM(lParam) ((int)(short)HIWORD(lParam))

#endif


他にはデスクトップのサイズ求めようとしてプライマリモニタのサイズだけみちゃったり、矩形の右下座標だけ使ったりとかですかね。

なんとなく右画面がメインで、左をサブ画面に・・って使い方に慣れているのです。

本日のコメント(全2件) [コメントを投稿]
§ K@i (2006年01月21日(Saturday) 12:04)

あ、俺とは逆だねw<br>俺は左メインで見る使い方w<br>デフォルトのままって言うのはナイショ。

§ Suika (2006年01月22日(Sunday) 01:29)

実はボクも最初に置いた位置でそう決まったw


最近のコメント

364,000 at 2008.06.14
Copyright (c) Suika KNOnline.NET