Конференция "WinAPI" » Как можно изменить значение clBtnFace? [D7, WinXP]
 
  • Still Swamp (28.02.08 22:40) [0]
    Как можно изменить значение clBtnFace? Или для любых иных значений цветов в рамках моего приложения.
  • Семеныч (28.02.08 23:42) [1]
    clBtnFace, clWinow и т.п. - это системные цвета. Они устанавливается юзером в настройках экрана (или предопределены в выбранной юзером цветовой схеме). Меняются либо никак, либо во всей системе разом (см. функцию SetSysColors в WinAPI и пример ниже).

    Если Вы считаете, что Ваша программа настолько замечательная, что имеет право использовать собственные цвета вместо тех, которые хочет юзер, то используйте для нее не системные, а явные цвета (clBlue, clGreen и т п.).

    Но прежде, чем это сделать, советую хорошо подумать. Большинство юзеров не любит, когда программа работает так, как хочется ей, а не юзеру. Поэтому такие программы обычно отправляются в корзину. Сразу и навсегда.

    Вы разве этого хотите? Видимо, нет. Ну а уж если совсем неймется, то вот пример из MSDN:

    // Window elements to change.
    int aiElements[3] =
     {COLOR_ACTIVEBORDER, COLOR_ACTIVECAPTION, COLOR_WINDOW};

    // Array of RGB values.
    DWORD aColors[3];

    // Define the new colors.

    aColors[0] = RGB(0x80, 0x00, 0x80);  // dark purple
    aColors[1] = RGB(0x00, 0x80, 0x80);  // dark cyan
    aColors[2] = RGB(0xC0, 0xC0, 0xC0);  // light gray

    // Set the window elements in aiElements to the colors
    // specified in aColors.

    SetSysColors(3, aiElements, aColors);

  • Still Swamp (02.03.08 00:02) [2]
    Спасибо за ответ.
    Я ни в коем разе не хочу менять цвета в системе. Более того, я сам очень не люблю когда софтина использует не системные цвета. Тем не менее, в данный момент у меня есть твердое пожелание заказчика изменить цвета во всем проекте на монохром, но крутить системные настройки цветов мне нет охоты.
    Использовать явные цвета - не вариант, так как цвет многих элементов изменить нельзя, и единственным методом борьбы в этом случае я вижу полную перерисовку на OnPaint.  Более дешевый вариант изменить сами clBtnFace, clWindow. Жаль если это невозможно.
 
Конференция "WinAPI" » Как можно изменить значение clBtnFace? [D7, WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]