外部プログラムのウィンドウのクライアント領域を移植をしたいです。
と書いてもあまり伝わりづらいので例とともに説明させていただきます。
外部アプリケーションを A、Aが保持するウィンドウをBとします。
自分が作るアプリケーションをM、Mの描画領域をNとします。
ウィンドウBには様々な子ウィンドウが内包されていて、それをそのままNにリアルタイム描画します。
Nに描画された各子ウィンドウにも操作することを目的としています。
Ex.)外部アプリケーションをnotepad.exe(メモ帳), 自分のソフトウェアをM、描画領域をNとします
メモ帳は、テキストエリアとメニューバーを保持していて、それらすべてをNに描画し
Nからテキストエリアへ入力や、メニューバーから保存等の操作もできる。
私はデバイスコンテキスト取得すればいいかと思ったのですが、それでは描画された後の画像?が表示され、リアルタイム表示にもざらつきやかくつきが起こり想定の動作とはいいがたいものでした。
どなたかいい方法ご存じありませんか?
環境
[1] OS : Windows10
[2] コンパイラ名 : VC++かgcc
外部プログラムのウィンドウのクライアント領域を移植
Re: 外部プログラムのウィンドウのクライアント領域を移植
実装経験があるわけではなく単に思いつきですが、手軽な方法として WM_PRINT というメッセージがあります。
このメッセージを対象のウィンドウに送信すると、指定したデバイスコンテキストに描画してくれます。
リアルタイムに描画できるかどうか分りませんし、要求を満たすものかは分りませんが、対象のデバイスコンテキストを取得してビットマップをコピーするよりはいいかもしれません。
私の不確かな記憶では、他のウィンドウの後ろに隠れていても、描画してくれたと思います。
WM_PRINTメッセージを参考にしてください。
このメッセージを対象のウィンドウに送信すると、指定したデバイスコンテキストに描画してくれます。
リアルタイムに描画できるかどうか分りませんし、要求を満たすものかは分りませんが、対象のデバイスコンテキストを取得してビットマップをコピーするよりはいいかもしれません。
私の不確かな記憶では、他のウィンドウの後ろに隠れていても、描画してくれたと思います。
WM_PRINTメッセージを参考にしてください。
Re: 外部プログラムのウィンドウのクライアント領域を移植
結論から言うとできませんし、やるべきではありません。
リアルタイム描画されたウィンドウに対し操作なんかできるはずもありません。操作するのに必要なウィンドウハンドルが渡ってくるわけではありませんので。
一番簡単な方法はその外部プログラムに対しウィンドウメッセージを流すことです。BullさんのいうWM_PRINTメッセージなんかはそれです。あとはキーボード、マウス操作関連ですね。
そもそも何でそんなことをしたいのですか。
リアルタイム描画されたウィンドウに対し操作なんかできるはずもありません。操作するのに必要なウィンドウハンドルが渡ってくるわけではありませんので。
一番簡単な方法はその外部プログラムに対しウィンドウメッセージを流すことです。BullさんのいうWM_PRINTメッセージなんかはそれです。あとはキーボード、マウス操作関連ですね。
そもそも何でそんなことをしたいのですか。
written by へにっくす