//bmfHdr.bfSize - bi.biSizelmage + sizeof(bmfHdr)+bi.biSize; //Размер файла
bmfHdr.bfReservedl * bmfHdr.bfReserved2 « 0;
bmfHdr.bfOffBits - sizeof(bmfHdr) + bi.biSize; //Смещение до начала данных //Отправляем заголовок в файл
Wr1teFile(fh. (LPSTR)&bmfHdr. sizeof(bmfHdr). &dwWritten. NULL); //Записываем в файл загружаемый заголовок
WriteFile(fh. (LPSTR)&bi. sizeof(BITMAPINFOHEADER). &dwWritten. NULL); //Выделяем место в памяти для того, чтобы функция GetDIBitsO переслала //туда коды цвета в DIB-формате
char *1р - (char *) Global Alloc(GMEM_FIXED. bi.biSizelmage); int err - GetDIBits(hdc.
BitMap.0.(UINT)r.bottom.//Из карты BitMap строки с 0 no bi.biHeight
lp.(LPBITMAPINF0)&bi. //функция пересылает в массив 1р.
DIB_RGB_C0L0RS): //переводя в беспалитровый формат
WriteFileCfh. lp. bi.biSizelmage. &dwWritten. NULL); //Изображение записывается на диск, после чего освобождается память //и закрывается файл. GlobalFreeCGlobalHandlе(1р)): CloseHandle(fh); return 0; }
Легко заметить, что процедура сохранения битовой карты DIB-формата выглядела значительно компактнее.
Текстовые сообщения и шрифты
Для вывода текста разработчик может использовать функции TextOut (), DrawText (), ExtTextOutO, GrayStringO, TabbedTextOutO.
Функция TextOut (hDC, X, Y, Str. С) выводит одну строку текста, привязанную к позиции (X, Y). Параметры Str и С передают функции указатель на символьную строку и ее длину. Так как длина строки указывается явно, нет необходимости заканчивать строку нулевым байтом.
В качестве альтернативы TextOut () можно использовать функцию TabbedText-Out(hdc. X. Y. Str. С. iNumTabs. piTabStops. xTabOrigin).
Если строка символов содержит символы табуляции, то данная функция будет при выводе заменять их пробелами. Число пробелов определяется дополнительными параметрами. В параметре iNumTabs указывается число позиций табуляции, а в параметре piTabStop - массив позиций табуляции, заданных в пикселах. Например, если средняя ширина символа 8 пикселов и нужно установить позицию табуляции через каждые 5 символов, то этот список будет содержать числа 40, 80, 120 и далее в порядке возрастания. В параметре xTabOrigin передается логическая координата горизонтали точки отсчета позиций табуляции. Точка отсчета может совпадать с начальной позицией строки или отличаться от нее.