Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 12.02.2008, 11:20   #1
EdNovice
Пользователь
 
Регистрация: 13.04.2007
Сообщений: 65
По умолчанию SetBkColor не меняет цвет фона

есть код:
Код:
procedure ShowGrid(ADC : HDC; side : integer);
var
  DCGrid : HDC;
  BMGrid : BITMAPINFO;
  OldDIBGrid, DIBGrid : HBITMAP;
  ppvBits : pointer;
  OldPen, Pen : HPen;
  OldBkCLRREF, BkCLRREF : COLORREF;
  OldBkMode, BkMode : integer;
begin
  DCGrid := CreateCompatibleDC(ADC);
  with BMGrid.bmiHeader do
  begin
    biSize := 40;
    biWidth := side;
    biHeight := side;
    biPlanes := 1;
    biBitCount := 32;
    biCompression := BI_RGB;
    biSizeImage := (((biWidth * biBitCount) + 31) div 32) * 4 * biHeight;
    biXPelsPerMeter := 0;
    biYPelsPerMeter := 0;
    biClrUsed := 0;
    biClrImportant := 0;
  end;
  DIBGrid := CreateDIBSection(DCGrid, BMGrid, DIB_RGB_COLORS, ppvBits, 0, 0);
  OldDIBGrid := SelectObject(DCGrid, DIBGrid);
  // Установить режим фона
  BkMode := OPAQUE;
  OldBkMode := SetBkMode(DCGrid, BkMode);
  // Установить цвет фона
  BkCLRREF := RGB(255, 0, 0);
  OldBkCLRREF := SetBkColor(DCGrid, BkCLRREF);
  // Создаем новый Pen
  Pen := CreatePen(PS_SOLID, 1, $FF0000);
  OldPen := SelectObject(DCGrid, Pen);
  .
.......Здесь рисую сетку
  .
  BitBlt(ADC, 0, 0, side, side, DCGrid, 0, 0, SRCCOPY);
  SelectObject(DCGrid, OldPen);
  DeleteObject(Pen);
  SetBkColor(DCGrid, OldBkCLRREF);
  SetBkMode(DCGrid, OldBkMode);
  SelectObject(DCGrid, OldDIBGrid);
  DeleteDC(DCGrid);
  DeleteObject(DIBGrid);
end;
OldBkCLRREF := SetBkColor(DCGrid, BkCLRREF) - возвращает черный цвет($FFFFFF), но цвет фона не меняет.

Последний раз редактировалось rpy3uH; 12.02.2008 в 18:54.
EdNovice вне форума Ответить с цитированием
Старый 18.02.2008, 07:14   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Как-то пропустил этот вопрос....

SetBkColor влияет только на подложку текста и пропуски в штриховых линиях.
B_N вне форума Ответить с цитированием
Старый 18.02.2008, 10:53   #3
EdNovice
Пользователь
 
Регистрация: 13.04.2007
Сообщений: 65
По умолчанию

А как еще можно поменять цвет фона кроме FillRect?
EdNovice вне форума Ответить с цитированием
Старый 18.02.2008, 23:59   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от EdNovice Посмотреть сообщение
А как еще можно поменять цвет фона кроме FillRect?
FillRect - это, пожалуй, лучший способ в данном случае. Чем он Вас не устраивает? Если переживаете за возню с кисточками, то это лишнее, можно писать, например так:
Код:
FillRect(hDC, &rcRect, (HBRUSH)(COLOR_WINDOW+1));
или так:
Код:
FillRect(hDC, &rcRect, GetSysColorBrush(COLOR_WINDOW));
а можно даже так:
Код:
FillRect(hDC, &rcRect, (HBRUSH)GetClassLong(hWnd, GCL_HBRBACKGROUND));
Во всех этих случаях новые кисточки не создаются, соответственно и не нужно их удалять.
B_N вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разный цвет фона в таблице (php) Lonix PHP 2 04.10.2008 20:39
Растягивание фона psywalker HTML и CSS 7 19.06.2008 17:08
Цвет фона кнопки romets Win Api 10 23.01.2008 17:13
Цифровые часы без фона Roof Помощь студентам 13 22.07.2007 11:18
Стили ячеек. Цвет фона, шрифт: размер, начертание .. Virtson Microsoft Office Excel 3 10.03.2007 16:19


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS