关于orphanWindow(true)脱离父窗口之后遇到的一个问题及解决办法
By
admin
at 2018-10-16 • 0人收藏 • 1552人看过
环境:
问题1:
1, 主界面中有一个custom控件
2,上面的custom加载一个winfrom
3,这个winform中有一个plus控件, 这个plus控件利用orphanWindow(true)脱离父窗口
此时,运行界面之后,点击最小化 , 窗口最小化,但是这个plus却还在原地.
解决办法:
参考了shadow库里的写法, 增加winform.wndproc() 消息处理, 拦截窗口最小化和其他最大化,还原等指令, 使这个plus处于hide的两个状态即可.
这里需要注意, 需要拦截的消息为mainform这个第一层界面的消息, 所以, 需要对parent进行判断.
方式一: 自己判断父子关系
if(winform.parent){ winform.parent.wndproc = function(hwnd,message,wParam,lParam){ select( message ) { case 0x18/*_WM_SHOWWINDOW*/ { winform.plus.hide = false; } case 0x5/*_WM_SIZE*/{ if( wParam == 0x1/*_SIZE_MINIMIZED*/ ) winform.plus.hide = true; else winform.plus.hide = false; } else{ } } } }
方式二:直接处理mainform消息
mainForm.wndproc = function(hwnd,message,wParam,lParam){ select( message ) { case 0x18/*_WM_SHOWWINDOW*/ { winform.plus.hide = false; } case 0x5/*_WM_SIZE*/{ if( wParam == 0x1/*_SIZE_MINIMIZED*/ ) winform.plus.hide = true; else winform.plus.hide = false; } else{ } } }
这两个效果都一样.....
相当来说, 我更倾向于第二种办法, 简洁不出错.哈
登录后方可回帖