C # Графика DrawString VerticalDirection начинаются снизу - PullRequest
0 голосов
/ 23 января 2012

Мне нужно написать с использованием Graphics.DrawString в методе печати документа, строку с вертикальным направлением, и у меня есть ограничение на ширину строки, проблема в том, что строка записывается слева направо, и мне нужно, чтобы первыйлиния справа я использую метод ниже

SizeF s = e.Graphics.MeasureString(str1, po.defaultF,la1, StringFormat.GenericTypographic);
RectangleF rec=new RectangleF();
StringFormat strF=new StringFormat();
strF.FormatFlags=StringFormatFlags.DirectionVertical;
rec.Height=s.Width+15;
rec.Width=s.Height+5;
rec.X =0;
rec.Y=0;
e.Graphics.DrawString(str1, po.defaultF, Brushes.Black, rec, strF);

Ответы [ 3 ]

3 голосов
/ 23 января 2012

Как прокомментировал Ганс, RotateTransform можно использовать для переворачивания строки:

strF.Alignment = StringAlignment.Far;
e.Graphics.TranslateTransform(rec.Right, rec.Bottom);
e.Graphics.RotateTransform(180);
e.Graphics.DrawString(str1, po.defaultF, Brushes.Black, rec, strF);

TranslateTransform изменяет начало вашей системы координат в нижний правый уголвашего rec прямоугольника, затем RotateTransform переворачивает его на 180 градусов, а затем выравнивание строки изменяется на Дальнее, чтобы поместить строку в то же место, где рисовала исходная строка.

0 голосов
/ 22 февраля 2012

Решение - использовать RotateTransform (90) и без использования StringFormatFlags.DirectionVertical вот код мира:

Rectangle rec = new Rectangle();
rec.Height = 2 * po.medF.Height;
rec.Width=100;
rec.X = 0;
rec.Y = 0;
SizeF s;
String str = "your Text";
StringFormat strf = new StringFormat();
strf.Alignment = StringAlignment.Center;    
rec.X = 0;
rec.Y = 0;
e.Graphics.TranslateTransform(X1, Y1);
e.Graphics.RotateTransform(90);
e.Graphics.DrawString(str, po.medF, Brushes.Black, rec, strf);
e.Graphics.ResetTransform();
0 голосов
/ 23 января 2012

Вы должны посмотреть на этот пример:

http://msdn.microsoft.com/en-us/library/aa287525%28v=vs.71%29.aspx

Он должен делать именно то, что вы просите.

EDIT:

Возможно, глупый способ рисования справа налево:

SizeF s = e.Graphics.MeasureString(str1, po.defaultF,la1, 
StringFormat.GenericTypographic);
RectangleF rec=new RectangleF();
StringFormat strF=new StringFormat();
strF.FormatFlags=StringFormatFlags.DirectionVertical;
rec.Height=s.Width+15;
rec.Width=s.Height+5;
rec.X =0;
rec.Y=0;
string[] strRightToLeft = str1.Split('\n');
Array.Reverse(strRightToLeft);
e.Graphics.DrawString(String.Concat(str1), po.defaultF, Brushes.Black, rec, strF);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...