CPaintDlg是派生自CDialog的一个类
在CPaintDlg有个控件,ID是ID_PAINT;
我在我的C***View中定义  CPaintDlg   A;
我该怎么得到指向ID_PAINT的指针呢?
我是这么做的
CPaintView *OwnWnd;
OwnWnd=(CPaintView *)GetParentOwner();
CWnd* pWnd = OwnWnd->m_paintdlg.GetDlgItem(IDC_PAINT);
编译的时候没有错,但一运行就出错了~~~
谁能给我讲下啊~

解决方案 »

  1.   

    不好意思,打错了点~~
    CWnd* pWnd = OwnWnd->A.GetDlgItem(IDC_PAINT);
      

  2.   

    我还有个问题就是就是我想在C***View的OnDraw函数中对CPaintDlg生成的对话框A进行重绘,该怎么做的呢?
      

  3.   

    这样子显然不行的。
    因为你虽然定义了CPaintDlg A;但是,明确一点,这个时候这个C++对象已经存在了,然而和他关联的Windows对象,即这个对话框,是不存在的,既然这个对话框不存在,你又如何能得到他中间的控件呢?因此你的程序肯定要出错。
    你需要首先创建这个对话框。然后就看你需要模态还是非模态对话框了。一般说来,你这种情况需要使用非模态对话框,也就是通过调用A.Create(CPaintDlg::IDD)来达到创建对话框的目的。如果你使用DoModal()来创建模态对话框,那么等到这个函数返回的时候,对话框这个窗口就已经销毁了,那么你又得不到对话框中的控件了。
      

  4.   

    关键的问题是,你这个CPaintDlg是否创建了。如果创建了,那么就好办了:
    你可以在OnDraw里面直接调用A.Invalidate()达到重绘的目的。
      

  5.   

    我创建的是一个模态对话框,我在这个对话匡中有个按扭控件和一个picture控件,我通过点击按钮,得到取色的那个窗口,然后选取自己所需要的颜色后将颜色反馈到picture控件中,这个我会做,但是一旦我一移动那个对话匡,picture中的颜色就没有的了~我想应该保存下我所选取的颜色,然后在OnDraw中重绘,我的想法对吗?还有,该怎么去实现的呢?
      

  6.   

    奇怪的了,我想问下,当我的picture控件得到了颜色后,我移动对话匡,picture中的颜色会消失的吗?下午我一移动颜色就消失了,现在又没有这种情况的了~~
    我还想问下,当我的A对话匡被激活了后,我的主窗口就不能被操作的了,必须关了我的对话匡才行。要怎么做才能做到我可以在我的主窗口和对话匡间实现用鼠标交替激活的吗?也就是我鼠标一点主窗口,就能在主窗口操作,一点我的对话匡又能在对话匡上操作的呢?
      

  7.   

    那么,你的这个对话框就不能使用模态对话框了。也就是说,你不能调用DoModal()来弹出对话框,只能通过调用CDialog::Create(...)来创建无模态对话框。
      

  8.   

    那我怎么来让对话匡显示的呢?我只晓得通过DoModal()来弹出对话框
      

  9.   

    显示对话框有两种方法,
    1,在资源编辑器里面,把对话框的Visible属性设置为TRUE,也就是选中那个复选框;
    2,在Create对话框之后,通过调用ShowWindow来显示,比如:
    CPaintDlg dlg;
    if (dlg.Create(dlg.IDD))
        dlg.ShowWindow(SW_SHOW);