void CT1View::OnDraw(CDC* pDC)
{
CT1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
myButton1.Create(_T("My button"), WS_VISIBLE|BS_PUSHBUTTON, 
   CRect(10,10,100,30), this, 1); // TODO: add draw code for native data here
}
当按ctrl+F5时,按钮能显示出来,但只要一移动鼠标,就会出现debug assertion
failed提示,这是怎么回事??
(myButton1是试图中定义的public cbutton对象)

解决方案 »

  1.   

    加上WS_CHILD试试
    WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON
      

  2.   

    另外,你没有必要在OnDraw里面做这个事情吧,可以在OnInitialUpdate或者OnCreate中做都可以啊
      

  3.   

    正如badguy2002(风一样的男孩)所说
    不能加在ondraw里面,这个消息函数在窗口重绘时就会响应,你那个create就会重复执行,当然要出错的
      

  4.   

    没有必要在OnDraw里面做这个事情吧,可以在OnInitialUpdate或者OnCreate中做都可以啊
    我刚才也试了一下,也出错,跟踪了一下,发现mybutton1多次被创建,所以才引起异常的!!如果必须要在OnDraw做,我建议你这样
    void CMy678View::OnDraw(CDC* pDC)
    {
    CMy678Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    static BOOL firsttime=TRUE;
    if (firsttime)
    {
    myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 
        CRect(10,10,100,30), this, 1);
    firsttime=FALSE;
    } // TODO: add draw code for native data here
    }
      

  5.   

    将代码放在类的OnInitUpdate()函数中,我写了一个,好使的。void CT1View::OnInitialUpdate() 
    {
    CView::OnInitialUpdate();
    myButton1.Create(_T("My button"), WS_VISIBLE|BS_PUSHBUTTON | WS_CHILD, 
    CRect(10,10,100,30), this, 1);
    // TODO: Add your specialized code here and/or call the base class

    }
      

  6.   

    明白了阿!!
    顺便问一下myButton1.Create(_T(  "My  button  "),  WS_VISIBLE  ¦BS_PUSHBUTTON    ¦  WS_CHILD,CRect(10,10,100,30),  this,  1);  
    中的最后一个参数可以随便设置吗??
    还是有一定的范围限制或规则??
      

  7.   

    顺便问一下myButton1.Create(_T(  "My  button  "),  WS_VISIBLE  ¦BS_PUSHBUTTON    ¦  WS_CHILD,CRect(10,10,100,30),  this,  1);  
    中的最后一个参数可以随便设置吗??
    还是有一定的范围限制或规则??
    ~~~~~~~~~~~~~~~~~
    最后一个参数是动态生成的按钮的ID,主要是用来进行消息映射的,建议你最好用唯一的id,一般来说,只要在本文件中,没有重复id就没有什么大问题,不过建议你最好使用View菜单->Resource Symbols来创建一个全局唯一的ID,这样就可以避免出现任何问题了,呵呵!