搜索
查看: 4925|回复: 3

改动库win.util.popup,使之从右下角向左滑出,且不影响主窗口

  [复制链接]

3

主题

26

帖子

234

积分

荣誉会员

Rank: 8Rank: 8

积分
234
发表于 2013-11-6 20:36:14 | 显示全部楼层 |阅读模式
最近在用百度杀毒,发现其通知窗口与其他大多数软件(如qq等)不同,是在右下角从右向左滑出,而不是从右下角从下往上滑出。
标准库win.util.popup实现的是在右下角从下向上滑出,今新建用户库win.util.popup2,使通知窗口在右下角从右侧滑出。

另外,原标准库win.util.popup有一个小问题,就是在通知窗滑出的过程中,通知窗不断地被激活,使得主窗口的某些操作不能进行(如弹出菜单,主窗口失去焦点,菜单立即消失,再次点击菜单亦然,直到通知窗口完全滑出,给操作带来不便。)

查找库win.util.popup中的
0x8/*_SWP_NOREDRAW*/
改为
0x10/*_SWP_NOACTIVATE*/
即可。共两处,约在第16行与第72行。

改动后的用户库:源码保存为win.util.popup2.aardio,作为用户库导入。

  1. //popup2 屏幕右下通知窗口(从右侧滑出)
  2. namespace win.util;

  3. class popup2 {

  4.     ctor( winform,delayClose=10000,clickClose=true,marginRight=25,tick=3,step=3 ){
  5.         this = winform;  
  6.         var x,y,width,height = this.getPos();
  7.         var sRight = ::GetSystemMetrics(0x10/*_SM_CXFULLSCREEN*/);
  8.         var sBottom = ::GetSystemMetrics(0x11/*_SM_CYFULLSCREEN*/) + ::GetSystemMetrics(0x4/*_SM_CYCAPTION窗口标题的高度*/) ;
  9.         leftMost = sRight - marginRight - width;
  10.         x = sRight;
  11.         width_ = width;
  12.         y = sBottom -  height;
  13.         winform.setPos(x,y,0,height,,0x10/*_SWP_NOACTIVATE*/);
  14.       
  15.         var tickstart;
  16.         var remaintime;
  17.         var remaintime_pre;
  18.         
  19.         var waitClick = function(){
  20.             this.capture = true;
  21.             this.wndproc = function(hwnd,message,wParam,lParam){
  22.                                 if( message == 0x201/*_WM_LBUTTONDOWN*/ ){  
  23.                                         var x,y = ..win.getMessagePos(lParam);
  24.