総合掲示板(アップロードファイル合計最大1MB)/添付ファイルはプレビュー時に消えるため、再設定をお願いします。
|
金華山の仙人
- 22/6/8(水) 4:34 -
|
▼金華山の仙人さん:
>『Re:CDIでの画像保存処理について』
>https://crystalmark.info/board/c-board.cgi?cmd=one;no=2239;id=#2239
>
>|>尚、CDI9においては、CDI画像のSMART部分がスクロール状態だったり、
>|>画面からはみ出して見えない部分も、無条件で画像セーブする機能を
>|>強く希望します。
>
>最近のCDI改版類は、個人的に何ら寄与してないので、この改良を
>して頂けると、直に役立ちますので。(^o^)
-------------------
こんにちは
デスクトップ画面からはみ出た部分に関しては、現行のCrystalDiskInfoで、ちゃんとキャプチャされますよ? マルチモニタ環境で複数モニタをまたいで
表示されていても問題ないです。 使用PCの環境に拠るのかな?
とりあえず対策ですが、
\Priscilla\MainDialogFx.cpp の「CMainDialogFx::SaveImage()」の処理を、
if (bDwmEnabled) の直前に...
--------<ここから>--------
CRect rcOrigin;
GetWindowRect(&rcOrigin);
SetWindowPos(NULL, 0, 0, m_MaxSizeX, m_MaxSizeY, SWP_NOZORDER | SWP_NOMOVE);
--------<ここまで>--------
を追加して、
SAFE_DELETE(image1); の直前に...
--------<ここから>--------
SetWindowPos(NULL, 0, 0, rcOrigin.Width(), rcOrigin.Height(), SWP_NOZORDER | SWP_NOMOVE);
--------<ここまで>--------
を追加するってのじゃダメですかね?
ウィンドウキャプチャ処理の直前で、一時的にダイアログを最大化して、キャプチャ処理の終了後に、元のサイズに戻しているだけですが。(w
8.16.4のソースに上記の変更を加えてビルドしてみましたが、上手く動いているようです。 画面を拡大してもちゃんとキャプチャされました。
一応、変更したSaveImage関数を抜粋したのを添付しときます。
ちなみにFirefoxは、ScrollViewのクライアント領域を画像に落としているだけで、CrystalDiskInfoのように、ダイアログの子コントロールを透過させた状態で、タイトルバーやウィンドウ枠など、非クライアント領域を含めてキャプチャしているわけではないので、たぶんソースを読んでも参考にはならないかと。
見た目は同じように見えても、ブラウザ上のフォーム画面に表示されるボタンや、エディットボックスは、アプリのブラウザエンジンが自前で描画していて、ウィンドウのコモンコントロールではないです。
▼G神さん:
>▼金華山の仙人さん:
>>『Re:CDIでの画像保存処理について』
>>https://crystalmark.info/board/c-board.cgi?cmd=one;no=2239;id=#2239
>>
>>|>尚、CDI9においては、CDI画像のSMART部分がスクロール状態だったり、
>>|>画面からはみ出して見えない部分も、無条件で画像セーブする機能を
>>|>強く希望します。
>>
>>最近のCDI改版類は、個人的に何ら寄与してないので、この改良を
>>して頂けると、直に役立ちますので。(^o^)
>-------------------
>こんにちは
>
>デスクトップ画面からはみ出た部分に関しては、現行のCrystalDiskInfoで、ちゃんとキャプチャされますよ? マルチモニタ環境で複数モニタをまたいで
>表示されていても問題ないです。 使用PCの環境に拠るのかな?
>
>とりあえず対策ですが、
>
>\Priscilla\MainDialogFx.cpp の「CMainDialogFx::SaveImage()」の処理を、
>
>if (bDwmEnabled) の直前に...
>--------<ここから>--------
>CRect rcOrigin;
>
>GetWindowRect(&rcOrigin);
>SetWindowPos(NULL, 0, 0, m_MaxSizeX, m_MaxSizeY, SWP_NOZORDER | SWP_NOMOVE);
>--------<ここまで>--------
>を追加して、
>
>SAFE_DELETE(image1); の直前に...
>--------<ここから>--------
>SetWindowPos(NULL, 0, 0, rcOrigin.Width(), rcOrigin.Height(), SWP_NOZORDER | SWP_NOMOVE);
>--------<ここまで>--------
>
>を追加するってのじゃダメですかね?
>
>ウィンドウキャプチャ処理の直前で、一時的にダイアログを最大化して、キャプチャ処理の終了後に、元のサイズに戻しているだけですが。(w
>
>8.16.4のソースに上記の変更を加えてビルドしてみましたが、上手く動いているようです。 画面を拡大してもちゃんとキャプチャされました。
>
>一応、変更したSaveImage関数を抜粋したのを添付しときます。
>
>ちなみにFirefoxは、ScrollViewのクライアント領域を画像に落としているだけで、CrystalDiskInfoのように、ダイアログの子コントロールを透過させた状態で、タイトルバーやウィンドウ枠など、非クライアント領域を含めてキャプチャしているわけではないので、たぶんソースを読んでも参考にはならないかと。
>
>見た目は同じように見えても、ブラウザ上のフォーム画面に表示されるボタンや、エディットボックスは、アプリのブラウザエンジンが自前で描画していて、ウィンドウのコモンコントロールではないです。
ご提案ありがとうございます!
この辺りを今から変更するのは難しいので将来の課題とさせてください。