Not displaying Mouse cursor

匿名 (未验证) 提交于 2019-12-03 08:54:24

问题:

I am developing Mac desktop application, where i am capturing the screen using

CGImageRef screenShot = CGWindowListCreateImage(CGRectInfinite, kCGWindowListOptionAll, kCGNullWindowID, kCGWindowImageDefault); 

and display the screen shot, The problem is, i am expecting it should show the mouse cursor too, but its not showing, do i need to enable any settings for that ?

I tried following before calling this function

CGDisplayShowCursor(kCGDirectMainDisplay);  CGAssociateMouseAndMouseCursorPosition(true); 

but it didn't work, When i checked using following

bool bCursor = CGCursorIsDrawnInFramebuffer(); /* This returns false */  bCursor = CGCursorIsVisible();  /* This returns true */ 

This values says, cursor was not drawn in the framebuffer ( ) but cursor is visible, I suppose only i need to do is, Draw cursor in the framebuffer, but how that is the challenge,

Thanks in advance.

回答1:

it seems, framebuffer doesn't give me the mouse cursor, so i am drawing my own, this is the code snippet , might be help full to you guys,

-(CGImageRef)appendMouseCursor:(CGImageRef)pSourceImage{     // get the cursor image      NSPoint mouseLoc;      mouseLoc = [NSEvent mouseLocation]; //get cur      NSLog(@"Mouse location is x=%d,y=%d",(int)mouseLoc.x,(int)mouseLoc.y);      // get the mouse image      NSImage *overlay    =   [[[NSCursor arrowCursor] image] copy];      NSLog(@"Mouse location is x=%d,y=%d cursor width = %d, cursor height = %d",(int)mouseLoc.x,(int)mouseLoc.y,(int)[overlay size].width,(int)[overlay size].height);      int x = (int)mouseLoc.x;     int y = (int)mouseLoc.y;     int w = (int)[overlay size].width;     int h = (int)[overlay size].height;     int org_x = x;     int org_y = y;      size_t height = CGImageGetHeight(pSourceImage);     size_t width =  CGImageGetWidth(pSourceImage);     int bytesPerRow = CGImageGetBytesPerRow(pSourceImage);      unsigned int * imgData = (unsigned int*)malloc(height*bytesPerRow);      // have the graphics context now,      CGRect bgBoundingBox = CGRectMake (0, 0, width,height);      CGContextRef context =  CGBitmapContextCreate(imgData, width,                                                    height,                                                    8, // 8 bits per component                                                    bytesPerRow,                                                    CGImageGetColorSpace(pSourceImage),                                                    CGImageGetBitmapInfo(pSourceImage));      // first draw the image      CGContextDrawImage(context,bgBoundingBox,pSourceImage);      // then mouse cursor      CGContextDrawImage(context,CGRectMake(0, 0, width,height),pSourceImage);      // then mouse cursor      CGContextDrawImage(context,CGRectMake(org_x, org_y, w,h),[overlay CGImageForProposedRect: NULL context: NULL hints: NULL] );       // assuming both the image has been drawn then create an Image Ref for that       CGImageRef pFinalImage = CGBitmapContextCreateImage(context);      CGContextRelease(context);      return pFinalImage; /* to be released by the caller */ } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!