Как предотвратить изменение размера WTL CSplitterWindow?
Я смотрю на переопределение класса окна разделителя MFC:
https://www.codeproject.com/Articles/6188/How-to-prevent-resizing-of-views-in-a-splitter-win
Я тестировал исходный код переопределения с помощью WTL CSplitterWindow, но он не работал.
я изменил MainFrm.h, используя CSplitOverride вместо класса CSplitterWindow.
при запуске программы появляется всплывающее сообщение об ошибке "api-ms-win-core-libraryloader-l1-2-0.dll..".
Windows 7 64-битная платформа OS, 32-битная версия 2015 года.
class CSplitOverride : public CSplitterWindow
{
public:
CSplitOverride() { }
protected:
BEGIN_MSG_MAP(CSplitOverride)
MESSAGE_HANDLER(WM_NCHITTEST, OnNcHitTest)
END_MSG_MAP()
public:
LRESULT OnNcHitTest(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
return HTNOWHERE;
}
};
РЕДАКТИРОВАТЬ: я пробовал настройки толстого кадра, но не доступно. Решение Jan S работает так, как я хочу.
1 ответ
Взгляните на отличный учебник Майкла Даннса по окнам сплиттера (хотя для его компиляции в vs2013 требуется несколько изменений!)
Это обсуждение на сайте sourceforge WTL также может быть полезным
Я думаю, вы спрашиваете, как вы сохраняете размер панели постоянным при изменении размера основного кадра? Это зависит от выравнивания фиксированной панели
atlsplit.h определяет следующие расширенные стили
#define SPLIT_RIGHTALIGNED 0x00000004
#define SPLIT_BOTTOMALIGNED SPLIT_RIGHTALIGNED
Как говорит Майкл Дан: "Если не указан ни один из этих трех стилей, по умолчанию для сплиттера используется выравнивание по левому или верхнему краю".
- SPLIT_NONINTERACTIVE останавливает пользователя от изменения размера панели
m_cxyMin жестко кодирует минимальный размер панели, указанный выравниванием
m_wndHorzSplit.SetSplitterExtendedStyle(SPLIT_BOTTOMALIGNED | SPLIT_NONINTERACTIVE); m_wndHorzSplit.m_cxyMin = 150;