Member 11380615 Ответов: 1

В проекте mfc MDI onfilenew восстанавливает существующий полноэкранный дочерний элемент MDI. Любой способ отключить восстановление.


Дорогие Все,
У меня есть проект MFC MDI, в котором при запуске создается развернутое дочернее окно MDI. Позже пользователь может создать больше дочерних элементов MDI. Замечено, что когда больше детей (12 из них) создаются OnFileNew (), существующий развернутый дочерний MDI восстанавливается, и мы видим восстановленное дочернее окно mdi на экране.
Есть ли способ остановить восстановление существующего развернутого дочернего окна MDI?
У меня есть скриншот, который показывает проблему.

Спасибо и с уважением,
Ракеша

Что я уже пробовал:

Я попытался создать новых детей в режиме скрытия (SW_HIDE). Это не сработало. Я попытался создать новых детей в очень маленьком размере и вне клиентской области основного фрейма mdi.
Я попробовал поместить существующее окно сверху
(
pAnimView->SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
)
а потом звонить в OnFileNew();
Ничего не помогало.

1 Ответов

Рейтинг:
0

KarstenK

Вы должны тщательно выполнять OnNewFile обработчик команды. Перенумерация или переименование идентификаторов-это распространенная ловушка для того, чтобы испортить обработку сообщений.

Убедитесь, что вы создаете новый дочерний объект окна и не только повторно запускает команды с фактическим объектом.


Member 11380615

ID_FILE_NEW сопоставляется с OnFileNew1 . Это то, что система вызывает при создании первого дочернего окна mdi. Когда пользователь создает новые дочерние окна mdi, используется OnFileNew. И OnFileNew, и OnFIleNew1 являются функциями в приложении.

void CMarkBullNewVApp:: OnFileNew1()
{
tagPlot ltempPlot;
theApp.Is_Graph_Data_3D = ANIMATION_WIN;
ltempPlot.WinCount = 0;
ltempPlot.Is_Graph_Data_3D = ANIMATION_WIN;
ltempPlot.Graph_Type = 0; / / ii++;
ltempPlot.WinViewMap = 1;/ / lnumPlotCount[ii];
ltempPlot.RowCol[0] = 0;/ / DataColumnInt[jj];
strncpy(ltempPlot.PlotLegend[0], "0", 200);
ltempPlot.m_szXCaption[0] = "0";// m_szXCaption[0];
ltempPlot.m_szYCaption[0] = "0";// m_szYCaption[0];
ltempPlot.DirectionPlus[0] = "0";// DirectionPlus[0];
ltempPlot.DirectionMinus[0] = "0";// DirectionMinus[0];
theApp.plotList.понятно();
theApp.plotList.push_back(ltempPlot);
CWinAppEx:: OnFileNew (); / / вызов метода базового класса и / или...
// ... добавьте сюда другие задачи.
}


void CMarkBullNewVApp:: OnFileNew()
{
CWinAppEx:: OnFileNew (); / / вызов метода базового класса и / или...
}