CListCtrl && WM_SIZE
- From
- slavik levchenko (2:4626/6.58)
- To
- Boris Rudakov ()
- Date
- 2003-08-10T17:49:24Z
- Area
- CARBON.COPY
* Forwarded from area 'SU.WINDOWS.PROG'
/re, Boris.
09 августа 2003 11:00, Boris Rudakov писал slavik levchenko:
----skip----
BR> Очень вкратце (из твоего текста практически не понятно что ты делаешь).
8)
BR> * WM_SIZE получает то окно, которое В НАСТОЯЩИЙ МОМЕНТ ресайзится. Это -
BR> уведомление что его размеры УЖЕ изменились и окно (если хочет) может это
BR> как-то отметить.
эт понятно.
BR> Новые размеры окна уже доступны по GetWindowRect, а клиентской области -
BR> по GetClientRect.
ок
BR> В твоем случае WM_SIZE нужно ловить в оконной функции ДИАЛОГА.
так и делаю
BR> * Изменить размеры контролов ресайзнутого окна можно функцией (см. доки)
BR> SetWindowPos(HWND, 0, 0, 0, ParentClientRect.right, ParentClientRect.bottom,
BR> SWP_NOZORDER);
хех, а я думал эта функция позиционирует окно 8))
BR> API предоставляет ряд врапперов над ней, в том числе MoveWindow и иже.
что за врапперы?
BR> * Использовать надо хендл (HWND) того окна, над которым ты хочешь провести
BR> манипуляции (упоминаю это на всякий случай, вдруг ты про это забыл:)
не забыл, но всеравно сэнкс 8)
sl>> Каким образом изменить размеры CListCtrl, кажется что я не той
sl>> функцией пользуюсь, так как нет никакого результата, при изменении
sl>> размеров диалогового окна размеры контрола не меняются... 8((
BR> 1. У ДИАЛОГА обрабатывай WM_SIZE.
есть такое дело
BR> 2. В обработчике WM_SIZE бери новые размеры по GetClientRet и ресайзи
BR> список.
BR> .... CRepList (dialog) message handler
BR> case WM_SIZE: {
BR> RECT DlgCliRect;
BR> GetClientRect(&DlgCliRect);
BR> // ^^ NO "CRepList::" and other stuff !!!!
BR> ::SetWindowPos(m_list->m_hWnd, 0, 0, 0,
BR> DlgCliRect.right, DlgCliRect.bottom, SWP_NOZORDER);
BR> return 0;
BR> }
спасибо! все работает 8)
хочу до конца разобраться, чтобы все стало ясным. почему GetClientRect() берем НЕ у диалога? ведь мне нужны параметры для RECT именно диалогового окна.
sl>> CRepList::GetClientRect(&myrect);
BR> Указание ^^ левое, пробелы в знании С++ :)
да нет, все работает 8)
sl>> sz.cx = rect.right - rect.left;
sl>> sz.cy = rect.bottom - rect.top;
sl>> CRepList::m_list.ApproximateViewRect(sz);
BR> А тут ты вообще намудил, я не знаю структуры классов MFC, но такое чевство
BR> что ты вызываешь ApproximateViewRect у ДИАЛОГА ! :)
а как иначе? есть диалог, у него есть член типа CListCtrl - m_list. функцию применяю к этому члену m_list
---
* Origin: /icq 251037 (2:4626/6.58)