Как предотвратить изменение размера 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;

Другие вопросы по тегам