BOOL CMapDlg::OnInitDialog()
{
CDialog::OnInitDialog();

//CEdit *edraw=(CEdit*)GetDlgItem(IDC_EDITDRAW);
//edraw->GetClientRect(&Grid);


CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
m_brBk.CreatePatternBrush(&bmp);
bmp.DeleteObject();
return TRUE;
}
void CMapDlg::OnDrawGrid()
{

//CEdit *edraw=(CEdit*)GetDlgItem(IDC_EDITDRAW);
//edraw->GetClientRect(&Grid); return;
}
HBRUSH CMapDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO:  Change any attributes of the DC here // TODO:  Return a different brush if the default is not desired
if (nCtlColor == CTLCOLOR_EDIT)
{
return m_brBk;
}
return hbr;
}void CMapDlg::OnPaint()
{

// TODO: Add your message handler code here
// Do not call CDialog::OnPaint() for painting messages
CEdit *edraw=(CEdit*)GetDlgItem(IDC_EDITDRAW);
CPaintDC dc(edraw);
edraw->GetClientRect(&Grid);

dc.MoveTo(0,0);
dc.LineTo(70,70);
}
void CSerialPortDlg::OnBnClickedComap()
{
// TODO: Add your control notification handler code here
CMapDlg* Dialog1;
Dialog1=new CMapDlg;
int x,y; if(Dialog1->DoModal()==IDOK)
{
//Dialog1->OnDrawGrid();
}
delete Dialog1;
}
如上是我实现的代码,CSerialPortDlg是我主对话框中的类,当我打开新对话框调用OnDrawGrid之后,添加代码就会弹出出现一个debug的对话框错误;这是什么原因呢?
第二个问题,也是主要问题,我的目的是想在弹出的新对话框的一个编辑框中贴位图,然后在其上画线和点(随时间可变),现在的问题是,位图我已经正确贴再编辑框中了,但是在onpaint中画线的时候,对话框变透明了,背景图片也没,程序也死掉了。就只有一条线,去掉位图的时候,直线就正常显示了,这是什么原因呢?我该怎么改?

解决方案 »

  1.   

    1. if(Dialog1->DoModal()==IDOK)
        {
            //Dialog1->OnDrawGrid();
        }当第一条执行后,对话框已经退出,就是说对话框已经不存在了,怎么能继续在上面画东西呢?2. 在OnPaint里面还是要调用CDialog::OnPaint(),因为这个函数负责绘制对话框的背景,所以必须先调用该函数再做自己的绘制任务
      

  2.   

    quote=引用 4 楼 roger_ding 的回复:]
    1. if(Dialog1->DoModal()==IDOK)
        {
            //Dialog1->OnDrawGrid();
        }当第一条执行后,对话框已经退出,就是说对话框已经不存在了,怎么能继续在上面画东西呢?2. 在OnPaint里面还是要调用CDialog::OnPaint(),因为这个函数负责绘制对话框的背景,所以必须先调用该函数再做自己的绘制……
    谢谢,第一个知道了。第二个问题还是存在,在位图上划线,图就没有了。该怎么改呢?
    [
      

  3.   

    第二个问题,也是主要问题,我的目的是想在弹出的新对话框的一个编辑框中贴位图,然后在其上画线和点(随时间可变),现在的问题是,位图我已经正确贴再编辑框中了,但是在onpaint中画线的时候,对话框变透明了,背景图片也没,程序也死掉了。就只有一条线,去掉位图的时候,直线就正常显示了,这是什么原因呢?我该怎么改? 
    -----------------
    重写CEdit类,OnPaint函数中贴图就好了~
      

  4.   

    重写cedit类?在之前cdlgmap类上新建一个重写么?
    class CMyEdit : public CEdit
    {
    }
    具体该怎么操作哦?之前的代码可以直接加进去么?
      

  5.   

    我重写了以后好像没什么反应,和原来之前的onpaint有什么关系呢?没联系 怎么调用啊?0 0
    大版指导下啊,新手
      

  6.   

    在你的CEdit派生类的OnPaint函数中贴图就行了,还有什么问题吗?
      

  7.   

    这个cedit派生类的onpait函数和class CMapDLG::public CDialog这个类里的onpaint函数有什么关系么?怎么把他们联系起来啊
      

  8.   

    关键是不知道在哪里重写这个cedit类对话框上新建类的话 base class 里只有CDIALOG Cpropertypage这些选项。新建空文档写的话,不知道怎么把他们联系起来
      

  9.   

    不是‘对话框上新建类’
    向导:
    Inert Calss
    CMyEdit
    派生至 CEdit
    把 原来的 m_Edit 的 类(CEdit) 改为 CMyEdit
      

  10.   

    不要在对话框上新建类,直接在工程上新建类:new class->MFC Class,选择继承CEdit,然后重载OnPaint(),完了