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;
}
}
}