tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: ギザギザのない、なめらか直線と円を描きたいです。
投稿日: 2023/08/25(Fri) 15:33
投稿者魔界の仮面弁士
> 魔界の仮面弁士 様、早速のご回答をありがとうございました。
> GdiPlus.basの出所の件ですが、記事No.15598で紹介されているサイトにありました。
これですか。
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?no=15598&reno=15597&oya=15597&mode=msgview&page=210

だとすれば、そのコンテンツの所有権はこのサイトでは無いので、
『本サイトよりダウンロードした』と表現するのは語弊があるかと…。

記載されてた vb-user.net は私が管理しているドメインであり、
そこに含まれている GdiPlus.bas は私自身が書いたものです。(^^;

定義については、昨日 No.16662 でお答えした、 gdiplusflat.h などを
VB6 向けに翻訳しただけです。


> このForm内の記述を上手に利用できないものかと様々に試してみるのですが、なかなか思うような線や円
> を描くことができません。やはりLine文、Circle文を適当に挿入するだけでは無理なのでしょうか?
Line や Circle や Print や PSet や PaintPicture といったメソッドは、
GDI (ジーディーアイ: Graphic Device Interface) 系の API による実装であり、
GDI+ (ジーディーアイ・プラス) とはまったくの別物です。

GDI は、それこそ 16bit 版の Windows の時代から存在していましたが、
GDI+ は Windows XP で標準搭載されたものです。(Win98/98SE/NT4SP6/2000 にも導入可能)


たとえば VB6 では、円弧や扇形を描くために Circle メソッドを呼び出しますが、
これは内部的には、 GDI API の Ellipse 関数が呼び出されています。
https://www.vbforums.com/showthread.php?858443-RESOLVED-replace-Circle-method-with-API
https://learn.microsoft.com/ja-jp/windows/win32/api/wingdi/nf-wingdi-ellipse


一方、GDI+ でそれらを描く場合には、DrawEllipse や DrawArc や DrawPie を用います。
https://dobon.net/vb/dotnet/graphics/drawrectangle.html
これらを、GDI+ Flat API に置き換える場合は、
 GdipDrawArc 関数
 GdipDrawArcI 関数
 GdipDrawPie 関数
 GdipDrawPieI 関数
 GdipDrawEllipse 関数
 GdipDrawEllipseI 関数
などを使います。
末尾が I のものは整数座標系、I 無しは小数座標系です。

また、ベジエ曲線やカーディナルスプラインも扱えます。
https://dobon.net/vb/dotnet/graphics/drawcurve.html


> 今回は、私にとってかなりハードルの高い内容になってしまいました。
サンプルを書くにしても、範囲が広すぎて何を示せば良いのか…という状態です。


改めて、超えるべきハードルを並べておきます。

・"GDI+ Flat API" は、C++ ラッパーライブラリから内部的に呼ばれるためのものであり、
 C++ や VB6 からの直接利用を保証していませんし、サポートもされていません。
 https://learn.microsoft.com/ja-jp/windows/win32/gdiplus/-gdiplus-flatapi-flat

・GDI+ Flat API を使うのであれば、その前提となる GDI+ に関する知識が必須となります。
 まだ GDI+ に触れたことが無いのであれば、先に VB.NET / C# / C++ などといった、
 GDI+ 用のラッパーライブラリーでの呼び出し方を学んでおくべきです。

・GDI+ のオブジェクトの使い方が分かったら、先に紹介した資料群を用いて、
 それらを VB6 から呼び出せる Flat API の宣言へ、自力で書き換えていきます。
 そのためにも、Windows SDK の入手が必要になってきますし、
 C/C++ のヘッダーファイルを VB6 向けに翻訳できるだけの基礎知識も要求されます。

・API 宣言や定数については、第三者が作った *.bas ファイルで代用できるとしても、
 それらを組み合わせて呼び出していくには、どちらにしても GDI+ に関する知識が必要ですね。
 https://learn.microsoft.com/ja-jp/windows/win32/gdiplus/-gdiplus-about-gdi--about


ざっと検索してみたら、 Visual Basic 向けでは無い物の、
PowerBASIC 向けの GDI+ Flat API のリファレンスがありました。
そのまま直接使えるものでは無いにしても、参考にはなるかもしれません。
http://www.jose.it-berater.org/gdiplus/iframe/index.htm

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。