• ベストアンサー

VC++6.0 MFCダイヤログベースでの画像処理

初心者です。 VC++6.0 MFCダイヤログベースのアプリケーションで、ビットマップ画像を生成表示するにはどうしたらよいでしょうか。 MFC-SDIでは経験があります。 例題と扱っているサイトありましたら、紹介願います。

質問者が選んだベストアンサー

  • ベストアンサー
noname#2009
noname#2009
回答No.3

ダイアログに置いたコントロール上に描画するとのことだと 一時的な描画で良ければコントロールのDCに対して CDC* pdc = GetDlgItem(IDC_STATICXX)->GetDC(); もしくはメンバ変数設定していた場合、 CDC* pdc = m_sta1.GetDC(); ~ ・・・ん、この際片っ端から全部書くと、メンバ変数の設定は [ClassWizerd]-[メンバ変数タブ]-(コントロール選択)- [変数の追加]-[カテゴリ]=コントロール で設定。 この場合は描画後にはコントロールに対してReleaseDC を 入れて下さい。 例:m_sta1.ReleaseDC(pdc); OnPaint(OnDraw) を利用した恒久描画の場合は、 ClassWizerd]-[クラスの追加ボタン]-(新規)  に クラス名=(適当な名前、例:CMyStatic) 基本クラス=CStatic でOKすると新規拡張クラスが追加されるので、そのまま 右リストで WM_PAINT を選択しOnPaint を追加してください。 そしてメインダイアログのヘッダで、 #include"MyStatic.h"    を追加 CStatic m_sta1;  → CMyStatic m_sta1; に変更 でCMyStatic::OnPaint() を利用して下さい。 また参考URLの後半部分も適当にどうぞ(前半部は気にせずに) 最後にSDIにボタンを置く方法ですが、・・・続きは次へ

参考URL:
http://www.geocities.co.jp/Milkyway/8856/ShadeSDKHelp/SampleBzPlugin1.html
saikoro
質問者

お礼

やりたかったことが、うまくできました。 親切にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#2009
noname#2009
回答No.4

前回答の参考URLの「DPtoLP」やら「ペジエ曲線」 やらの計算部分は無視して下さい。 SDIにボタンを置く方法は、作成したビュークラス名を CXxxView とすると、ClassWizerd から OnInitialUpdate() と OnCommand() を追加して、そっから -----------------CXxxxView.h-------------------- class CXxxxView : public CView { protected: // シリアライズ機能のみから作成します。 CButton m_btn1; // 手で追加 ~~~中略~~~ }; -----------------CXxxxView.cpp------------------ #define MYID_BTN1 101 // 手で追加 void CDsgdgdsgView::OnInitialUpdate() { CView::OnInitialUpdate(); // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください // 手で追加↓ m_btn1.Create("TestBtn", BS_PUSHBUTTON | WS_VISIBLE, CRect(100,100,200,150), this, MYID_BTN1); } BOOL CDsgdgdsgView::OnCommand(WPARAM wParam, LPARAM lParam) { // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください // 手で追加↓ switch(LOWORD(wParam)) { case MYID_BTN1: // MessageBox("TestBtn Pushed"); break; } // 手で追加↑ return CView::OnCommand(wParam, lParam); } にしたら使えます。ある種これが一番楽かも。 説明が細かすぎて鬱陶しかったら失礼します。 逆に足らなかったらやはり失礼します。的外れだったら さらに失礼します。では

saikoro
質問者

お礼

こういうこともできるんですね。 あとで試してみます。

すると、全ての回答が全文表示されます。
noname#2009
noname#2009
回答No.2

>(1)if (IsIconic())のIsIconic()は何ですか。 OnPaint() ではアイコン化したときの表示コーディングも なされています。その判定をされているものです。 Wizerdの自動生成ソースですので、SDIコーディングでも その類はたくさんあったと思います。 >(2)ダイヤログ内にベタ書きになるのですが、この方法が >一般的ですか。あるオブジェクトをはめ込んで(ボタンの >ように)、その中に描画する方法はありませんか。 質問に合わせた回答のつもりだったんですが。そんな特殊 でしたか。 ボタンに描画するなら以下(参照URL)で↓ スタティックコントロールの描画のことをおっしゃっているの でしたら、ピクチャーコントロールをリソースエディタで ダイアログに貼り付けて、プロパティを開き、 [一般]タブで [タイプ]=『ビットマップ』、 [イメージ]=ビットマップリソースID(例:IDB_BITMAP1) として下さい。 どちらも、リソースからビットマップを利用しているのが 前提です。 SDI描画のときはファイルから直接行っていたのだったら、、 、ん、また補足にでもテキトーに。

参考URL:
http://www.geocities.co.jp/SiliconValley-PaloAlto/9127/visual/control/control2.html
saikoro
質問者

補足

どうもありがとうございます。IsIconic()な納得しました、 うまく質問を伝えれていないのですが、 例えば、ダイヤログ内にグラフを書く領域を設定し、ダイヤログ内の各種ボタンでインタラクティブにグラフを書く、といったことをやりたいのです。SDI程大げさにしたくないし、SDIではボタン類をはめ込むことができない(する方法もある?)ためにダイヤログを使いたいのです。 たびたび申し訳ありませんが、よろしくお願い致します。

すると、全ての回答が全文表示されます。
noname#2009
noname#2009
回答No.1

SDIでビットマップの表示部分ができているのなら、 View の OnDraw() 内のコードをダイアログの  OnPaint() に持って来れば、表示はされます。 (OnDraw のパラメータ 『pDC->』部分を『dc.』に 変える ) ・・・・・・ void CXxxDlg::OnPaint() { if (IsIconic()) { ~~~~(略)~~~~ } else { ~~~~(こっから)~~~~ CPaintDC dc(this); // ←追加 // ここに追加 ~~~~(ここまで)~~~~ CDialog::OnPaint(); } } ・・・・・・ 一応参考URLも。

参考URL:
http://www.nara-edu.ac.jp/~asait/visual_cpp/dialog1/dialog1.htm,http://new-mpulip.hoops.ne.jp/kouza/vc/vc14/vc14.htm
saikoro
質問者

補足

遅くなってすいません。ありがとうございました。表示することができました。 まだよくわからないのですが、 (1)if (IsIconic())のIsIconic()は何ですか。 (2)ダイヤログ内にベタ書きになるのですが、この方法が一般的ですか。あるオブジェクトをはめ込んで(ボタンのように)、その中に描画する方法はありませんか。

すると、全ての回答が全文表示されます。

関連するQ&A