Как изменять позицию и размер контролов?
У меня такой вопрос: есть диалог, на нем кнопка и ListControl. Нужно при изменении размеров диалога изменять позицию кнопки (она должна быть "привязана" к правому нижнему углу диалога) и размер ListControl. Как это лучше сделать?
Есть идея каждый раз при изменении размеров окна удалять старые контролы и рисовать новые, в зависимости от размеров диалога, но это проблематически. Дело в том, что ListControl содержит очень много элементов, и его удаление с последующим заполнением нового контрола - очень долгая процедура.
Может кто знает более элегантный способ?
Заранее благодарен.
Код:
CWnd::SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );
Код:
// получаем размер рабочей области
GetClientRect(hDlg,&dialog);
// устанавливаем
hChild = GetDlgItem(hDlg,идентификатор контрола);
if( hChild )
{
MoveWindow(hChild,dialog.left+14,dialog.top+16,dialog.right-28,dialog.bottom-64,TRUE);
InvalidateRect(hChild,NULL,FALSE);
UpdateWindow(hChild);
}
GetClientRect(hDlg,&dialog);
// устанавливаем
hChild = GetDlgItem(hDlg,идентификатор контрола);
if( hChild )
{
MoveWindow(hChild,dialog.left+14,dialog.top+16,dialog.right-28,dialog.bottom-64,TRUE);
InvalidateRect(hChild,NULL,FALSE);
UpdateWindow(hChild);
}
Вообщем вот так, а если просто требуется перенести, то то что в скобках:
Код:
GetClientRect(hChild,&item);
x = dialog.right-16-(item.right-item.left);
y = dialog.bottom-48+(48-(item.bottom-item.top))/2;
MoveWindow(hChild,x,y,item.right-item.left,item.bottom-item.top,TRUE);
InvalidateRect(hChild,NULL,FALSE);
UpdateWindow(hChild);
x = dialog.right-16-(item.right-item.left);
y = dialog.bottom-48+(48-(item.bottom-item.top))/2;
MoveWindow(hChild,x,y,item.right-item.left,item.bottom-item.top,TRUE);
InvalidateRect(hChild,NULL,FALSE);
UpdateWindow(hChild);
Большое человеческое спасибо!