Добавление привязки изменения размера к производному классу CMFCPropertySheet
Благодаря поддержке Stack Overflow я смог создать свой собственный CResizingMFCPropertySheet
это поддерживает изменение размера. Теперь я пошел, чтобы добавить привязку изменения размера, и я использовал этот код:
void CResizingMFCPropertySheet::InitialiseResizeIcon()
{
CRect rcIcon, rcClient;
m_bmpResize.LoadOEMBitmap(OBM_SIZE);
m_lblResize.Create(0, WS_CHILD | WS_VISIBLE | SS_BITMAP,
CRect(0, 0, 16, 16), this, IDC_STATIC_RESIZE);
m_lblResize.SetBitmap(m_bmpResize);
GetClientRect(rcClient);
m_lblResize.GetClientRect(rcIcon);
m_lblResize.SetWindowPos(&CWnd::wndTop, rcClient.right - rcIcon.Width(),
rcClient.bottom - rcIcon.Height(), 0, 0, SWP_NOSIZE);
}
(Примечание: приведенный выше код исправлен и больше не использует динамическое расположение - не работает).
Метод вызывается в OnInitDialog
, Когда лист отображается впервые, он выглядит хорошо:
Вы можете увидеть якорь в правом нижнем углу. Теперь, когда я иду, чтобы изменить размер окна:
Как вы можете видеть, это не правильно отображает якорь.
Обновить
Я поставил WS_CLIPSIBLINGS
и это не имеет значения.
Обновить
Просто чтобы все знали причину, по которой новый тематический захват не работал правильно, потому что я не добавил OnNcHitTest
обработчик и т. д.
2 ответа
Я никогда не пробовал этого, я немного искал, и, кажется, есть некоторые проблемы в динамическом выполнении. Некоторые говорили, что это невозможно, другие, кажется, предлагают способы сделать это. Вот некоторые из лучших ссылок, которые я нашел, надеюсь, это поможет.
Как добавить захват в PropertySheet?
https://www.codeproject.com/Tips/214744/How-to-implement-a-resizable-property-sheet-class
https://www.codeguru.com/cpp/controls/propertysheet/article.php/c543/Resizing-the-Property-Sheet.htm
Этот помог в конце концов:
Создание изменяемого размера CMFCPropertySheet с помощью динамических макетов
Ответ там объясняет, как правильно рисовать пользовательские элементы управления с помощью OnSize
,
Измените стиль для CMFCPropertySheet и добавьте WS_CLIPSIBLINGS!
Добавьте WS_CLIPSIBLINGS в окно захвата тоже.
Добавьте WS_CLIPCHILDREN в таблицу CPropertySheet.