Private Sub Form_Load()
With Picture1
.Picture = LoadPicture(FILE_PATH)
.AutoRedraw = True
.AutoSize = True
.ScaleMode = 3
End With
With Picture2
.Width = Picture1.Width
.Height = Picture1.Height
End With
End Sub
Private Sub Command1_Click()
With Picture2
.Width = Picture1.Width * 2
.Height = Picture1.Height * 2
End With
StretchBlt Picture2.hdc, 0, 0, Picture2.Width, Picture2.Height, _
Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, SRCCOPY
End Sub
APIは宣言済み
picture2の画像がちゃんと表示されません
このような状況の場合どのように対処すればいいのか私にはさっぱりわかりません。
ぜひ対処方法をご教授ください。
StretchBlt Picture2.hdc, 0, 0, Picture2.Width, Picture2.Height, _
Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, SRCCOPY
の次に
Picture2.Refresh
を追加しましょう。
あとSRCCOPYは定義しなくてもvbSrcCopyというのがあるので
そっちを使ったほうが便利。
Loreleyさんご返信ありがとうございます。
refreshを入れても駄目なのです。
refreshを入れないと画面が一瞬表示されるのですが
With Picture2
.Width = Picture1.Width
.Height = Picture1.Height
End With
この領域にしか表示されないのです。
refreshをいれるとなにも表示されません。
説明追加
refreshを入れないと画面がちゃんと一瞬表示されるのですがすぐに消えてしまい
With Picture2
.Width = Picture1.Width
.Height = Picture1.Height
End With
に設定されたpictureboxのサイズのところにしか描画されません。
refreshをいれると一瞬ただしく表示されすぐに消えてしまいます。
Picture2のAutoRedrawとScaleModeはどうなってます?
参考にしたサイトです。
http://www.bcap.co.jp/hanafusa/VBHLP/memorydc.htm
AutoRedrawは上記サイトにあるように私の環境でもTrueにしとくとコピーできません。しかし簡単なコピーの場合にはコピーできるのです。
ScaleModeはピクセルです。
ってことはXPなんですか?
XPは使ったことが無いんで分かりませんねー。
えーっと、今スレを読み返したんですが
最初にあった「ちゃんと表示されない」というのは
2回目のレスにあるPicture1のサイズ分しか表示されないってことですか?
だったらそれは正常な動作です。
StretchBlt Picture2.hdc, 0, 0, Picture2.Width, Picture2.Height, _
Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, SRCCOPY
ってなってるんで。
あ、それと今気付いたんだけどScaleWidthとScaleHeightで指定しないとダメなんじゃないかな(^^;
あ、間違えた(汗)
正常な動作じゃないですね、拡大してるんですもんね。
すいません、そこんとこ無視しといてください(^^;
あとStretchBltで使ってるWidthとHeightをそれぞれ
ScaleWidthとScaleHeightに直して試してみて下さい。
みなさん返信ありがとうございます。
今いろいろと試行錯誤を繰り返しながらいろんなパターンでstretchbltを試してるのですが、自分でもちょっとわけがわからなくなってます。
エラー起こる状態もちょっとわかってない状態なので、もう一度最初からやってみようと思います。
それでもしまたわからないことがあったらご教授ください。
ツイート | ![]() |