Blackberry Native SDK在调用窗口中捕获scrollview

时间:2015-06-30 14:56:31

标签: blackberry blackberry-10 blackberry-simulator

我正在BB10模拟器上编写一个简单的应用程序来捕获调用预览窗口的内容(其中包含电子邮件的可滚动视图)。我想捕获调用的窗口/电子邮件的整个滚动视图,而不仅仅是屏幕上的内容。在下面的代码中,我可以获得整个应用程序的窗口句柄和screen_read_window其内容,但是如何遍历调用窗口的控件并找到scrollview的句柄并捕获它?

InvokeRequest request;

  // Set the target app
  request.setTarget("sys.pim.uib.email.previewer");

  // Set the action that the target app should execute
  request.setAction("bb.action.VIEW");

  // Set the MIME type of the data
  request.setMimeType("message/rfc822");

  // Specify the location of the data
  request.setUri(QUrl("pim:message/rfc822:" + QString::number(accountId) + ":" + QString::number(messageId)));

  //InvokeTargetReply *reply =
  invokeManager->invoke(request);

  sleep(2);

    screen_context_t    screenshot_ctx = 0;
if (screen_create_context(&screenshot_ctx,
                          SCREEN_APPLICATION_CONTEXT) != 0) {
   return;
}

   screen_pixmap_t screen_pix;
   screen_buffer_t screenshot_buf;
   char *screenshot_ptr = NULL;
   int screenshot_stride = 0;

   int usage, format;
   int size[2];

   screen_create_pixmap(&screen_pix, screenshot_ctx);

   usage = SCREEN_USAGE_READ | SCREEN_USAGE_NATIVE;
   screen_set_pixmap_property_iv(screen_pix, SCREEN_PROPERTY_USAGE, &usage);

   format = SCREEN_FORMAT_RGBA8888;
   screen_set_pixmap_property_iv(screen_pix, SCREEN_PROPERTY_FORMAT, &format);

   size[0] = 768;
   size[1] = 1280;
   screen_set_pixmap_property_iv(screen_pix, SCREEN_PROPERTY_BUFFER_SIZE, size);

   screen_create_pixmap_buffer(screen_pix);
   screen_get_pixmap_property_pv(screen_pix, SCREEN_PROPERTY_RENDER_BUFFERS,
                                 (void**)&screenshot_buf);
   screen_get_buffer_property_pv(screenshot_buf, SCREEN_PROPERTY_POINTER,
                                 (void**)&screenshot_ptr);
   screen_get_buffer_property_iv(screenshot_buf, SCREEN_PROPERTY_STRIDE,
                                 &screenshot_stride);

   screen_read_window(Application::instance()->mainWindow()->handle(), screenshot_buf, 0, NULL ,0);

   QByteArray array;

   int nbytes = size[0] * size[1] * 4;
   write_bitmap_header(nbytes, array, size);

   for (int i = 0; i < size[1]; i++)
   {
       array.append(screenshot_ptr + i * screenshot_stride, size[0] * 4);
   }

   QImage image = QImage::fromData(array, "BMP");
   QFile outFile("shared/photos/temp1.jpeg");
   outFile.open(QIODevice::WriteOnly);
   image.save(&outFile, "JPEG");
//Close Email
invokeManager->closeChildCard();

0 个答案:

没有答案
相关问题