異なるダイアログ画面に画像を表示する

[戻る]
月光 2006/07/26(水) 13:19:22
VC++の初心者です。

現在、VC++.NET2002で
Sample1の画面上のボタンを押すと
Sample2の画面上に画像を表示する内容の
アプリケーションを作成しております。
2つのクラス間の引数の受け渡しのために
以下の様なプログラムコードを作成しました。

ビルド実行は通るのですが、
デバッグしSample1の画面上のボタンを
押しますと「Debug Assertion Failed!」と
表示されます。
自分なりに調べたのですが、原因がわかりません。
宜しくお願いします。

//クラスSample1のプログラムコード
void Sample1::OnBnClickedButton1()
{
    go(botton1);    
}

void Sample1::go(int number)
{    
        //引数の受け渡し
    Sample2 S2;
    S2.display(number);
    EndDialog(0);
    hime.DoModal();
}


//クラスSample2のプログラムコード

void wing::OnPaint() 
{
 if (IsIconic())
   {
    省略    
    }
 else
   {
   CDialog::OnPaint();
     if(dispflg) {
   CDC* pDC=this->GetDC();
   CDC myDC;
   CBitmap myBMP;
   myBMP.LoadBitmap(IDB_BITMAP); 
   myDC.CreateCompatibleDC(pDC);
   CBitmap* oldBMP=myDC.SelectObject(&myBMP);
      pDC->BitBlt(5,25,256,256,&myDC,0,0,SRCCOPY);
   myDC.SelectObject(oldBMP);
    }
  }
}

void Sample2::display(int number)
{
    getnumber=number;
 
    //画像の表示
    if(getnumber==1){
        dispflg=1;
        Invalidate();
       }
     else{
        EndDialog(0);
       }
}

button1はマクロ定義で
#define  button1  1
と定義してあります。

画像はリソースとして設定して
おいた画像を表示します。

月光 2006/07/26(水) 13:26:49
すみません、プログラムコードに間違いが
ありました。

void wing::OnPaint()ではなく

void Sample2::OnPaint()が本当です。

以上

επιστημη 2006/07/26(水) 13:38:34
>    S2.display(number);

この時点でS2(ダイアログ)はまだ画面に現れてませんよね。
つまりダイアログはこの世に存在しません。
存在しないダイアログに対してInvalidate()したので実行時エラー。

PATIO 2006/07/27(木) 13:47:02
せっかく、「Debug Assertion Failed!」と教えてくれているのに
生かせていないのが一番問題かも。
デバッガでやっているならその部分で止まっていると思うのだけど。
そのASSERT文の内容を読んでなんでそこでASSERTが出るのか調べないと。

呼び出し履歴とかデバッガ上に出ているでしょうから何処から呼ばれた時に
出ているのかもわかるでしょうし、

デバッガの使い方も含めて参考書なりで勉強した方が良いとおもいますよ。

ITO 2006/07/27(木) 18:56:15
デバック→開始で止まりませんか?
.NET2003ですが.....

指摘 2006/07/27(木) 23:23:25
>デバック
デバッグ(Debug)

月光 2006/07/28(金) 08:33:17
[[解決]]
ありがとうございます。
皆さんの、アドバイスを今後に
活かしていきます。

古いスレッドには追加発言できません。