在Dock图标上画进度条

来源:互联网 发布:2017国二c语言题库 编辑:程序博客网 时间:2024/05/22 03:36

如果你用过Toast这个刻录软件,你会发现在刻录的时候,Dock图标上会有一个进度条,表示刻录的进度。如果你在用XCode,编译的时候图标上也会有一个进度条表示编译的进度。

其实在Dock图标上画进度条是很简单的事情,你只需要做如下工作即可:

要在Dock上显示图标,最简单的方法是使用NSApp的setApplicationIconImage:方法。我们只要创建一个NSImage,将应用程序的图标贴上,再在上面画上一个进度条,接着使用NSApp setApplicationIconImage:方法。

在需要更新进度的时候,重新画出相应长度的进度条,再重新设置一下应用程序的图标,就可以了。

大致的代码如下:

  1. -(void) updateDockTile
  2. {
  3.     NSImage*    dockIcon = [[[NSImage alloc] initWithSize: NSMakeSize(128,128)] autorelease];
  4.    
  5.    
  6.     [dockIcon lockFocus];
  7.         NSRect      box = { {44}{12016} };
  8.        
  9.         // App icon:
  10.         [[NSImage imageNamed: @"NSApplicationIcon"] dissolveToPoint: NSZeroPoint fraction: 1.0];
  11.        
  12.         // Track & Outline:
  13.         [[NSColor whiteColor] set];
  14.         [NSBezierPath fillRect: box];
  15.        
  16.         [[NSColor blackColor] set];
  17.         [NSBezierPath strokeRect: box];
  18.        
  19.         // State fill:
  20.         box = NSInsetRect( box, 11 );
  21.         [[NSColor knobColor] set];
  22.        
  23.         box.size.width = (box.size.width / (max -min)) * (current -min);
  24.        
  25.         NSImage*    prImg = [NSImage imageNamed: @"MiniProgressGradient"];
  26.         NSRect      picBox = { { 0,0 }{ 0,0 } };
  27.   if( prImg )
  28.   {
  29.    picBox.size = [prImg size];
  30.    [prImg drawInRect: box fromRect: picBox operation: NSCompositeCopy fraction: 1.0];
  31.   }
  32.   else
  33.    NSRectFill( box );
  34.     [dockIcon unlockFocus];
  35.    
  36.     [NSApp setApplicationIconImage: dockIcon];
  37. }

 

你可以在这里下载例子。源码作者是Uli Kusterer。

原创粉丝点击