Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Дочернее MDI-окошко, разделенное сплиттером. Как? / 3 сообщений из 3, страница 1 из 1
27.03.2006, 19:08
    #33628126
Talen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дочернее MDI-окошко, разделенное сплиттером. Как?
Доброго времени суток.
Как правильно сделать сабж, чтобы работало?
Я делаю следующее:
Код: 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
28.03.2006, 02:35
    #33628488
Chernomor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дочернее MDI-окошко, разделенное сплиттером. Как?
Создай MDI со стилем Windows Explorer, и разбери код как это делать вручную.
Не знаю можно ли использовать диалоги в MDI, я не пробывал, а вообще-то если надо вариант диалога то испольуется CFormView. Хотя тебе судя по всему надо использовать CTreeView и CListView.
...
Рейтинг: 0 / 0
28.03.2006, 11:03
    #33628914
Talen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дочернее MDI-окошко, разделенное сплиттером. Как?
Я в общем-то построил это окошко. Диалоги в нем являются дочерними элементами, как Button, Statiс,... WTL нормально это обрабатывает, но теперь другая проблема - При разворачивании дочернего MDI вываливается exception из обработчика OnNCPaint. Зачем WM_NCPAINT дочернему диалогу, вообще не имеющему заголовка?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Дочернее MDI-окошко, разделенное сплиттером. Как? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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