原来我是在自定义的类中,在单文档视图界面画图,是这么实现的://参数的含义:pDC——传入的设备句柄;rect——画图位置
CMyClass::display(CDC* pDC,CRect& rect)
{
//利用pDC、rect来画图
}
//这么调用
void CMyTestView::OnDraw(CDC* pDC)
{
CCTuopuTreeTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//绘制图形
CMyClass myClass; CRect wholeClient;
GetClientRect(&wholeClient); myClass.display(pDC,wholeClient);
}
现在我要改成:在自定义的类中,在单文档视图界面动态创建CButton。该怎么做呢?
注意:不能在自定义的类中,去获取单文档视图的任何东西(而必须利用传入的方式)。因为我的类将来是要被别人拿去调用的!

解决方案 »

  1.   

    把CMyTestView指针传入你的类不就行了吗。
    CMyClass::SetParentWindow(CMyTestView pView)
    {
       m_pView = pView;
    }
    CMyClass::CreateButton()
    {
      if(m_pView  == NULL)
       return;
      CButton button;
      button.Create(m_pView,CRect(100,100,200,200),....)
    }
      

  2.   

    类似这样:BOOL CYourClass::CreateSomeButton(CWnd *pParentWnd)
    {
        CButton button[x];
        CRect rc[x];
        ......    BOOL bSuccess = TRUE;    for(int i = 0; i < x; ++ i)
        {
            // set rc[i]
            // ......        bSuccess = button[i].Create(......, rc[i], pParentWnd, ID_BUTTONBASE + i);
            if(!rb) break;
        }    return bSuccess;
    }别人用你的类时,要创建button,只要传入窗口指针(或者还有caption、rect等等,根据你的需要定义接口),就可以了
      

  3.   

    //参数的含义:pWnd——传入的窗体句柄;rect——按钮显示位置
    CMyClass::display(CWnd* pWnd,CRect& rect)
    {
    //利用pWnd、rect来动态创建按钮
    }
    CMyTestView中怎么调用呢?
    void CMyTestView::调用函数()
    {
    CMyClass myClass; //如何得到CView的窗体句柄?
    CWnd* pWnd=????
    CRect wholeClient;
    GetClientRect(&wholeClient); myClass.display(pWnd,wholeClient);
    }
      

  4.   

    CWnd* pWnd=GetActiveWindow();
    可以吗?快点啊,我要结帐了
      

  5.   

    在void CMyTestView::调用函数()
       {
         ....
         myClass.display(this,wholeClient)
    }
    中把this指针传入你的类就行了
      

  6.   

    干吗要句柄?用this直接传就是了:void CMyTestView::调用函数()
    {
    CMyClass myClass; CRect wholeClient;
    GetClientRect(&wholeClient); myClass.display(this, wholeClient);
    }