電子書籍の厳選無料作品が豊富!

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

A 回答 (4件)

ダイアログに置いたコントロール上に描画するとのことだと



一時的な描画で良ければコントロールの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/ShadeSD …
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/07/06 14:52

前回答の参考URLの「DPtoLP」やら「ペジエ曲線」


やらの計算部分は無視して下さい。


SDIにボタンを置く方法は、作成したビュークラス名を
CXxxView とすると、ClassWizerd から OnInitialUpdate() と
OnCommand() を追加して、そっから

-----------------CXxxxView.h--------------------
class CXxxxView : public CView
{
protected: // シリアライズ機能のみから作成します。
CButton m_btn1;// 手で追加
~~~中略~~~
};

-----------------CXxxxView.cpp------------------
#define MYID_BTN1101// 手で追加

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);
}

にしたら使えます。ある種これが一番楽かも。

説明が細かすぎて鬱陶しかったら失礼します。
逆に足らなかったらやはり失礼します。的外れだったら
さらに失礼します。では
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/07/06 14:53

>(1)if (IsIconic())のIsIconic()は何ですか。


OnPaint() ではアイコン化したときの表示コーディングも
なされています。その判定をされているものです。
Wizerdの自動生成ソースですので、SDIコーディングでも
その類はたくさんあったと思います。


>(2)ダイヤログ内にベタ書きになるのですが、この方法が
>一般的ですか。あるオブジェクトをはめ込んで(ボタンの
>ように)、その中に描画する方法はありませんか。
質問に合わせた回答のつもりだったんですが。そんな特殊
でしたか。

ボタンに描画するなら以下(参照URL)で↓

スタティックコントロールの描画のことをおっしゃっているの
でしたら、ピクチャーコントロールをリソースエディタで
ダイアログに貼り付けて、プロパティを開き、
[一般]タブで
[タイプ]=『ビットマップ』、
[イメージ]=ビットマップリソースID(例:IDB_BITMAP1)
として下さい。

どちらも、リソースからビットマップを利用しているのが
前提です。
SDI描画のときはファイルから直接行っていたのだったら、、
、ん、また補足にでもテキトーに。

参考URL:http://www.geocities.co.jp/SiliconValley-PaloAlt …

この回答への補足

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

補足日時:2002/07/04 19:52
    • good
    • 0

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/dial …

この回答への補足

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

補足日時:2002/07/03 07:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!