CScrollViewで、LineToやTextOutで表示したデータを
スクロールバーでスクロールさせて表示しようとしています。
OnDrawで表示させようとすると、スクロール中も再描画するため
影が残ってしまいます。そのため、こののようにしました。
void XXX::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
switch(nSBCode) {
case SB_THUMBPOSITION: // スクロールバーを離した
m_bflg = FALSE; // フラグを下ろす
m_iPos = (-1)*nPos; // 描画する位置をずらす
MyDraw();
break;
case SB_THUMBTRACK: // スクロールバーを押している
m_bflg = TRUE; // フラグを立てる
break;
}
CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
}
void XXX::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
if(!m_bflg){
MyDraw(); // 描画
}
}
こうすれば、スクロールバーを移動して離してから再度描画することが
できました。
しかし、スクロールバーの矢印でスクロールさせた場合、矢印を押したという
メッセージの処理がはできますが、スクロール中というメッセージが
取得できないので、上のように処理できずに、影が残ってしまいます。
(case SB_THUMBTRACK:にcase SB_LINEDOWN:case SB_LINEUP:を追加して
やってみました)
VC++6.0のMFCでやっています。
ご教授ください。
よろしくお願いします。
>switch(nSBCode) {
の
default
で何が飛んできているか分かってますか?
つまりあなたが思う「スクロール中というメッセージ」のときです
思うに、簡単な実験プログラムを作成して
スクロールバーの操作をしたときにどんな通知が来ているのかを
徹底的に調べた方が良いと思います。
Appウィザードで雛形を吐かせて作ればたいした手間でもないと思いますし。
実は聞くよりも自分で試した方が早いって事も結構有ります。
OnVScrollにTRACE分でも放り込んで実験してみましょう。
影が残ってしまうというのがどういう症状なのかはっきりしませんが、
OnDrawの描画処理のほうに問題があるのではないでしょうか?
普通にOnDrawで描画する分には、スクロールしても問題ないはずですが。
