打印本文 打印本文 关闭窗口 关闭窗口
Windows通知栏图标高级编程概述
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4066  更新时间:2009/4/23 18:34:16  文章录入:mintao  责任编辑:mintao
bsp;    //设置时钟超时响应过程。

  end;

……

end; //end of Create

 

C.   接下来在前述重载的隐藏窗口消息处理过程中响应不同消息来设置上述两个变量的状态。

 

procedure TEoCSysTray.WndProc(var Msg: TMessage);

begin

……

  case Msg.LParam of

    WM_XBUTTONDOWN:

begin

……

FMouseDblClicked := False;//双击尚未发生

FMouseUp := False;       //鼠标尚未松开

FTimer.Enabled := False; //结束上次延时

FTimer.Enabled := True;  //开始延时

end;

    WM_XBUTTONUP:

FMouseUp := True;        //设置鼠标已经松开,便于Timer检查

    WM_XBUTTONDBLCLk:

       begin

FMouseDblClicked := True;       //设置双击已经发生的标志

触发双击事件;

       end;

  else

    Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);

  end;

end; //end of WndProc

 

D.   在延时处理程序中判断鼠标状态,触发单击事件。

procedure TEoCSysTray.OnButtonTimer(Sender: TObject);

begin

  FTimer.Enabled := False;

  if (not FMouseDblClicked) and FMouseUp then //双击尚未发生且鼠标已松开

  begin

    触发单击事件;

    触发MouseUp事件;

  end;

end; //end of procedure OnButtonTimer

 

如此一来,单击事件就表现为WM_XBUTTONDOWN, Click, WM_XBUTTONUP,而双击事件则表现为WM_XBUTTONDOWN, WM_XBUTTONDBLCLK(过滤掉了两条MW_XBUTTONUP消息),从而避免了双击事件发生时触发单击事件。

 

5 总结

关于通知栏图标的编程还有很多话题,比如动态切换图标、响应MouseLeaveMouseEnter事件等,在实际中都有应用,难以面面俱到。

上一页  [1] [2] [3] [4] [5] 

打印本文 打印本文 关闭窗口 关闭窗口