CScrollBar
Windows7用のMFCC++アプリケーションでを使用しようとしています。
私はすべてのメッセージを問題なく受信し、次のようなハンドラーを持っています。
void Dialog::OnHScroll(UINT nSBCode, UINT apos, CScrollBar* pScrollBar)
{
SCROLLINFO si;
si.cbSize = sizeof( si );
si.fMask = SIF_TRACKPOS;
m_slider.GetScrollInfo(&si,SIF_TRACKPOS|SIF_POS|SIF_PAGE);
int nTrackPos = si.nTrackPos; //0 except on TB_THUMBTRACK
int nPos = si.nPos; //0 except on TB_THUMBTRACK
UINT nPage = si.nPage; //seems correct always but I dont need it
を使用して位置を抽出しようとする理由GetScrollInfo
は、16ビット変数内に収まるものよりも大きい可能性があるため、渡されたposを引数として使用できないためです。
ただし、私の問題は、バーをドラッグして、ドラッグ操作TB_THUMBTRACK
の終了だけでなく、を受け取ったときにのみ有効な位置を取得することですTB_ENDTRACK
。スクロールバーをクリックするか、両端の矢印を使用すると、すべての位置(引数の位置、およびSCROLLINFO
ページを除く構造体のすべて)が0になります。
すべてのメッセージの正しい位置を取得する方法を知っている人はいますか?すなわちTB_LINEUP, TB_LINEDOWN
など。