0

ScrollHelper [1] コードを使用して、CWnd (ProgressListWnd) オブジェクトでスクロールを実装しようとしています。この CWnd 内には、複数の子 CWnd オブジェクト (ProgressWnd) が親 ProgressListWnd 内に配置されています。私が見つけたものはすべて、親CWndを子CWndで処理するだけでなく、CWndで描画されている画像またはテキスト/図形を操作することです。

ScrollHelper の実装は「機能する」ようですが、私の問題は ProgressListWnd の OnPaint 内にあり、各子オブジェクトを再配置します。OnScroll が呼び出されると、ペイント イベントがウィンドウに送信されて終了することを読みました。0,0 から開始し、子を下に再配置したため、何も動いていないように見えます。

親ウィンドウの onPaint は以下のとおりです。スクロールバーに関連するものはすべて、ScrollHelper クラスから直接取得されます。

子 CWnd オブジェクトのみで構成される CWnd でスクロールする簡単な方法はありますか? 再描画するときに、子の CWnds のスクロール位置と MoveWindow() を負の位置に手動で追跡する必要がありますか (これは、子を追加または削除するときに必要になります)?

[1]

http://www.codeproject.com/Articles/10902/Add-Scrolling-to-a-CWnd-or-CDialog-using-aC-Helpe

void CProgressListWnd::OnPaint()
{
    CPaintDC dc(this); // device context for painting

    POSITION pos = m_ProgressMap.GetStartPosition();
    int corner = 0;
    while(pos != NULL)
    {
        int uid = 0;
        CProgressWnd* pWnd = NULL;
        m_ProgressMap.GetNextAssoc(pos, uid, pWnd);
        if(pWnd != NULL)
        {
            pWnd->MoveWindow(0,corner,400,90);
            corner = corner + 90;
        }
    }
}
4

0 に答える 0