因近期定制wince Shell 频繁,已经是一个星期连续发现2个MS的bug了。。
位置是在 WINCE500/PUBLIC/SHELL/OAK/HPC/EXPLORER/TASKBAR/taskbar.cpp的
LRESULT CALLBACK CTaskBar::TaskBarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)函数,
m_pPowerUI->ShowPowerWarning(hwnd, lParam, (DLGPROC) s_TrayWndProc);
很明显的bug 把消息处理函数指导托盘的消息处理函数去了,服了MS,导致电池警告窗口弹出一次以后,关闭后,窗口句柄没有销毁,在资源泄漏的同时,也造成了再次弹出窗口时对窗口句柄的判断,使得无法弹出窗口。
- case WM_COMMAND:
- switch (GET_WM_COMMAND_ID(wParam, lParam))
- {
- case IDM_TASKBAR_WARNING:
- if (m_pPowerUI)
- {
- // ignore return val until there is another warning handler
- //m_pPowerUI->ShowPowerWarning(hwnd, lParam, (DLGPROC) s_TrayWndProc);
- m_pPowerUI->ShowPowerWarning(hwnd, lParam, (DLGPROC) s_WarningDlgProc);
- }
- break;