外部プログラムのウィンドウのクライアント領域を移植

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
h1j1k1
記事: 37
登録日時: 7年前

外部プログラムのウィンドウのクライアント領域を移植

#1

投稿記事 by h1j1k1 » 5年前

外部プログラムのウィンドウのクライアント領域を移植をしたいです。
と書いてもあまり伝わりづらいので例とともに説明させていただきます。

外部アプリケーションを A、Aが保持するウィンドウをBとします。
自分が作るアプリケーションをM、Mの描画領域をNとします。
ウィンドウBには様々な子ウィンドウが内包されていて、それをそのままNにリアルタイム描画します。
Nに描画された各子ウィンドウにも操作することを目的としています。

Ex.)外部アプリケーションをnotepad.exe(メモ帳), 自分のソフトウェアをM、描画領域をNとします
メモ帳は、テキストエリアとメニューバーを保持していて、それらすべてをNに描画し
Nからテキストエリアへ入力や、メニューバーから保存等の操作もできる。

私はデバイスコンテキスト取得すればいいかと思ったのですが、それでは描画された後の画像?が表示され、リアルタイム表示にもざらつきやかくつきが起こり想定の動作とはいいがたいものでした。
どなたかいい方法ご存じありませんか?

環境  
 [1] OS : Windows10
 [2] コンパイラ名 : VC++かgcc

Bull
記事: 149
登録日時: 11年前

Re: 外部プログラムのウィンドウのクライアント領域を移植

#2

投稿記事 by Bull » 5年前

実装経験があるわけではなく単に思いつきですが、手軽な方法として WM_PRINT というメッセージがあります。
このメッセージを対象のウィンドウに送信すると、指定したデバイスコンテキストに描画してくれます。
リアルタイムに描画できるかどうか分りませんし、要求を満たすものかは分りませんが、対象のデバイスコンテキストを取得してビットマップをコピーするよりはいいかもしれません。
私の不確かな記憶では、他のウィンドウの後ろに隠れていても、描画してくれたと思います。
WM_PRINTメッセージを参考にしてください。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: 外部プログラムのウィンドウのクライアント領域を移植

#3

投稿記事 by へにっくす » 5年前

結論から言うとできませんし、やるべきではありません。
リアルタイム描画されたウィンドウに対し操作なんかできるはずもありません。操作するのに必要なウィンドウハンドルが渡ってくるわけではありませんので。
一番簡単な方法はその外部プログラムに対しウィンドウメッセージを流すことです。BullさんのいうWM_PRINTメッセージなんかはそれです。あとはキーボード、マウス操作関連ですね。
そもそも何でそんなことをしたいのですか。
written by へにっくす

返信

“C言語何でも質問掲示板” へ戻る