|

楼主 |
发表于 2015-1-14 14:47:01
|
显示全部楼层
官方版 V522 的demo ,skinning 里面,点击select vehicle ,之后还可以点击父窗口,后面我看了代码,原版的代码是这样的,
/*********************************************************************
*
* _cbDialogOrder
*/
static void _cbDialogOrder(WM_MESSAGE * pMsg) {
//............
..................
case WM_NOTIFY_PARENT:
if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {
int Id = WM_GetId(pMsg->hWinSrc);
switch (Id) {
case GUI_ID_BUTTON0:
hDlg = GUI_CreateDialogBox(_aDialogSelect, GUI_COUNTOF(_aDialogSelect), _cbDialogSelect, pMsg->hWin/*WM_HBKWIN*/, xOff, yOff);
//WM_HideWin (pMsg->hWin); /* hide parent */
// WM_DisableWindow (pMsg->hWin);
FRAMEWIN_SetSkin(hDlg, _DrawSkin);
WM_ClrHasTrans(hDlg);
GUI_MEMDEV_MoveInWindow(hDlg, 80 + xOff, 190 + yOff, 180, 500);
while ((_ReadyDialogOrder == 0) && (GUIDEMO_CheckCancel() == 0)) {
GUI_Delay(100);
if (_ReadyDialogSelect == 1) {
//
// Make sure the dialog is not deleted.
//
if (WM_IsWindow(hWin)) {
_ReadyDialogSelect++;
hItem = WM_GetDialogItem(hWin, GUI_ID_EDIT0);
EDIT_SetText(hItem, _acVehicle);
}
}
}
if (WM_IsWindow(hDlg)) {
WM_DeleteWindow(hDlg);
}
break;
case GUI_ID_OK:
hProg = GUI_CreateDialogBox(_aDialogProgress, GUI_COUNTOF(_aDialogProgress), _cbDialogProgress, WM_HBKWIN, xOff, yOff);
//
// Make modal to avoid several creations of the progress window.
//
WM_MakeModal(hProg);
FRAMEWIN_SetSkin(hProg, _DrawSkin);
GUI_MEMDEV_FadeInWindow(hProg, 500);
WM_InvalidateWindow(hWin);
GUI_ExecCreatedDialog(hProg);
//lint -fallthrough // End dialog in both cases
case GUI_ID_CANCEL:
//
// Make sure the dialog is not deleted.
//
if (WM_IsWindow(hWin)) {
GUI_MEMDEV_FadeOutWindow(hWin, 500);
GUI_EndDialog(hWin, 0);
}
_ReadyDialogOrder = 1;
break;
}
}
break;
default:
WM_DefaultProc(pMsg);
}
}
是设置的 WM_HBKWIN,这样按道理是可以点,因为没有父窗口的概念,但是我改成pMsg->hwin,这样就设置父窗口为创建的父窗口,结果很不幸,依旧可以点父窗口,最后我WM_DisableWindow (pMsg->hwin) ; 结果很残酷,还是可以按,最后我用了一个一劳永逸的办法, WM_Hide (pMsg->hwin); ,我高兴的将这个用法用到我的产品上去,最后是不会吴触发,但是很不辛,当我快速的在 A B C D 四个窗口之间滑动的时候,A 滑到 C,
C 响应 RELEASED 消息分支,最后在响应之前将pMsg->hwin hid掉,然后我将创建的窗体再销毁,回到 A B C D,这个时候 A 的一大堆的 CLICKED 消息发过来了。我试过在跑 emwin demo的工程里面,所有的在button里按下弹起响应的模式都会有这个问题,结果无一例外的memory leak ,要是内存开的小,直接就 alloc failed ,这个是个严重的BUG。(所有 emwin 这种模式处理的,都会莫名其妙的内存爆满,包括我在内)
PS: 今天和群里一群SB争论RGB和BGR 设置的问题,最搞笑的是,我说明了我用的是emwin lib 自带的那个驱动ili9341,他竟然还追着我问LCD驱动写错了,我去,还自称是看过man手册,拜托,发言之前好好验证一下好不好,丢人不? 还有人说自带驱动在emwin内部不会发控制命令,这不扯淡么,人家为什么能集成,就是因为 比如ILI9335 ILI9341 ILIXXX 这类控制器都是有公用的命令字,还说emwin 只调用 读写点函数,拜托大哥,不带这么丢人的,连基本常识都不懂,还自以为是呢,仔细想想看,要是我要设置一个点的颜色,我从哪儿调?扯J8淡。。。 |
|