x座標を正確に取得するには?

解決


会社合併  2007-03-24 04:58:29  No: 135862

現在、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の宣言は省略してあります。


大吉末吉  2007-03-24 05:30:20  No: 135863

> 根本的に考え方が違うのでしょうか??

ですね。

(考え違い、その1)VBで指定した設定は、APIには反映されません。
  =>APIで描画するなら、全ての設定はAPIで行ってください。
(考え違い、その2)APIの座標系はPixcel固定です。
  =>座標系をPixcelで考え直してください。

#5000(Pixcel)だと、、
#横1280サイズのディスプレイで4画面分になってしまいますね。


大吉末吉  2007-03-24 05:56:51  No: 135864

良く考えたら、何故APIを使っているんでしょう???

VB6の「Line メソッド」で線を引くのでは駄目な理由でもあるんでしょうか?


会社合併  2007-03-26 18:12:39  No: 135865

大吉末吉さん、ありがとうございます。
教えていただいた事を踏まえて、調べなおします。
APIを使ってる理由ですが、条件によって線種(実線・破線)の指定をしたかったからです。
上記のソースは、上手くいかなかった部分だけを抜き出したのですが、
実際にはCreatePenなど使って、作成しています。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加