////////////////////////////////////////////////////////////////////////////////
開発環境 : 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ではできないのでしょうか。
よろしくお願いします。
> 処理をしつづけるようなことをしたいと思っています。
> if(pToolB->GetToolBarCtrl().IsButtonPressed(ID_BNEXT))
深くは考えていませんが。
while ()にしたらどーですか?
> void CChildFrame::OnBnext()
これは、ボタンクリックのイベントハンドラですか?
だとしたら、ボタンのクリックはボタンを押して放したときに
発生するので、うまくいかないと思います。
ボタンを押したときに何かするには、
ボタンをサブクラス化して、WM_LBUTTONDOWNその他を処理する必要があります。
Bunさん、dairygoodsさん、いつもお世話になってます。返事が遅れてすみません。
デバッグでステップインで注意深くたどっていったら、dairygoodsさんの言っていたように、
確かに、ボタンを押して話してから、タイマーがセットされるので、うまく行っていない
ようでした。
まだ、サブクラス化というのはやったことがないのですが、早速、やってみようと思います。
いつもながら、今回もありがとうございました。