[
▲前のスレッド
]
▼
2008/11/25 (火) 16:01:51
なすこじ
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 2.0.50727)
[5477]
マウスの中ボタン押下中のホイールスクロールではページスクロールする
マウスの中ボタンを押した状態でホイールスクロールした場合は、行ではなくページをスクロールします。
unicode版ではコミット済みです。
Patches #2341968
▼
2008/11/26 (水) 00:14:10
げんた
INCM1.23c
[5479]
RE: マウスの中ボタン押下中のホイールスクロールではページスクロールする
個人的感想です.レビューコメントではありません.
1. マウスがウィンドウの外に出てもちゃんと動くのはマウスホイールのメッセージがフォーカスのあるウィンドウに来るからですね.SetCaptureは不要,と (._.) φ メモメモ.でも指が滑った瞬間にフォーカスが失われるので素人にはおすすめできない.
2. 中クリックに機能を割り当てると,割り当てられた機能がスクロールよりも優先されます.左右ボタンは離したときに動作するの中ボタンは押した瞬間に動作するのがちょっと気持ち悪いかも.ホイールをクリック後,回さずに離したときだけ中ボタン動作にできればさらに自然な動作になるように思いますが,欲張りすぎですかね.
3. ホイールを押したまま回すと指が疲れません? そこで思ったのですが,親指の位置にボタンがあるようなマウスを使っている人は,親指でボタンを押しながらホイールを回すという動作も受け入れられるかもしれません.
(私のマウスにはそんなボタンは付いていませんが...)
▼
2008/11/28 (金) 03:59:34
なすこじ
Mozilla/4.0 (compatible; MSIE 6.0; KDDI-MA33) Opera 8.60 [ja]
[5483]
Re2: マウスの中ボタン押下中のホイールスクロールではページスクロールする
▼ げんたさん
> 1. マウスがウィンドウの外に出てもちゃんと動くのはマウスホイールのメッセージがフォーカスのあるウィンドウに来るからですね.SetCaptureは不要,と (._.) φ メモメモ.でも指が滑った瞬間にフォーカスが失われるので素人にはおすすめできない.
Windowsは中ボタンでもフォーカス移動するみたいなので、誤操作のペナルティが大きいかもですね (^^;
> 2. 中クリックに機能を割り当てると,割り当てられた機能がスクロールよりも優先されます.左右ボタンは離したときに動作するの中ボタンは押した瞬間に動作するのがちょっと気持ち悪いかも.ホイールをクリック後,回さずに離したときだけ中ボタン動作にできればさらに自然な動作になるように思いますが,欲張りすぎですかね.
元からの仕様だったので中ボタンの処理はいじらなかったのですが、確かに気持ち悪いので修正してみます。
> 3. ホイールを押したまま回すと指が疲れません? そこで思ったのですが,親指の位置にボタンがあるようなマウスを使っている人は,親指でボタンを押しながらホイールを回すという動作も受け入れられるかもしれません.
> (私のマウスにはそんなボタンは付いていませんが...)
上の1.とも絡みますが、慣れとマウスの質じゃないでしょうかね。
これについては、左右サイドボタン、control、shift、altとの組み合わせでも考えてみます(altはちょっと無理かも……)
ではでは。
▼
2008/12/8 (月) 00:22:05
なすこじ
Mozilla/4.8 (Macintosh; U; PPC)
[5501]
Re:マウスの中ボタン押下中のホイールスクロールではページスクロールする
マウスボタンまたはキーとの組み合わせによりページスクロールまたは横スクロール可能としました。
組み合わせに指定可能なものは以下のとおりです。
・マウス中ボタン
・マウス左サイドボタン
・マウス右サイドボタン
・CONTROLキー
・SHIFTキー
また、マウスの中ボタン・左サイドボタン・右サイドボタンに割り当てたコマンドの実行タイミングを、マウスボタン押下時から開放時に変更しました。
▼
2008/12/13 (土) 09:33:07
げんた
INCM1.23c
[5502]
Re2:マウスの中ボタン押下中のホイールスクロールではページスクロールする
SHIFTとの組み合わせで使ってみたら,かなり快適に感じました.
サイドボタン付きマウスを買いに行きたくなりそう.
▼
2008/12/22 (月) 23:16:03
げんた
INCM1.23c
[5504]
Re2:マウスの中ボタン押下中のホイールスクロールではページスクロールする
この機能の恩恵にあずかろうと,週末にサイドボタン付きマウスを入手しましたので,あらためて動作確認しました.
まず,横スクロールとページスクロールは両方押すと横ページスクロールになるんですね.最初の意地悪テストのつもりで行ったのですが良い意味で裏切られました.
おおむね問題ないと思いますが,以下微妙に気づいた点があります.
1. ボタンを押したままダイアログを閉じる
ウィンドウがアクティブになったときにCEditWnd::ClearMouseState()でボタン状態をクリアしますが,最初から押されたままだとここで不一致になります.その時の状態を取得して設定するのがよいと思ったのですが,マウスの現在の押下状態を取得できるAPIが見つかりません.無いんでしたっけ?
2. ノンクライアントエリアでボタンを押す/離す
たとえばタイトルバーでボタンを押してマウスホイールしても,ページスクロールになりません.逆にエディット領域でボタンを押してタイトルバーで離してもページスクロールのままとなります.WM_NC*BUTTON* メッセージも拾った方が良いかと思いますが,Non-clientで押してNon-clientで離した場合に割り当てられたコマンドを実行するかは微妙なところですね.WM_NC*BUTTONUPではマウスボタンとの状態だけ更新してコマンドは実行しないというのが自然かと思います.
3. 初期化漏れ
CEditWndのコンストラクタでもClearMouseState()を呼び出して,マウスの状態変数をリセットした方がよいです.内部状態を表示させるデバッグコードを入れて状態変化を見ると,初期のゴミ値が残っているのが見えます.
4. WM_XBUTTON* メッセージの処理
Windows SDKのWM_XBUTTONDOWNの説明に
>an application should return TRUE from this message if it processes it. Doing so will allow software that simulates this message on Microsoft Windows systems earlier than Windows 2000 to determine whether the window procedure processed the message or called DefWindowProc to process it.
とありますので,WM_XBUTTON処理後は0ではなくTRUEを返すのがマナーのようです.
5. ボタン名称
XBUTTONへのコマンド割り当て機能が入れられた当初から「左サイドボタン」「右サイドボタン」との名称になっていますが,最近のマウスを見ると右にボタンが付いている機種は全然見あたらず,右手の親指の位置で前後に並んでいるのが標準的です.
ですので,「サイドボタン1」「サイドボタン2」とした方が実態に即していると思います.
---
ところで,自分が購入したサンワサプライのMA-LS3というマウスにはドライバディスクが付いてきます.ドライバを入れるとマウスに各種機能が割り当てられたり,ホイールの横チルトでスクロールできたりするのですが,このドライバをインストールするとサイドバーを押した場合にWM_XBUTTON* というメッセージが全く送られてこなくなります.「サイドボタン+ホイール機能が動かない」という書き込みが予想されるので.ヘルプ/FAQにその旨記載していただいた方が良いかもしれません.
▼
2008/12/23 (火) 21:32:41
なすこじ
Mozilla/4.8 (Macintosh; U; PPC)
[5507]
Re3:マウスの中ボタン押下中のホイールスクロールではページスクロールする
▼ げんたさん
確認ありがとうございます。
ちょこちょこ問題ありますね (^^;
> 1. ボタンを押したままダイアログを閉じる
> ウィンドウがアクティブになったときにCEditWnd::ClearMouseState()でボタン状態をクリアしますが,最初から押されたままだとここで不一致になります.その時の状態を取得して設定するのがよいと思ったのですが,マウスの現在の押下状態を取得できるAPIが見つかりません.無いんでしたっけ?
現在の状態の取得方法が分からなかったので、フォーカス移動を伴う場合はサイドボタンの入力を無かったことにしちゃいました (^^;
もう少し探ってみます。
> 2. ノンクライアントエリアでボタンを押す/離す
> 3. 初期化漏れ
> 4. WM_XBUTTON* メッセージの処理
> 5. ボタン名称
対処します。
ヘルプ/FAQへの注意追記は必要ですね。
あと、私自身で気になる所としては、共通設定のウィンドウが縦に長くなってきたことでしょうか。
右下のチェックを左に移動したりしましたが、ちょっと苦しい (^^;
▼
2008/12/24 (水) 01:18:21
ryoji
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)
[5510]
Re4:マウスの中ボタン押下中のホイールスクロールではページスクロールする
▼ なすこじさん
> ▼ げんたさん
> > マウスの現在の押下状態を取得できるAPIが見つかりません.無いんでしたっけ?
>
> 現在の状態の取得方法が分からなかった
GetAsyncKeyStateは違います?
▼
2008/12/24 (水) 19:52:54
げんた
INCM1.23c
[5511]
Re5:マウスの中ボタン押下中のホイールスクロールではページスクロールする
>GetAsyncKeyStateは違います?
あ,本当だ.
The GetAsyncKeyState function works with mouse buttons.
って書いてありました.
GetAsyncKeyState(VK_MBUTTON)
GetAsyncKeyState(VK_XBUTTON1)
GetAsyncKeyState(VK_XBUTTON2)
で,それぞれ取得できるようですね.
どうもありがとうございました.
▼
2008/12/26 (金) 04:38:40
なすこじ
Mozilla/4.0 (compatible; MSIE 6.0; KDDI-MA33) Opera 8.60 [ja]
[5512]
Re5:マウスの中ボタン押下中のホイールスクロールではページスクロールする
▼ ryojiさん
▼ げんたさん
ありがとうございます。
これで変なメンバー変数の追加が不要になりますね。
▼
2009/1/12 (月) 00:22:07
なすこじ
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 2.0.50727)
[5519]
Re6:マウスの中ボタン押下中のホイールスクロールではページスクロールする
ボタン押下状態をGetAsyncKeyState()にて取得するようにし、
余分な関数・変数を削除しました。
これにより、ノンクライアントエリアでもページスクロール
できるようになりました。
また、コマンド実行の方は仕様変更ありません。
ボタン名称を変更しました。
「マウス左サイドボタン」→「マウスサイドボタン1」
「マウス右サイドボタン」→「マウスサイドボタン2」
(共通設定のキー割り当てに「左サイドクリック」「右サイドクリック」
というのがありますが、そちらは変更していません)
その他、メッセージ処理および初期化漏れを対処しました。
VK_XBUTTON1, VK_XBUTTON2は_WIN32_WINNTの都合により定義されない
ようでしたので、keycode.hに定義を追加して対処しました。
▼
2009/1/15 (木) 23:16:32
なすこじ
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 2.0.50727)
[5526]
Re7:マウスの中ボタン押下中のホイールスクロールではページスクロールする
rev1511でコミットしました。
Unicode版の方も早いうちに修正します。
[
▼次のスレッド
]
INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.010]