はじめまして。
環境はVisualC++6.0、ダイアログベースで作成しています。
オートメーションでExcelを操作し、データからグラフを作成し、その
グラフをダイアログのピクチャボックスに表示させようと思っています。
グラフを作成するところまではできたのですが、そのグラフをどのようにすれば
ピクチャボックスに表示することができるのかわかりません。
どうか教えてください。よろしくお願いします。
>グラフをダイアログのピクチャボックスに表示
無理だと思いますが・・・
ピクチャボックスには画像しか表示できません。
どうしてもやりたければ、グラフを何らかの方法で画像ファイルとして保存する、
もしくはIPictureに変換し、
ピクチャーボックスに表示するしかないでしょう。
一度クリップボードにコピー(_Chart.CopyPictureを用いて)して
クリップボードからグラフ画像のハンドル(HBITMAP)を取ることが
出来たのですけど、ハンドルだけでピクチャボックスに表示することが
可能でしょうか?
CStatic::SetBitmap() という関数があります。
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_MFC_CStatic.asp
SetBitmap()をどのように使ったらピクチャボックスに表示されるんでしょうか?
申し訳ないんですが、できれば例みたいなものをのせてくれたら幸いです。
よろしくおねがいします。
HBITMAP h = 上にある方法;
((CStatic*)GetDlgItem(IDC_MY_PICTURE))->SetBitmap(h);
何度も何度もすみません。
((CStatic*)GetDlgItem(IDC_MY_PICTURE))->SetBitmap(h);
の方法でやってみたんですが、うまくいきません。
/////////////////////////////////////////////////////////
_Chart chart;
HBITMAP hBitmap
・・・
EmptyClipboard(); //クリップボードを空にする
chart.CopyPicture((long)1, (long)2); //グラフをBMPでクリップボードにコピー
OpenClipboard();
hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP); //ハンドルを取得
CloseClipboard();
((CStatic*)GetDlgItem(IDC_PICT))->SetBitmap(hBitmap);
//////////////////////////////////////////////////////////
IDC_PICTはピクチャボックスのID
なにかおかしいところがありましたら教えてください。
まさかと思いますけれど、
問題のピクチャボックスにビットマップを使用すると言う設定がなされていないとか。
そうかもしれません。っていうかきっとそうです。
何か設定する必要があるんですか。教えてください。
リソースエディタで貼り付けたのであれば、
プロパティのところに設定があったと思います。
タイプのところがビットマップ以外になっているようならビットマップにすれば
よろしいかと思います。
ふと思ったんですが、クリップボード上のビットマップってどういうタイミングで
開放されるんですかねぇ。
もしかしてクリップボードを閉じる前に自前の環境にコピーしとかないと
いけないとかありませんかね。
クリップボードから取り出したハンドルをそのまま使って大丈夫かなと思ったんですが。
リソースエディタでそのピクチャーボックスの
プロパティを開いて探してください。
実はその事が原因でなかった場合、
どんな風に「うまくいかない」のか詳しく書いてください。
デバッガでステップ実行して関数の引数や戻り値を調べるのも重要です。
MSDNのGetClipboardDataの説明より
GetClipboardData 関数が返すハンドルは、アプリケーションではなくクリップボードが
管理しています。アプリケーションはデータを即座にコピーするべきです。
また、アプリケーションはハンドルを解放することや、ロックし続けることを避けなければ
なりません。さらにアプリケーションは、EmptyClipboard または CloseClipboard を
呼び出した後にハンドルを使うことや、SetClipboardData を呼び出した後にクリップボード
の同じデータ形式を指定することを避けなければなりません。
この辺の関数を使うときはMSDNの説明まできちんと目を通した方が良いです。
特に取得したデータの有効期限とかには気をつけないと駄目です。
返信遅れてすみません。
なんとか、できました。
PATIOさんのいわれたとおりに、
ピクチャボックスの設定を変更したら表示されました。
ただ、図のサイズがでかいため、ピクチャボックスより大きく表示されたのですが、
ここまでできれば、後は何とかなりそうです。
教えてくださったみなさん、本当にどうもありがとうございました。