グラフを表示するMFC アプリケーションを実装しました。それらのサブセットがチャートに表示されるデータ ポイント (2000 など) があります。このサブセットは、スクロール バーで変更する必要があります。そこで、ダイアログ クラスにクラスを追加し、メソッドを呼び出すイベントをCScrollBar
リッスンしました。ON_WM_HSCROLL
OnHScroll
void CChartWithRealTimeDataDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
UINT nCurrentPos;
nCurrentPos = pScrollBar->GetScrollPos();
// nCurrentPos = m_X_Axis_Scrollbar->GetScrollPos();
bool bDoRepaint = false;
switch (nSBCode)
{
//case SB_THUMBPOSITION:
case SB_THUMBTRACK:
nCurrentPos = nPos;
pScrollBar->SetScrollPos (nPos);
bDoRepaint = true;
break;
case SB_LINELEFT:
nCurrentPos = (UINT)(std::max( (int)0, (int)nCurrentPos-1));
pScrollBar->SetScrollPos (nCurrentPos);
bDoRepaint = true;
break;
case SB_LINERIGHT:
nCurrentPos = std::min((UINT)(m_ChartControl.getTotalEnd()), nCurrentPos+1);
pScrollBar->SetScrollPos (nCurrentPos);
bDoRepaint = true;
break;
case SB_PAGELEFT:
nCurrentPos = (UINT)(std::max( (int)0, (int)nCurrentPos-10));
pScrollBar->SetScrollPos (nCurrentPos);
bDoRepaint = true;
break;
case SB_PAGERIGHT:
nCurrentPos = std::min( (UINT)(m_ChartControl.getTotalEnd()), nCurrentPos+10);
pScrollBar->SetScrollPos (nCurrentPos);
bDoRepaint = true;
break;
}
if ( bDoRepaint )
{
m_ChartControl.setShift(nCurrentPos);
Invalidate();
}
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
ユーザーがサム スライダーを動かすたびにウィンドウ全体が再描画され、ちらつきが始まります。
ちらつきを避ける方法はありますか?
ありがとう、
トーマス