DOBON.NET どぼん!のVB道掲示板(プログラム)過去ログ

.netにてDrawmode=7 について。

こんにちは、VBの大ファンです。この度.netへの移行でとても苦戦しています。
市販本を沢山購入したのですが、Drawmode=7 相当に関する事例に
辿り着けません。
背景に影響を与えずに<範囲指定>などの矩形をマウスを引いて描画する
方法を知っている方、どうかご教授願えないでしょうか。
>こんにちは、VBの大ファンです。この度.netへの移行でとても苦戦しています。
>市販本を沢山購入したのですが、Drawmode=7 相当に関する事例に
>辿り着けません。
>背景に影響を与えずに<範囲指定>などの矩形をマウスを引いて描画する
>方法を知っている方、どうかご教授願えないでしょうか。

DrawMode=7の7がいったいなんだったのか覚えていないので、正確な解答は出来ませんが、DrawMode=7に相当するものがなくなったのではなく、DrawModeそのものがなくなったのではないでしょうか。実際、ヘルプで調べてみるとVB6のDrawMode プロパティに代わるものはSystem.Drawing 名前空間のPen.Color プロパティと書いてあります。

ms-help://MS.VSCC/MS.MSDNVS.1041/vbcon/html/vbcongraphicschangesinvisualbasicnet.htm

そもそも、アップグレードウィザードを使うとどのように変更されるのでしょうか?試してみましたか?
>>こんにちは、VBの大ファンです。この度.netへの移行でとても苦戦しています。
>>市販本を沢山購入したのですが、Drawmode=7 相当に関する事例に
>>辿り着けません。
>>背景に影響を与えずに<範囲指定>などの矩形をマウスを引いて描画する
>>方法を知っている方、どうかご教授願えないでしょうか。
>
>DrawMode=7の7がいったいなんだったのか覚えていないので、正確な解答は出来ませんが、DrawMode=7に相当するものがなくなったのではなく、DrawModeそのものがなくなったのではないでしょうか。実際、ヘルプで調べてみるとVB6のDrawMode プロパティに代わるものはSystem.Drawing 名前空間のPen.Color プロパティと書いてあります。
>
>ms-help://MS.VSCC/MS.MSDNVS.1041/vbcon/html/vbcongraphicschangesinvisualbasicnet.htm
>
>そもそも、アップグレードウィザードを使うとどのように変更されるのでしょうか?試してみましたか?

はたまた、.NETもよく知らないのに、お邪魔させて頂きます。
私もVBは相当長く使い込んでいたので、DrawModeは少し記憶に残っています。

どぼんさんの説明で「7」の意味はもう忘れてしまいましたが、GDI描画ツールのPenオブジェクトに
関連するものだということは思い出しました。
VB的に言えば、グラフィック描画メソッドを実行するとき、線や図形の枠線の描かれ方を制御する
プロパティですよね、確か・・・。
他に、DrawStyle, ForeColorなども、線描画を制御していましたね。
私が思うには、Pen.Colorはむしろ、ForeColorに替るもののような気もするのですが、
ヘルプにそう書いてあったということは、何か関係があるのかもしれません。
でも、私の記憶だと、DrawModeに設定できる列挙値には、XORPenとか? 元々の背景に対して
どのような演算で色を合成するのかを決めるプロパティだった気がします。

で、セリカさんの質問なんですが、
>>背景に影響を与えずに<範囲指定>などの矩形をマウスを引いて描画する
>>方法を知っている方、どうかご教授願えないでしょうか。
とあるので、XORPenで二回同じ図形を描画すると(ネガとポジを入れ替えるみたいに)背景が復元できる
ことを利用したいという意味なのでしょうか?

もしそうだとすると、私も、MSDN Online(US)で調べてみたらところ、
MSDN Home > MSDN Library > .NET Development > .NET Framework SDK > Product Documentation > Reference > Class Library > System.Drawing
に Brush と Pen というクラスを見つけました。
.NETでもMFC同様、ちゃんとGDIオブジェクトに相当するクラスがあるんですね。(当り前かぁ、Windowsなんだから…)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDrawing.asp

ここら辺を入念に調べるしかないんでしょうね。私も探してみましたが、、、見つかりません。
Pen.PenTypeとか、あるいは、やっぱりPen.Colorなのか・・・。

実は、Win32に立ち返って、そもそもどうやってXOR描画を実現していたか一生懸命思い出しながら
GDIを調べていたら、SetROP2()というAPIを使っていたことをようやく思い出しました。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pantdraw_9gdu.asp

だとすると、PenもBrushも全然関係ないということ?
果たして、.NETでは・・・もしかして、これが正解?
MSDN Home > MSDN Library > .NET Development > .NET Framework SDK > Product Documentation > Reference > Class Library > System.Drawing.Drawing2D
にCombineMode Enumerationというのがありますよ。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawingdrawing2dcombinemodeclasstopic.asp
前回はVB6のDrawMode プロパティに代わるものがPen.Color プロパティであることをヘルプのページを紹介して説明しましたが、多分同じものが次のURLにあります。

http://www.microsoft.com/japan/msdn/library/ja/vbcon/html/vbcongraphicschangesinvisualbasicnet.asp

さて、Kamaliさんがいろいろ調べてくださったのでその後私も調べてみたのですが、参考になりそうなページがいくつか見つかりました。

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=173&lngWId=10
http://www.dotnet247.com/247reference/msgs/6/30898.aspx
http://www.dotnet247.com/247reference/msgs/6/30777.aspx
http://www.dotnet247.com/247reference/msgs/9/45164.aspx

これらを読んでみると結局は「自分でどうにかするしかない」ということらしいです。私はよく知りませんが、KamaliさんがおっしゃるAPIが使えるのであればそれを使った方がむしろ楽かもしれませんね。
ドボンさん、親切なアドバイスをありがとうございます。
自分の努力が解決への最短距離とは考えつつも、つい甘えてしまい
誠に申し訳なく思っています。
アップグレードウィザードの重要性を軽視し、アカデミックパックを購入して
しまった報いを受けているようです。
市販本に頼るより、アップグレードウィザードの付属しているパックを
別途購入した方が良いのかもしれません。的確なアドバイスをありがとうございました。
>アップグレードウィザードの重要性を軽視し、アカデミックパックを購入して
>しまった報いを受けているようです。

アップグレードウィザードでDrawModeがどのように変換されるのかやってみました。結果、アップグレードできませんでした。アップグレードウィザードというやつはまったく使えません。アカデミックパックにアップグレードウィザードが付いていないというのは知りませんでしたが、買い換える必要はないと思います。

結局はやはりDrawModeに代わるものは自分で作るしかなさそうです。
>アップグレードウィザードでDrawModeがどのように変換されるのかやってみました。結果、アップグレードできませんでした。アップグレードウィザードというやつはまったく使えません。アカデミックパックにアップグレードウィザードが付いていないというのは知りませんでしたが、買い換える必要はないと思います。
>
>結局はやはりDrawModeに代わるものは自分で作るしかなさそうです。

ご指導ありがとうございます。
CADを作っているのですが、ワールド座標を使うため、軌跡にはDrawModeを、
ズームにはScaleを使っていました。
もしかしたら、Scaleも無くなっているのかもしれません。
制作中のCADソフトは.netへ移し替えるべきではないのかもしれません。
この度は貴重な情報を頂き大変感謝しております。本当にありがとうございした。

DOBON.NET | プログラミング道 | プログラミング掲示板