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)