ツールバー上のボタンを押している間、ある処理をしたいです。 – プログラミング – Home

ツールバー上のボタンを押している間、あ...
 
通知
すべてクリア

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


はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

////////////////////////////////////////////////////////////////////////////////

開発環境 : 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
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

> 処理をしつづけるようなことをしたいと思っています。

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

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

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


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

> void CChildFrame::OnBnext()

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

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


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

Bunさん、dairygoodsさん、いつもお世話になってます。返事が遅れてすみません。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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