HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0313
かゆぽん。外部からのbitblt3解決


かゆぽん。

リンク

2018/3/13(Tue) 19:30:28|NO.82742

C++で書いたプログラム(具体的にはIPカメラの映像を取得するもの)で
bitblt関数を使ってHSPの画面に表示することはできたのですが、
画面更新のフラグが立てれないので、もう1つHSPで画面を作って
そこに任意のタイミングでgcopyをしようとしたのですが、
2枚目のほうに映りません。
gcopyの代わりにHSPでも直接bitbltを使ってみたりしたのですがダメでした。

考えられる原因や対処がありましたらご教授願います。



この記事に返信する


MillkeyStars

リンク

2018/3/14(Wed) 05:25:48|NO.82744

HSP の画面情報って、2つ存在するから、その2つを同時に更新しないとちゃんと表示されないよ。

DLL 側から、HSPのHDC にBitBlt するよね、その際に HSP側に書き込まれる領域って、HSPが管理している裏の画面。
HSP の redraw でその裏の画面の情報を表の画面にコピーしないと実際に表示されない。
(DLL側から書き込まれたウィンドウとは別のウィンドウにコピーする際もコピー先の redraw が必要【実際に画面に表示する場合】)

あと、画面の更新タイミングは、DLL 側からウィンドウメッセージを発行させてあげればいい。



かゆぽん。

リンク

2018/3/14(Wed) 15:56:39|NO.82745

返信ありがとうございます

お恥ずかしい限りなんですがDLLの作り方がわからず、独立したC++のアプリケーションから
GetWindowTextでHSPのhwndを、GetDCでHDCを取得しています。

C++から直接コピーされている画面のほうをredrawしたところ画面が点滅するようになりました

おそらく、C++から表の画面だけにコピーしているからだと思いますが
裏の画面のhdcを送るにはDLLが作れないと厳しいでしょうか



かゆぽん。

リンク

2018/3/14(Wed) 17:02:35|NO.82746

すごくダサい方法なんですが
HSP側でも同じようにFindWindowとGetDCを使えば表の画面のHDCが
得られるのでは?と思って書いてみたら、予想通り表示することができました。

そもそもC++のほうでも画面を1つ作っていたので、HSP側から引っ張ればよかったんですね
お時間を取らせてしまい申し訳ございませんでした



ONION software Copyright 1997-2023(c) All rights reserved.