Для начала удалим с диалоговой панели кнопки OK и CANCEL, так как они будут мешать. Создадим два пункта меню. Первый пункт меню это FULL, а второй MINI. И условимся, что сначала инициализироваться список будет как MINI. Итак, создаем два пункта меню. С помощью ClassWizard привяжем к ним события.
void CTestListDlg::OnFull() { // TODO: Add your command handler code here } void CTestListDlg::OnMini() { // TODO: Add your command handler code here }
В нашем классе CTestList создадим две функции FULL и MINI вот так:
////////////////////////////////// // CTestList message handlers void CTestList::Full(CDialog *cd) { } void CTestList::Mini() { }
Функции реакции на выбор меню будут вызывать одноименные функции класса CTestList:
void CTestListDlg::OnFull() { m_List.Full(this); } void CTestListDlg::OnMini() { m_List.Mini(); }
Напишем функции:
void CTestList::Full(CDialog *cd) { CRect cr; cd->GetClientRect(cr); MoveWindow(cr); } void CTestList::Mini() { MoveWindow(CRect(0,0,100,100)); }
Класс CListBox является наследником CWnd и естественно он умеет двигаться. Для работы мы получаем рабочую область GetClientRect(), а в противном случае просто устанавливаем размеры. Теперь нам надо позаботиться о начальной инициализации размеров:
BOOL CTestListDlg::OnInitDialog() { m_List.Mini(); m_List.AddString("США"); m_List.AddString("РОССИЯ"); m_List.AddString("КАНАДА"); m_List.AddString("ЯПОНИЯ"); return TRUE; // return TRUE unless you set the focus to a control }
Попробуйте. Размер будет меняться.