現在、WinXP+VB6.0を利用し、
グラフを描画するユーザーコントロールを製作中です。
X座標を指定して線を引きたいだけなのですが、
MoveEx関数で指定すると、X座標が全く移動せず
CurrentXプロパティを利用しても、罫線が引かれていないようです。
以下はそのソースです、根本的に考え方が違うのでしょうか??
Private Sub Picture1_Click()
Dim lngI As Long
Dim rc As Long
Dim hPen As Long
Dim hOldPen As Long
Dim tagP As tagPoint
Dim tmpPoint As Long
Form1.Picture1.AutoRedraw = False
Picture1.Cls
Picture1.ScaleWidth = 10000
Picture1.ScaleHeight = 100
hPen = CreatePen(PS_SOLID, 1, vbBlack)
hOldPen = SelectObject(Picture1.hdc, hPen)
'補助目盛線
For lngI = -5000 To 5000 Step 1000
'目盛線
'***** ケース1 *****
' Picture1.CurrentX = lngI + 5000
' Picture1.CurrentY = 0
'*** 症状…X位置は取得できるが、線が表示されない。***
'***** ケース2 *****
rc = MoveToEx(Picture1.hdc, lngI + 5000, 0, tagP)
'*** 症状…X軸さえ取得できない。
rc = LineTo(Picture1.hdc, lngI + 5000, 20)
'目盛文字
Picture1.CurrentX = Picture1.CurrentX - Picture1.TextWidth(lngI) / 2
If Picture1.CurrentX < 0 Then Picture1.CurrentX = 0
If Picture1.CurrentX > Picture1.ScaleWidth - Picture1.TextWidth(lngI) Then
Picture1.CurrentX = Picture1.ScaleWidth - Picture1.TextWidth(lngI)
End If
Picture1.Print CStr(lngI)
Next lngI
rc = DeleteObject(hPen)
End Sub
*APIの宣言は省略してあります。
> 根本的に考え方が違うのでしょうか??
ですね。
(考え違い、その1)VBで指定した設定は、APIには反映されません。
=>APIで描画するなら、全ての設定はAPIで行ってください。
(考え違い、その2)APIの座標系はPixcel固定です。
=>座標系をPixcelで考え直してください。
#5000(Pixcel)だと、、
#横1280サイズのディスプレイで4画面分になってしまいますね。
良く考えたら、何故APIを使っているんでしょう???
VB6の「Line メソッド」で線を引くのでは駄目な理由でもあるんでしょうか?
大吉末吉さん、ありがとうございます。
教えていただいた事を踏まえて、調べなおします。
APIを使ってる理由ですが、条件によって線種(実線・破線)の指定をしたかったからです。
上記のソースは、上手くいかなかった部分だけを抜き出したのですが、
実際にはCreatePenなど使って、作成しています。
ツイート | ![]() |