powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Дочернее MDI-окошко, разделенное сплиттером. Как?
3 сообщений из 3, страница 1 из 1
Дочернее MDI-окошко, разделенное сплиттером. Как?
    #33628126
Фотография Talen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
Как правильно сделать сабж, чтобы работало?
Я делаю следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
class CChildFrame:
	public CMDIChildWindowImpl<CChildFrame>
{
public:
	DECLARE_FRAME_WND_CLASS(NULL, IDR_CHILDFRAME)

	BEGIN_MSG_MAP(CChildFrame)
		MESSAGE_HANDLER(WM_CREATE, OnCreate)
		MESSAGE_HANDLER(WM_FORWARDMSG, OnForwardMsg)
		CHAIN_MSG_MAP(CMDIChildWindowImpl<CChildFrame>)
		FORWARD_NOTIFICATIONS()
	END_MSG_MAP()

	virtual void OnFinalMessage(HWND /*hWnd*/)
	{
		delete this;
	}

	LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL &bHandled)
	{
		m_hWndClient = m_splitter.Create(m_hWnd, rcDefault, NULL, 
                               WS_CHILD | WS_VISIBLE | 
                               WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
		
		m_LeftPane.Create(m_splitter.GetSplitterPane(SPLIT_PANE_LEFT));
		m_RightPane.Create(m_splitter.GetSplitterPane(SPLIT_PANE_RIGHT));

		m_splitter.SetSplitterPanes(m_LeftPane, m_RightPane);
		bHandled = FALSE;
		return TRUE;
	}

	LRESULT OnForwardMsg(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
	{
		LPMSG pMsg = (LPMSG)lParam;
		if(CMDIChildWindowImpl<CChildFrame>::PreTranslateMessage(pMsg)) return TRUE;
		return FALSE; //m_splitter.PreTranslateMessage(pMsg);
	}

public:
	CSplitterWindow m_splitter;
	CLeftPaneDlg m_LeftPane;
	CRightPaneDlg m_RightPane;
};

CLeftPaneDlg и CRightPaneDlg - обычные диалоги, наследованные от CDialogImpl и CDialogResize , содержащие TREECONTROL и LISTCONTROL соответственно.

Дочернее окно создается, но не видны диалоги, не перерисовывается фон, сплиттер работает. При закрытии окна вываливается ATLASSERT на " Попытка удалить окно, которое уже удалено ".
Помогите, пожалуйста, чайнику.
...
Рейтинг: 0 / 0
Дочернее MDI-окошко, разделенное сплиттером. Как?
    #33628488
Chernomor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создай MDI со стилем Windows Explorer, и разбери код как это делать вручную.
Не знаю можно ли использовать диалоги в MDI, я не пробывал, а вообще-то если надо вариант диалога то испольуется CFormView. Хотя тебе судя по всему надо использовать CTreeView и CListView.
...
Рейтинг: 0 / 0
Дочернее MDI-окошко, разделенное сплиттером. Как?
    #33628914
Фотография Talen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в общем-то построил это окошко. Диалоги в нем являются дочерними элементами, как Button, Statiс,... WTL нормально это обрабатывает, но теперь другая проблема - При разворачивании дочернего MDI вываливается exception из обработчика OnNCPaint. Зачем WM_NCPAINT дочернему диалогу, вообще не имеющему заголовка?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Дочернее MDI-окошко, разделенное сплиттером. Как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]