![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
例えばクライアント領域に対し、
左シングルクリックと左ダブルクリックを両方使えるようにするにはどうすれば良いのでしょうか?
左シングルクリック時
{
処理シングル
}
左ダブルクリック時
{
処理ダブル
}
このような場合、ダブルクリック時に処理ダブルの前に処理シングルが走ると思うのですが、処理シングルが走らないようにするには、タイマーで一工夫などの処理を追加する必要があるのでしょうか?
また、そもそもシングルクリックとダブルクリックの両方が使えるようにすることが仕様的に変なのでしょうか?
No.3ベストアンサー
- 回答日時:
やっぱりタイマーでしょうね。
http://www.hidecnet.ne.jp/~sinzan/tips/win/win_t …
>>こういうことは一般的にはやらないのでしょうか?
>一般的にはやりません。
ごく普通にやります。
タスクトレイのアイコンなんてみんな使ってます。
Windows標準でも、ボリュームやハードウェアの取り外しとか。
というか、エクスプローラでファイルをクリックしたとき、
シングル→選択
選択時にシングル→名前変更
ダブル→開く
って動作しますよね。
>ダブルクリックとシングルクリックの操作を間違える
>可能性を考慮すれば、処理がまったく別なものにすることは
>インターフェース的に優しくないと思います。
たとえば、
シングル→メニューを出す
ダブル→デフォルトの動作をする
これってタスクトレイのアイコンだとあたりまえの動作のような気がするのですが。そんなことないですか?
回答ありがとうございます。
これで出来ました。
LRESULT CSssView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
switch(message) {
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
SetTimer( message, GetDoubleClickTime(), NULL );
break;
// ダブルクリック
case WM_LBUTTONDBLCLK:
KillTimer( WM_LBUTTONDOWN ); // 左のシングルクリックをキャンセル
MessageBox( "ダブルクリックされました。", "左", MB_OK );
break;
case WM_RBUTTONDBLCLK:
KillTimer( WM_RBUTTONDOWN ); // 右のシングルクリックをキャンセル
MessageBox( "ダブルクリックされました。", "右", MB_OK );
break;
// シングルクリック
case WM_TIMER:
KillTimer( wParam );
if ( wParam == WM_LBUTTONDOWN ) MessageBox( "クリックされました。", "左", MB_OK );
if ( wParam == WM_RBUTTONDOWN ) MessageBox( "クリックされました。", "右", MB_OK );
break;
}
return CView::WindowProc(message, wParam, lParam);
}
No.2
- 回答日時:
ダブルクリック時にシングルクリックの処理が前もって
走るようにするのは一般的な方法です。
例えばwindowsのエクスプローラの場合
シングルクリックでファイルが選択され
ダブルクリックで実行します。
ダブルクリック時は必ず選択されます。
>こういうことは一般的にはやらないのでしょうか?
一般的にはやりません。
>また、実現するには時間差を読み取る方法が一般的なのでしょうか?
処理を別のスレッドにして
ダブルクリックかシングルクリックかのフラグをみるなりする以外
方法はないと思います。一般的ではありませんが、、
ダブルクリックとシングルクリックの操作を間違える
可能性を考慮すれば、処理がまったく別なものにすることは
インターフェース的に優しくないと思います。
No.1
- 回答日時:
ダブルクリック時にシングルクリックも
走ってしまうのはそれはWindowsの仕様です。
ダブルクリック時は
WM_LBUTTONDOWN(押した)→WM_LBUTTONUP(はずした)→WM_LBUTTONDBLCLK(ダブルクリック)→WM_LBUTTONUP(押した)
というメッセージがいきます。
処理を別のスレッドにして工夫すれば
ダブルクリック時シングルクリックの処理はしないようにできるかもしれませんが
時間差は読みとる必要がありますし、それなら
ウインドウクラス登録時、CS_DBLCLKSをはずしダブルクリックを検出しないようにしたほうが
良いでしょう。
回答ありがとうございます。
シングルクリックとダブルクリックの両方が使えるようにしたいのですが、
こういうことは一般的にはやらないのでしょうか?
また、実現するには時間差を読み取る方法が一般的なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 一眼レフカメラ SFP モジュールについて 1 2023/06/04 14:54
- ホテル・旅館 ホテルの厚意でのアップグレードの場合 5 2023/06/10 13:18
- デスクトップパソコン パソコンのデスクトップの顧客名簿のアイコンを誤って消してしまいました。 いつもアイコンをダブルクリッ 5 2023/07/31 18:16
- Excel(エクセル) Excel ハイパーリンク設定について 教えてください 例なんですが、 VBAにてファイル1の列Gに 2 2022/11/04 17:52
- その他(ソフトウェア) 広く一般に開放された情報処理システムの話です。 ダブルクリックしなくていいところをダブルクリックして 2 2023/01/18 11:55
- フリーソフト Windows 10のパソコンでフリーソフトが立ち上がらなくなりました。 ダブルクリックして起動しよ 6 2022/05/10 17:41
- その他(家族・家庭) シングルの元に産まれたかった。 「両親揃ってる方が子どもには良い」「シングルでも幸せな家庭はあるだろ 4 2023/08/17 08:50
- その他(家族・家庭) シングルの元に産まれたかった。 「両親揃ってる方が子どもには良い」「シングルでも幸せな家庭はあるだろ 6 2023/08/17 08:59
- その他(悩み相談・人生相談) シングル子持ちです お付き合いしてる相手は 職場のかた同い年独身です 彼は両親に、付き合ってる人はい 4 2023/03/15 00:56
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別フォームから戻ったときのイ...
-
マウスオーバー時に効果音を鳴らす
-
【ImageMagick】 PDF → JPG 変...
-
リンクをクリックしたのと同じ...
-
VB2005 DataGridView上でクリッ...
-
ASP DB検索結果の件数を事前表示
-
「Cancel = True」とはどういう...
-
マイページはどこを開くの
-
ウインドウを毎回同じ位置、大...
-
エクセルのシート上に別のシー...
-
デジタル時計の時刻合わせの方...
-
一定時間おきにアラームやポッ...
-
Javascript_submit()完了後に処...
-
PDFを(htmlのように)無限に縦...
-
小さな表示窓の呼び方は
-
エクセルVBAでフォームのListbo...
-
VBA ポップアップが表示された...
-
Excelでワードアートや図を常に...
-
Excel操作 ウィンドウで出した...
-
Outlookでこのような表示がされ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別フォームから戻ったときのイ...
-
「Cancel = True」とはどういう...
-
VB2005 DataGridView上でクリッ...
-
excelのタスクバーアイコンが・...
-
処理終了後のに砂時計が、クリ...
-
エクセル アプリケーションの...
-
リンクをクリックしたのと同じ...
-
C++での連続した左クリックの禁...
-
Perlで数値(小数点、負の数、...
-
VB6.0のEnabledをfalseにしても...
-
別ページからのタブ切り替えの...
-
VBAでIEの「Web ページからのメ...
-
フォームの値を取得できません...
-
Perlの多重起動を禁止したい
-
VB6にて、バックグラウンド処理...
-
マウスオーバー時に効果音を鳴らす
-
VC++2010 エディットボックスに...
-
C# マウスオーバーの記述方法
-
vba IE操作で こういう事って...
-
実行中のOSを知るには?
おすすめ情報