Печать dataGridView из C++/CLI в Visual Studio


Давайте научимся создавать картинку для печати из dataGridView и отправлять её на печать с выбором принтера на C++/CLI в Visual Studio 2015. На самом деле это все несложно, но пришлось повозиться, чтобы найти полностью рабочий вариант, устраивающий меня.

Итак, кидаем на форму два элемента. printDocument1. Его обработчик

private: System::Void printDocument1_PrintPage(System::Object^  sender, System::Drawing::Printing::PrintPageEventArgs^  e) {
	int hey = 0;
	for (int i = 0; i < (dataGridView1->Rows->Count); i++) {
		hey = hey + dataGridView1->Rows[i]->Height;
	}
	Bitmap^ bmp = gcnew Bitmap(dataGridView1->Size.Width + 10, hey + 10);//немного прибавляем размер
	dataGridView1->DrawToBitmap(bmp, dataGridView1->Bounds);
	String^ drawString = "Какая-то строка";
	System::Drawing::Font^ drawFont = gcnew System::Drawing::Font("Arial", 16);//шрифт
	SolidBrush^ drawBrush = gcnew SolidBrush(Color::Black);//цвет черный
	float x = 100.0F;
	float y = 100.0F;
	float width = 400.0F;//ширина строки
	float height = 50.0F;//высота
	RectangleF drawRect = RectangleF(x, y, width, height);
	e->Graphics->DrawString(drawString, drawFont, drawBrush, drawRect);
	e->Graphics->DrawImage(bmp, 0, 0);
}
Сначала мы в цикле определяем высоту всех ячеек датагрида, затем создаем битмап из него, далее добавляем прямоугольник с надписью, а также в объект дорисовываем картинку. Если надо, например, повернуть картинку, то это делается вот так:

bmp->RotateFlip(RotateFlipType::Rotate90FlipNone);
Но вообще, так как мы вызываем стандартное диалоговое окно печати, то ориентацию лучше задавать в нем. Например, вот печать в Foxit (pdf файл):



И на форму кидаем кнопку, с обработчиком её по клику:

private: System::Void button8_Click(System::Object^  sender, System::EventArgs^  e) {
PrintDialog^ printDialog1 = gcnew PrintDialog();
printDialog1->Document = printDocument1;
if (printDialog1->ShowDialog() == Windows::Forms::DialogResult::OK)
printDocument1->Print();	
}
Здесь мы создаем объект класса PrintDialog, привязываем его к нашему документу, и если нажата кнопка «Ок», то отправляем его на печать.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си плюс плюс, Visual Studio




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 35. Коллекция ArrayList C#: часть первая
Несколько полезных для отладки функций PHP
С++, IE и автоматическая авторизация BASIC Auth