いつもお世話になっております。
今、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);
}
開発環境は、WindowsXP,VC6.0,MFC,です。
提示されているコードを実行する限りでは、
ずれていない様な機がするのですが、
何を持ってずれているという判断をされているのでしょう?
新しくダイアログベースのプロジェクトを起こし、
メインのダイアログにピクチャボックスを設置して
上記のコードをコピペして試してみましたが、
特にずれているようには見えませんでした。
提示されている以外の実装部分が影響を与えたりしてませんか?
基、
誤)
ずれていない様な機がするのですが、
正)
ずれていない様な気がするのですが、
>pic->GetClientRect(picture);
pic->GetClientRect(&picture);
コピーミス?
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);
}
}
間違って解決にしちゃいました。解決してません・・・。
解決に付けちゃったんで新規でたちあげます。
お手数おかけします。