Программа C / C ++ Allegro заставляет Windows 7 переключаться на Aero Basic - PullRequest
2 голосов
/ 28 марта 2010

Я просто пробую библиотеку 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):

http://www.suitedcowboys.com/wp-content/uploads/2007/01/010607_0906_HelloVistai28.png http://www.suitedcowboys.com/wp-content/uploads/2007/01/010607_0906_HelloVistai28.png#

1) Почему? 2) Как я могу гарантировать, что этого не произойдет?

Ответы [ 2 ]

5 голосов
/ 28 марта 2010

Для Aero необходимо установить цвет на 32 бита , но вы устанавливаете его на 16:

set_color_depth(16);

2 голосов
/ 28 марта 2010

Если у вас нет веских причин использовать определенную глубину цвета, сделайте следующее:

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

Хотя сегодня это, как правило, не проблема, многие старые видеокарты поддерживают только одну из 15/16 бит и одну из 24/32 бит.

Если вам нужно использовать 8-битную глубину цвета, потому что вы используете палитру, то просто используйте драйвер GFX_GDI для максимальной совместимости.

...