emwin中设置窗口之间的切换,A窗口为父窗口,B窗口为子窗口,A窗口通过BUTTON调出B窗口后需要用
GUI_EndDialog(pMsg->hWin, 0);
Create*****();
这个代码来清除其余窗口,若不使用的话在A窗口开启其余子窗口过多的情况下会卡死,但是执行代码之后打开B窗口之后作为父窗口的A也被清除了,就无法再开启其余窗口,怎么样才能在不清除A窗口的前提条件下打开一个子窗口之后只消除其余的子窗口呢?
之前是通过设置CLOSE按钮来关闭FRAMEWIN,后来说这样不美观而且麻烦要设置成直接关闭不通过CLOSE,请问各位怎么设置呢?
void CloseBWindow(WM_HWIN hWin) {
// 关闭 B 窗口,并只清除除 B 窗口以外的其他子窗口
WM_HWIN hChild = WM_GetFirstChild(hWin);
while (hChild) {
if (hChild != hBWindow) { // B 窗口不清除
WM_DeleteWindow(hChild);
}
hChild = WM_GetNextSibling(hChild);
}
}
void OpenBWindow() {
// 创建 B 窗口
hBWindow = Create*****();
// 在 A 窗口中添加关闭 B 窗口的回调函数
WM_SetCallback(hAWindow, [](WM_MESSAGE* pMsg) {
switch (pMsg->MsgId) {
case WM_NOTIFY_PARENT:
if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {
if (pMsg->hWinSrc == hButton) {
// 显示 B 窗口
GUI_SelectLayer(1);
WM_ShowWindow(hBWindow);
// 关闭除 B 窗口以外的其他子窗口
CloseBWindow(pMsg->hWin);
}
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
});
}