他のクラスのメンバ関数

[戻る]
わっく 2004/10/12(火) 11:32:25
いつもお世話になっております。

 今、MainクラスとSubクラスで線の描画を行っているのですが、どうしても
分からないことがあり、書き込みました。
 Mainでボタンを押すと、Subの関数にデバイスコンテキスト、ピクチャボックスの
のサイズを渡してMainのピクチャボックスに線を引くというものです。
ですが、Mainのピクチャーボックスには若干ですが、線の位置がズレて描画されます。
これはどうしてなのでしょうか?Subのクラス内で同じことを試すときちんと描画され
るのですが・・・。ご指導よろしくお願いします。

Mainクラス
void CMainDlg::OnButton() 
{
 CSubDlg dlg;
 CDC *pDC;
 CRect picture;

  pDC = GetDlgItem(IDC_PICTURE)->GetDC();
  CWnd *pic = GetDlgItem(IDC_PICTURE);
  pic->GetClientRect(picture);
  dlg.Draw(pDC,picture);
  ReleaseDC(pDC);
}

Subクラス
void CSubDlg::Draw(CDC *pDC,CRect box)
{
  pDC->Rectangle(&box);
  pDC->MoveTo(0,box.Height() / 2);
  pDC->LineTo(box.Width(),box.Height() / 2);
}

わっく 2004/10/12(火) 11:33:56
開発環境は、WindowsXP,VC6.0,MFC,です。

PATIO 2004/10/12(火) 16:13:20
提示されているコードを実行する限りでは、
ずれていない様な機がするのですが、
何を持ってずれているという判断をされているのでしょう?

新しくダイアログベースのプロジェクトを起こし、
メインのダイアログにピクチャボックスを設置して
上記のコードをコピペして試してみましたが、
特にずれているようには見えませんでした。

提示されている以外の実装部分が影響を与えたりしてませんか?

PATIO 2004/10/12(火) 16:14:35
基、
誤)
ずれていない様な機がするのですが、
正)
ずれていない様な気がするのですが、

REE 2004/10/12(火) 17:19:25
>pic->GetClientRect(picture);

pic->GetClientRect(&picture);

コピーミス?

わっく 2004/10/12(火) 17:40:11
[[解決]]
PATIOさんに言われたとおり、色々と調べてみたんですけど、提示されて
いる以外の実装部分は影響を与えていないようです。それと自分ももう一度
作りなおして上記のプログラムをコピペしたところうまく行きました。
ですが、下記のプログラムを追加するとMainではいいのですが、
Subだとズレてしまいます。これはどうしてでしょうか?

Mainクラス
void MainYDlg::OnButton1() 
{
 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
 CSubDlg     Hdlg;
 Hdlg.DoModal();       //Subダイアログオープン
}

Subクラス    
void CSubDlg::OnPaint()
{
   上記のMainのvoid CMainDlg::OnButton()と同じ
}

void CSubDlg::Draw(CDC *pDC,CRect box)
{
 上記のプログラム略
 for(int i = 1;i<10;i++)
 {
   pDC->MoveTo(0,box.bottom - (box.bottom / 10) * i);
   pDC->LineTo(box.right,box.bottom - (box.bottom / 10) * i);
 }
}

わっく 2004/10/12(火) 17:41:06
間違って解決にしちゃいました。解決してません・・・。

わっく 2004/10/12(火) 17:48:26
[[解決]]
解決に付けちゃったんで新規でたちあげます。
お手数おかけします。

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