ひきつづき、.NET Compact Framework 1.0SP3

「はれ」を変換すると「貼れ」が第一候補になってる会社のPCに「何を貼れっちゅーねん」と悩まされつつも、もう少し、.NET Compact Frameworkについて調査を続けています。
まず、GDI+での描画の基礎となるGraphicsで使用可能なDraw・Fill系メソッドは、
DrawEllipse
DrawIcon
DrawImage
DrawLine
DrawPolygon
DrawRectangle
DrawString
FillEllipse
FillPolygon
FillRectangle
FillRegion
となっており、FreeNote.NETで使っているDrawBezierなどはありません。


ただ、ベジェ曲線自体は、
f(x) = (1-t)^3*x1 + 3*(1-t)^2*t*x2 + 3*(1-t)*t^2*x3 + t^3*x4
f(y) = (1-t)^3*y1 + 3*(1-t)^2*t*y2 + 3*(1-t)*t^2*y3 + t^3*y4
0≦t≦1
で、(tをどう区切るかによって滑らかさに差が出るものの)通過点を求めることができるためDrawPolygonでどうにかなるレベルではあります。
#実際、QT/Eでもベジェを描く命令は省かれていますが、通過点を求める関数が用意されています。


問題はPenがWidthプロパティを持たない点で、FreeNoteQtと同等機能を実現するためには少なくとも、
DrawEllipse
DrawPolygon
は改造が必要…ということになります。
ここを実装するためにはどうするか…というのは非常に悩むのですが、どうやらAPIそのものには、太さ指定や、破線の指定があるようですので、アンマネージドコードに頼るというのが一番の早道のようです。


しかし、せっかく.NET Frameworkを使うのに、(真偽のほどは実験君してみないとダメですが)APIがその機能を持っているにも関わらず、Pen.Widthが実装されていないことが原因で、Drawingをアンマネージドな実装で再構築しなくてはならないというのは、なんだかとっても矛盾してるなぁ…というのが正直な感想です。


なんとかならんもんですかね?ホント。