MFC: как сохранить дочерний диалог CWnd от изменения размера родительского окна?

Я пишу MFC dialog с несколькими элементами управления. У меня сейчас есть CWnd который находится на правой половине dialog, После нажатия кнопки редактирования ребенок CWnd изменен, чтобы занять большую часть диалога.

Однако теперь, когда я пытаюсь изменить размер окна, ребенок CWnd прыгает обратно туда, где он был изначально. Я не могу понять, как сохранить его в новом положении при изменении размера.

Соответствующий код:

OnInit() {
//the grouper rectangle
CRect rectHTMLGrouper;
m_grpHTMLbox.GetWindowRect(&rectHTMLGrouper);
ScreenToClient(&rectHTMLGrouper);

//the new rectangle to use for positioning
CRect rectHtml;
rectHtml.left = rectHTMLGrouper.left + PREVIEW_EDITOR_LEFT;
rectHtml.right = rectHTMLGrouper.right - PREVIEW_EDITOR_RIGHT;
rectHtml.top = rectHTMLGrouper.top + PREVIEW_EDITOR_TOP;
rectHtml.bottom = rectHTMLGrouper.bottom - PREVIEW_EDITOR_BOTTOM;

//this inits my editor and sets the position
m_wHtmlEditor.CreateHtmlEditor(rectHTMLGrouper, this, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN);

//CodeJock - XTREMEToolkit Call for SetResize Logic
SetResize(m_wHtmlEditor.GetDlgCtrlID(), LEFT_PANE_RESIZE, 0, 1, 1);
m_wHtmlEditor.SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOMOVE);
}OnEditMode() {

//enlarge the editor to take up the full dialog
CRect parentClientRect;
m_wHtmlEditor.GetParent()->GetClientRect(&parentClientRect);
m_wHtmlEditor.SetWindowPos(&CWnd::wndTop, parentClientRect.left + edgePadding, parentClientRect.top + editorTopPadding, parentClientRect.right - (edgePadding * 2), parentClientRect.bottom - bottomPadding, SWP_NOOWNERZORDER);

return;
}

1

Решение

После нажатия кнопки редактирования размер дочернего CWnd изменяется, чтобы занять
большая часть диалога.

Вы должны обрабатывать тот же размер в вашем OnSize() (ON_WM_SIZE()) обработчик сообщений (используя какой-то элемент BOOL для отслеживания состояния дочернего окна).

OnSize() вызывается повторно при изменении размера диалога.

Пример:

// .h
BOOL m_bIsEditMode;

// .cpp
// keep track of m_bIsEditMode

void CMyDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

if (m_bIsEditMode) {

//enlarge the editor to take up the full dialog
m_wHtmlEditor.MoveWindow (0, 0, cx, cy);
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]