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

ダイアログ上のプッシュボタンのDOWN...
 
通知
すべてクリア

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


竹の子ビッチ
 竹の子ビッチ
(@竹の子ビッチ)
ゲスト
結合: 23年前
投稿: 20
Topic starter  

開発環境
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
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

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

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

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


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

私の記憶では真っ当にコードを書いていれば、
キャプチャしていない状態ではボタンアップ時に
ボタンから外れるとボタンアップは飛んでこないはずです。

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 私の記憶では真っ当にコードを書いていれば、
> キャプチャしていない状態ではボタンアップ時に
> ボタンから外れるとボタンアップは飛んでこないはずです。

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

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


返信引用
竹の子ビッチ
 竹の子ビッチ
(@竹の子ビッチ)
ゲスト
結合: 23年前
投稿: 20
Topic starter  

不良PGさん、PATIO さん、dairygoods さん
アドバイス有難うございます。

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

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

なるほど。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました