ダイアログ上のプッシュボタンのDOWN-UP間でボタンを外れてもUPメッセージを取得したい

[戻る]
竹の子ビッチ 2002/05/21(火) 17:15:39
開発環境
Win2000 VC++6.0 SP5 MFC使用

いつもお世話になっております。
以下の件の続きなんですけど
上手くいきません。

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200205/02050023.txt

当時は、プッシュボタン(IDC_BUTTON1)のDown-Up間で
ダイアログ上のボタンを外れても
CButtonExのOnLButtonUp();
に飛んできた記憶がありますが、
原因はわかりませんがOnLButtonUp();に
飛んでこなくなりました。  

よって以下のように変更しました。

CSampleDlg*    Dlg;   //追加

class CButtonEx : public CButton
{
  UINT m_uTimerID;

}

void CButtonEx::OnTimer(UINT nIDEvent) 
{
  if( m_uTimerID == nIDEvent )
  {
    a++;
  m_uTimerID = SetTimer(TIMER_ID, TIMER_5000MS,  NULL);
  }

  CButton::OnTimer(nIDEvent);
}

void CButtonEx::OnLButtonDown(UINT nFlags, CPoint point) 
{
 
 Dlg->m_button.SetCapture();    //追加

 m_uTimerID = SetTimer(TIMER_ID, TIMER_5000MS,  NULL);
  
  CButton::OnLButtonDown(nFlags, point);
}

void CButtonEx::OnLButtonUp(UINT nFlags, CPoint point) 
{
  KillTimer(m_uTimerID);

 ReleaseCapture();  //追加

  CButton::OnLButtonUp(nFlags, point);
}

プッシュボタンに対してSetCapTureを
使いましたが、プッシュボタンの外で
マウスの左ボタンを離しても
void CButtonEx::OnLButtonUp(UINT nFlags, CPoint point)
に飛んできません。

何か良い方法がありましたら
アドバイスお願いします。

不良PG [E-Mail] 2002/05/21(火) 18:19:18
>当時は、プッシュボタン(IDC_BUTTON1)のDown-Up間で
>ダイアログ上のボタンを外れても
>CButtonExのOnLButtonUp();
>に飛んできた記憶がありますが、
>原因はわかりませんがOnLButtonUp();に
>飛んでこなくなりました。  
当時と比較してみましょう・・

>Dlg->m_button.SetCapture();    //追加
これは、
SetCapture();    //追加
で良いのでは?

この質問からだと、ここまでの回答しか浮かびません・・
問題は、このコード以外の所にありそうですね・・

PATIO 2002/05/22(水) 09:49:34
私の記憶では真っ当にコードを書いていれば、
キャプチャしていない状態ではボタンアップ時に
ボタンから外れるとボタンアップは飛んでこないはずです。

むしろ、飛んできていた状態の方がおかしかったのでは
と思います。その辺はボタン以外のところにもあるような
気がしますけれど。

dairygoods 2002/05/23(木) 13:43:40
> 私の記憶では真っ当にコードを書いていれば、
> キャプチャしていない状態ではボタンアップ時に
> ボタンから外れるとボタンアップは飛んでこないはずです。

ボタンは内部でSetCaptureとReleaseCaptureしていますので、
領域から外れていても、WM_LBUTTONUPは飛んできます。

ただし、Alt+Tabなどでキャプチャを強引にはずすことが出来るので、
WM_LBUTTONUPには期待せず、WM_CAPTURECHANGEDで処理するほうがよいでしょう。

竹の子ビッチ 2002/05/24(金) 18:49:43
[[解決]]
不良PGさん、PATIO さん、dairygoods さん
アドバイス有難うございます。

Upメッセージが飛んでくるようになりました。
CSampleDlg.cppで、ボタンを常に1秒周期で無効→有効
を繰り返していた為、無効になった時に
マウスキャップチャーが外されてたようです。
ボタンを無効にするステップを外したら
再びUpメッセージが飛んでくるようになりました。

>ボタンは内部でSetCaptureとReleaseCaptureしていますので、
>領域から外れていても、WM_LBUTTONUPは飛んできます。

なるほど。

>ただし、Alt+Tabなどでキャプチャを強引にはずすことが出来るので、
>WM_LBUTTONUPには期待せず、WM_CAPTURECHANGEDで処理するほうがよいでしょう

時間があれば試してみようと思います。

古いスレッドには追加発言できません。