画面の更新?

解決


すーさん  2003-04-28 11:34:42  No: 106955  IP: [192.*.*.*]

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の画像がちゃんと表示されません
このような状況の場合どのように対処すればいいのか私にはさっぱりわかりません。
ぜひ対処方法をご教授ください。

編集 削除
Loreley  2003-04-28 12:58:00  No: 106956  IP: [192.*.*.*]

StretchBlt Picture2.hdc, 0, 0, Picture2.Width, Picture2.Height, _
                                    Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, SRCCOPY
の次に
Picture2.Refresh
を追加しましょう。

あとSRCCOPYは定義しなくてもvbSrcCopyというのがあるので
そっちを使ったほうが便利。

編集 削除
すーさん  2003-04-28 13:51:13  No: 106957  IP: [192.*.*.*]

Loreleyさんご返信ありがとうございます。
refreshを入れても駄目なのです。
refreshを入れないと画面が一瞬表示されるのですが
            With Picture2
                .Width = Picture1.Width
                .Height = Picture1.Height
            End With
この領域にしか表示されないのです。
refreshをいれるとなにも表示されません。

編集 削除
すーさん  2003-04-28 13:56:38  No: 106958  IP: [192.*.*.*]

説明追加
refreshを入れないと画面がちゃんと一瞬表示されるのですがすぐに消えてしまい
            With Picture2
                .Width = Picture1.Width
                .Height = Picture1.Height
            End With
に設定されたpictureboxのサイズのところにしか描画されません。
refreshをいれると一瞬ただしく表示されすぐに消えてしまいます。

編集 削除
nanashi  2003-04-28 14:08:26  No: 106959  IP: [192.*.*.*]

Picture2のAutoRedrawとScaleModeはどうなってます?

編集 削除
すーさん  2003-04-28 14:34:52  No: 106960  IP: [192.*.*.*]

参考にしたサイトです。
http://www.bcap.co.jp/hanafusa/VBHLP/memorydc.htm
AutoRedrawは上記サイトにあるように私の環境でもTrueにしとくとコピーできません。しかし簡単なコピーの場合にはコピーできるのです。

ScaleModeはピクセルです。

編集 削除
nanashi  2003-04-28 15:02:27  No: 106961  IP: [192.*.*.*]

ってことはXPなんですか?
XPは使ったことが無いんで分かりませんねー。

えーっと、今スレを読み返したんですが
最初にあった「ちゃんと表示されない」というのは
2回目のレスにあるPicture1のサイズ分しか表示されないってことですか?
だったらそれは正常な動作です。
    StretchBlt Picture2.hdc, 0, 0, Picture2.Width, Picture2.Height, _
                                    Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, SRCCOPY
ってなってるんで。

あ、それと今気付いたんだけどScaleWidthとScaleHeightで指定しないとダメなんじゃないかな(^^;

編集 削除
nanashi  2003-04-28 15:07:08  No: 106962  IP: [192.*.*.*]

あ、間違えた(汗)
正常な動作じゃないですね、拡大してるんですもんね。
すいません、そこんとこ無視しといてください(^^;

あとStretchBltで使ってるWidthとHeightをそれぞれ
ScaleWidthとScaleHeightに直して試してみて下さい。

編集 削除
すーさん  2003-04-28 17:06:35  No: 106963  IP: [192.*.*.*]

みなさん返信ありがとうございます。
今いろいろと試行錯誤を繰り返しながらいろんなパターンでstretchbltを試してるのですが、自分でもちょっとわけがわからなくなってます。
エラー起こる状態もちょっとわかってない状態なので、もう一度最初からやってみようと思います。
それでもしまたわからないことがあったらご教授ください。

編集 削除