У меня есть класс, полученный от CPropertysheet
. В нем есть две страницы свойств. Я сделал лист немодальным. Но изменение размера с помощью перетаскивания мышью невозможно. Как сделать страницу свойств изменчивой?Изменение размера немодального листа свойств
1
A
ответ
4
Для модального листа свойств см. Ссылки в разделе комментариев. Для немодальной версии создайте лист свойств с WS_THICKFRAME
. Этого достаточно, чтобы изменить размер диалогового окна. Например:
propSheet->Create(this, WS_THICKFRAME |
WS_VISIBLE | WS_SYSMENU | WS_POPUP | WS_VISIBLE | WS_CAPTION);
Для обработки изменения размера, добавьте следующие элементы:
class CMyPropertySheet:public CPropertySheet
{
CRect save_rc;
BOOL OnInitDialog();
void OnSize(UINT nType, int cx, int cy);
void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
...
};
перегрузки OnInitDialog
следующим образом:
BOOL CMyPropertySheet::OnInitDialog()
{
m_bModeless = FALSE;
m_nFlags |= WF_CONTINUEMODAL;
BOOL bResult = CPropertySheet::OnInitDialog();
m_bModeless = TRUE;
m_nFlags &= ~WF_CONTINUEMODAL;
GetClientRect(&save_rc);
return bResult;
}
Остальное объясняется в примере MSDN:
void CMyPropertySheet::OnSize(UINT nType, int cx, int cy)
{
CPropertySheet::OnSize(nType, cx, cy);
if (!GetActivePage()) return;
if (!GetTabControl()) return;
int dx = cx - save_rc.Width();
int dy = cy - save_rc.Height();
HDWP hDWP = ::BeginDeferWindowPos(5);
for (CWnd *child = GetWindow(GW_CHILD); child; child = child->GetWindow(GW_HWNDNEXT))
{
CRect r;
child->GetWindowRect(&r);
ScreenToClient(&r);
if (child->SendMessage(WM_GETDLGCODE) & DLGC_BUTTON)
{
r.left += dx;
r.top += dy;
::DeferWindowPos(hDWP, child->m_hWnd, 0, r.left, r.top, 0, 0,
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
}
else
{
r.right += dx;
r.bottom += dy;
::DeferWindowPos(hDWP, child->m_hWnd, 0, 0, 0, r.Width(), r.Height(),
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
}
}
::EndDeferWindowPos(hDWP);
GetClientRect(&save_rc);
}
void CMyPropertySheet::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
CPropertySheet::OnGetMinMaxInfo(lpMMI);
if (!GetActivePage()) return;
//height should be no less than 200, otherwise we could end up
//with negative height when resizing child controls
lpMMI->ptMinTrackSize.x = 200;
lpMMI->ptMinTrackSize.y = 200;
}
Также добавьте ON_WM_SIZE
и ON_WM_GETMINMAXINFO
на карте сообщение
Смежные вопросы
- 1. Создание невидимого и немодального листа свойств вызывает изменение фокуса?
- 2. Изменение размера свойств XAML
- 3. Изменение размера листа спрайтов css
- 4. Ошибки с изменением размера листа свойств
- 5. изменение размера рендеринга элемента при горизонтальном изменении размера листа
- 6. Изменение размера/высоты свойств fabricjs Rects
- 7. Изменение способа объявления переменной в зависимости от размера рабочего листа?
- 8. Что касается листа свойств MFC
- 9. Окно свойств листа Excel закрывается
- 10. Изменение названия добавленного листа
- 11. Изменение выходного листа
- 12. Как сделать dijit.Dialog немодального
- 13. Изменение свойств свойств сбой деятельности
- 14. Лист размера листа заголовка ListView?
- 15. Изменение свойств вида в зависимости от класса размера
- 16. Изменение размера Colorbox на изменение размера окна
- 17. Изменение размера текста в браузере Изменение размера
- 18. Изменение размера PNGs с окна Изменение размера
- 19. изменение размера iFrame до размера
- 20. Изменение размера контейнера среднего размера
- 21. iPhone: изменение размера в drawRect:
- 22. Изменение размеров свойств сохранения QOpenGLTexture
- 23. Изменение столбцов после создания листа
- 24. Изменение листа в таблице Google
- 25. Изменение формата/компоновки листа excel
- 26. Pygame - Изменение скорости листа спрайта
- 27. Изменение стиля листа по культуре
- 28. Создание немодального диалога в ADF
- 29. Изменение размера и размера холста до размера
- 30. Булевая функция для проверки свойств листа
Может быть эта связь может иметь некоторую помощь: [это] (https://support.microsoft.com/en-us/kb/143291) –
ли эта помощь? https://support.microsoft.com/en-us/kb/325613 –