• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:タイマー機能について)

タイマー機能の使い方について

このQ&Aのポイント
  • 初めての投稿です.よろしくお願いいたします..NET 2003のMFCを使用しています.インターフェース上にボタンを設置し,1つのボタンで,左シングルクリックと左ダブルクリックの両方でメッセージボックスを出したいと考えています.タイマー機能を使えばよいということはわかったのですが,実際どうプログラミングを組んだらいいのかわかりません.
  • OnLButtonDown内で,if(数秒以内にもう一度クリックされたら){ ダブルクリックの処理 }else{ シングルクリックの処理 }というのしか思いつかないのですが,これは無理ですよね(^_^;) ダブルクリックの処理はOnLButtonDblClk内で行なっていて…
  • 頭がこんがらがってしまいました.ぜひアドバイスいただければと思います.よろしくお願いいたします.

質問者が選んだベストアンサー

  • ベストアンサー
  • ainax
  • ベストアンサー率45% (5/11)
回答No.1

当方VB2005なのでそちらで動くか分かりませんが、こちらで動作確認が取れましたので参考になれば幸いです。 尚、参考URLのソースコードをVB2005に直したものです。 Private Declare Function GetDoubleClickTime Lib "USER32" () As Integer Private Declare Function SetTimer Lib "user32.dll" _ (ByVal hWnd As Integer, ByVal uElapse As Integer, _ ByVal lpTimerFunc As Integer, ByVal lpTimerProc As Integer) As Integer Private Declare Function KillTimer Lib "user32.dll" _ (ByVal hWnd As Integer, ByVal uIDEvent As Integer) As Integer Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) Const WM_LBUTTONDOWN = &H201 Const WM_RBUTTONDOWN = &H204 Const WM_LBUTTONDBLCLK = &H203 Const WM_RBUTTONDBLCLK = &H206 Const WM_TIMER = &H113 Select Case m.Msg Case WM_LBUTTONDOWN, WM_RBUTTONDOWN SetTimer(Me.Handle, m.Msg, GetDoubleClickTime(), Nothing) Exit Sub Case WM_LBUTTONDBLCLK KillTimer(Me.Handle, WM_LBUTTONDOWN) MessageBox.Show("左ダブルクリック") Exit Sub Case WM_RBUTTONDBLCLK KillTimer(Me.Handle, WM_RBUTTONDOWN) MessageBox.Show("右ダブルクリック") Exit Sub Case WM_TIMER KillTimer(Me.Handle, m.WParam.ToInt32) If m.WParam = WM_LBUTTONDOWN Then MessageBox.Show("左シングルクリック") ElseIf m.WParam = WM_RBUTTONDOWN Then MessageBox.Show("右シングルクリック") End If Exit Sub End Select MyBase.WndProc(m) End Sub

参考URL:
http://www.daccho-it.com/program/WinApi/sdclk.htm
panokoko
質問者

お礼

迅速な対応ありがとうございます! 私が御礼遅くなり申し訳ありません. そしてすごく丁寧にお答えしていただき感謝です!! ざっと見た感じ,2003ではそのままだと無理そうですが手直しを加えてやってみます! 本当にありがとうございます. またわからないことがあったら質問させてください><