コントロールの表示をメモリビットマップに描画したい – プログラミング – Home

コントロールの表示をメモリビットマップ...
 
通知
すべてクリア

[解決済] コントロールの表示をメモリビットマップに描画したい


亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

VC2005 MFC です。
CTreeCtrlやCListCtrlなどの各コントロールの現在の表示状態を、
境界線や内部スクロールバーなどの非クライアント領域も含めて
メモリビットマップに描画したいのですが、
どのような方法が考えられますでしょうか。

試しに、メモリDCにメモリビットマップを選択して、
m_tree.SendMessage(WM_PAINT, (WPARAM)dcMem.m_hDC);
と送ってみたのですが、非クライアント領域までは描いてくれませんでした。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

WM_PAINT の代わりに WM_PRINT を使ってみるとか?


返信引用
亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

情報ありがとうございます。

m_tree.SendMessage(WM_PRINT, (WPARAM)dcMem.m_hDC, PRF_CLIENT | PRF_NONCLIENT);

と、WM_PRINTを送ってみたところ、非クライアント領域も描画されました。
ただ、境界線がXPのテーマに沿ってくれませんでした。
クラシックスタイルの凹んだ枠になってしまいます。
2000などで動かす際にはこれでも問題無さそうですが、
なにか設定し忘れているものでも考えられますでしょうか。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

PrintWindow なんて関数もありますが、結果は同じですかね?


返信引用
亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

> PrintWindow なんて関数もありますが、結果は同じですかね?

PrintWindowだと正しく境界線も描画されました。
どうやらこの問題は修正される予定の無いバグのようです。
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=116821

ただPrintWindowをそのまま使ってしまうと、XP以降でしか使えなくなりますね。
遅延ロードを使って関数が無ければWM_PRINTを送る、
というような使いかたをしなければいけなそうです。

ありがとうございます。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> どうやらこの問題は修正される予定の無いバグのようです。

うーん…微妙に違う問題のような気がします。
そこは Visual Studio & .NET Framework のバグ報告をするところで、報告者も .NET
Framework のコントロールの枠が描画されない、と報告していると思います(Win32 に
TextBox というコントロールはありません)。
それに対してマイクロソフトは、「それは .NET Framework の問題ではなく Windows の
コモンコントロールの問題なので、.NET Framework 開発チームとしては何も手を打てな
い」と返答している気がします。
そのため、Windows 開発チームの方へフィードバックすれば、また違った回答が得られ
る可能性はあると思います。

まぁ、XP SP3 でも直っていないことに変わりはなく、報告しても今から XP で修正され
る望みはないと思いますが。


返信引用
亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

たしかによくよく読んでみると微妙に違いますね。失礼しました。
コモンコントロールの問題であることは確かなようなので、修正に頼らずに、
前述の通り遅延ロードで、XPならPrintWindow、2000以前ならWM_PRINTを
使い分けるようにしてみたいと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました