ツールバー上のボタンを押している間、ある処理をしたいです。

[戻る]
はまち 2002/05/12(日) 15:48:21
////////////////////////////////////////////////////////////////////////////////
    
    開発環境 : Visual C++ 6.0 Service Pack 3
    動作環境 : Windows 98 Second Edition
    MFC使用 MDIベース

////////////////////////////////////////////////////////////////////////////////
少し前の質問「プッシュボタンを押してる間、処理をするロジックについて」

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

に近い質問なのですが、同じように、ツールバー上のボタンをマウスでクリックしている間ある
処理をしつづけるようなことをしたいと思っています。
ボタンのIDを「ID_BNEXT」とし、そのボタンのメッセージを受け取るハンドラと、OnTimer()
を下のようにしました。

void CChildFrame::OnBnext() 
{
   m_uTimerNext = SetTimer(100, 50,  NULL);
}

void CChildFrame::OnTimer(UINT nIDEvent) 
{    
   if(nIDEvent == m_uTimerNext)
   {
      CMainFrame* pMainF = (CMainFrame*)GetMDIFrame();
      CToolBar* pToolB = pMainF->GetToolBar();//m_wndToolBarのポインタを返します
      if(pToolB->GetToolBarCtrl().IsButtonPressed(ID_BNEXT))
      {
     必要な処理
      }
      else
          KillTimer(m_uTimerNext);
   }
   CMDIChildWnd::OnTimer(nIDEvent);
}

これで実行したのですがうまくいきません。IsButtonPressedではできないのでしょうか。

よろしくお願いします。

Bun 2002/05/13(月) 08:06:05
> 処理をしつづけるようなことをしたいと思っています。

> if(pToolB->GetToolBarCtrl().IsButtonPressed(ID_BNEXT))

深くは考えていませんが。

while ()にしたらどーですか?

dairygoods 2002/05/13(月) 10:29:01
> void CChildFrame::OnBnext() 

これは、ボタンクリックのイベントハンドラですか?
だとしたら、ボタンのクリックはボタンを押して放したときに
発生するので、うまくいかないと思います。

ボタンを押したときに何かするには、
ボタンをサブクラス化して、WM_LBUTTONDOWNその他を処理する必要があります。

はまち 2002/05/15(水) 09:18:48
[[解決]]
Bunさん、dairygoodsさん、いつもお世話になってます。返事が遅れてすみません。

デバッグでステップインで注意深くたどっていったら、dairygoodsさんの言っていたように、
確かに、ボタンを押して話してから、タイマーがセットされるので、うまく行っていない
ようでした。
 まだ、サブクラス化というのはやったことがないのですが、早速、やってみようと思います。
いつもながら、今回もありがとうございました。

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