具有WS_EX_LAYERED窗口样式的Adobe Air

时间:2019-04-24 18:36:22

标签: c++ windows flash winapi air

我正在尝试在外部Adobe Air应用程序上设置WS_EX_LAYERED扩展窗口样式。 See this question,如果您想知道为什么。 我面临的问题是,一旦设置样式,窗口就会停止渲染。这是我的代码:

auto style = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, style | WS_EX_LAYERED);
// If I skip the next line, the window is suddenly white.
// With the next line, the image in the window freezes.
SetLayeredWindowAttributes(hwnd, 0, 255, LWA_ALPHA);

窗口继续正常运行(单击等),只是不再重绘(例如,调整大小时)。 窗口不是具有CS_OWNDCCS_CLASSDC样式。

有人可以告诉我原因吗?

1 个答案:

答案 0 :(得分:1)

您在应用程序描述符文件中设置的渲染模式是什么?我想除非您专门将其设置为通过CPU渲染,即让AIR使用GDI函数显示内容,否则您的方法将行不通。我认为默认情况下可能使用GPU加速,因此通过SetWindowLong设置样式可能会对此产生干扰。

如果您不确定如何更改渲染模式:

  • 找到应用程序的已安装文件夹(在“程序文件(x86)”下)
  • 输入“ META-INF \ AIR”子文件夹
  • 编辑“ application.xml”文件
  • 在“ initialWindow”部分中查找“ renderMode”(如果不存在,则将其添加..)并将其设置为“ cpu”
  • 保存此内容,然后重新启动AIR应用程序

请参阅AIR Descriptor File信息。