【问题标题】:C/C++ Allegro program causes Windows 7 to switch to Aero BasicC/C++ Allegro 程序导致 Windows 7 切换到 Aero Basic
【发布时间】:2010-03-28 00:55:45
【问题描述】:

我只是在试用 allegro 库,这是我目前得到的代码:

#include <allegro.h>

int main(int argc, char *argv[]) {
    allegro_init();  // initialize the allegro libraries
    install_keyboard(); // initialize keyboard functions
    
    set_color_depth(16); // set the color depth
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); // set up 640*480px window
    
    BITMAP *pic = NULL;
    pic = load_bitmap("C:/picture.bmp", NULL); // load the picture
    blit(pic, screen, 0, 0, 0, 0, 1000, 1000);

    readkey();
    destroy_bitmap(pic);
    return 0;
} 
END_OF_MAIN()

它工作正常,但是当我运行它时,当程序的窗口打开时,Windows 7 将主题从 Aero 更改为 Aero basic。如果你不确定我的意思,会弹出这个(我从 Google 得到的,这就是为什么它说 Vista 而不是 Windows 7):


(来源:suitedcowboys.com

  1. 为什么?
  2. 如何确保不会发生这种情况?

【问题讨论】:

  • 当你写“生产”代码时,一定要检查返回值,尤其是那些有充分理由失败的东西,比如load_bitmap
  • 是的,我知道。我永远不会发布这样的垃圾代码。 xD 谢谢。

标签: c windows winapi allegro


【解决方案1】:

Aero needs color set to 32 bit,但您将其设置为 16:

set_color_depth(16);

【讨论】:

  • 我喜欢简单的解决方案。 :) 感谢您的快速答复。这会影响程序的跨平台功能吗?根据我正在关注的教程,它确实如此,但它看起来确实很旧。
  • 当今哪些平台使用 16 位色深?大多数有 24 或 32 个。
  • jpyllman:您曾经通过远程连接使用过 RDP(终端服务)吗?我经常以 8 位颜色使用它。人们以较低的位深度运行虚拟机也很常见,因为硬件更容易模拟。
  • konforce 的回答显示了如何使用当前的颜色深度。我能补充的不多。
【解决方案2】:

除非您有充分的理由使用特定的颜色深度,否则请执行以下操作:

int cd = desktop_color_depth();
if (cd < 15) cd = 32;
set_color_depth(cd);

虽然今天通常不是问题,但许多较旧的视频卡仅支持 15/16 位和 24/32 位之一。

如果您因为使用调色板而需要使用 8 位色深,则只需使用 GFX_GDI 驱动程序即可获得最大兼容性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多