Доброго времени суток.
Делаю метод, выводящий график на основное окно программы. Заливаю фон цветом Graph1.BkColor, когда копирую картинку из hMemDC на экран, заливка появляется, но почему-то другого цвета. Graph1.BkColor=RGB(110,210,110);, а здесь появляется белый с зелеными точками (при том, что кисть делаю solid). когда пытаюсь нарисовать линию, она рисуется тоже другим цветом (рисую светло-серую, а она черная).
Подскажите плз, в чем ошибка? (в файле, если он прикрепился, снимок графика, зеленый обод по краям, это Graph1.BkColor, посередине заливка).
Код | void CGraphWindow::PaintGraph2(HWND hWnd){ HDC hdc=GetDC(hWnd); //получаю указатель на окно приложения hMemDC=::CreateCompatibleDC (hdc); //создаю совместимый контекст устройства HBITMAP bmp, oldbmp; bmp=::CreateCompatibleBitmap (hMemDC, Graph1.Width - 2*Graph1.Frame.Width, Graph1.Heigh - 2*Graph1.Frame.Width); //создаю карту нужного размера oldbmp = (HBITMAP)::SelectObject (hMemDC, bmp); //прицепляю битовую карту к совместимому контексту
//вывожу фон графика RECT GrRect; GrRect.left=0; GrRect.right=Graph1.Width - 2*Graph1.Frame.Width-1; GrRect.top=0; GrRect.bottom=Graph1.Heigh - 2*Graph1.Frame.Width-1; HBRUSH hBrush=CreateSolidBrush(Graph1.BkColor); FillRect(hMemDC, &GrRect, (HBRUSH) hBrush); DeleteObject(hBrush); //рисую линию, должна быть светло-серой, рисуется черной HPEN pen = CreatePen(PS_SOLID,2,RGB(220,220,220)); SelectObject(hMemDC,pen); MoveToEx(hMemDC,10,10,NULL); LineTo(hMemDC,100,100); DeleteObject(pen);
::BitBlt (hdc, Graph1.x0+Graph1.Frame.Width, Graph1.y0+Graph1.Frame.Width, Graph1.Width - 2*Graph1.Frame.Width, Graph1.Heigh - 2*Graph1.Frame.Width, hMemDC, 0, 0, SRCCOPY); //переношу картинку из памяти на экран
}
|
Добавлено @ 15:29 При создании битовой карты указал оригинал hdc, а не совместимый hMemDC и всё заработало правильно.
Код | bmp=::CreateCompatibleBitmap (hdc, Graph1.Width - 2*Graph1.Frame.Width, Graph1.Heigh - 2*Graph1.Frame.Width); //создаю карту нужного размера
|
Вопрос снимаю (можно сказать генеральский эффект - с обеда мучился, а как на форум выложил, сразу ответ нашел).  |