目的是通过在CDialog里面按一下添加按钮,就增加一个我定义MyButton(基类是CButton)。因为事先没有确定性,所以不可能再.h文件里面声明MyButton变量,只能在添加按钮的响应时间里面声明并显示。我记得有个方法可以实现这个的,但忘记了。。还有救是,MyButton的响应写在MyButton类里面是可以的吧?

解决方案 »

  1.   

    由于事先不知道到底要创建多少个MYBUTTON,所以,也没法事先写ON_BN_CLICKED(IDC_BUTTON1, OnBnClicked)这类的东西的。
      

  2.   

    使用ON_UPDATE_COMMAND_UI_RANGE宏来实现动态按钮的Click事件。
      

  3.   


    写错了,应该是:
    ON_COMMAND_RANGE宏
      

  4.   


    .h
    public:
    afx_msg void OnBnClicked();
    .cpp#define ID1 120
    #define ID2 140BEGIN_MESSAGE_MAP(CButtonTestDlg, CDialog)
    ON_COMMAND_RANGE(ID1,ID2, &CButtonTestDlg::OnMyButton)
    END_MESSAGE_MAP()
    报错:error C2440: 'static_cast' : cannot convert from 'void (__cdecl *)(void)' to 'void (__thiscall CCmdTarget::* )(UINT)'
      

  5.   

    拷错了,
    .h里面的是
    afx_msg void OnMyButton();
      

  6.   

    ON_COMMAND_RANGE
    此法可行.但要保证你的按钮不要超出预定范围
      

  7.   

    afx_msg void DealMenu(UINT);
      

  8.   

    上面的错误已经搞定了,少了个UNIT的参数。
    ========
    还有"在添加按钮的响应时间里面声明并显示"这个问题,谁能帮忙解决下?好像是显示后用个什么方法就好的。
      

  9.   


    恩,是这样的,已经试好了。在onbtnclick()
    {
            MyButton button1;
    CRect rect1(100,100,200,200); 
    button1.Create(L"222", WS_CHILD | WS_VISIBLE | WS_TABSTOP , rect1, this, 124 ); 
            //..这里需要加一句什么话,可以使Button1显示出来??

    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
      

  10.   

    afx_msg void OnMyButton(UINT nID);
      

  11.   


    不是这样的,是局部变量的原因。如果把button1在.h里面声明,就可以显示了。
    现在在onbtnclick里面声明,等这个方法结束后,在里面声明的变量就被回收了,所以button1就没了。有个方法可以解决这个问题的,但我忘了
      

  12.   

    难道你指的是声明指针,然后new?
      

  13.   

    可以定义一个CButton的数组来存储动态生成的button
      

  14.   

    怎么弄我记不清楚了,
    刚才去我认为应该用了这个的代码那里看了下,也没用到。
    onbtnclick() 

            MyButton button1; 
    CRect rect1(100,100,200,200); 
    button1.Create(L"222", WS_CHILD | WS_VISIBLE | WS_TABSTOP , rect1, this, 124 ); 
            //..这里需要加一句什么话,可以使Button1显示出来?? return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE 
    }
    就一句话的,
    就是在控件用之后,加一句话,button.xxxx()的。
    莫非是以前用JAVA时候的方法
      

  15.   

    CMenu类有个Detach方法,CButton好像没有
      

  16.   


    我也记得是这个,CButton里面也有的,不过,用了后报错了。
      

  17.   

    要不就是subclass之类的?
      

  18.   


    定义成指针真的就行了。。
    本来想用VECTOR存的,结果声明称指针的,没放进去的也显示了。。
    好了,都解决了,下帖贴出解决方法,然后等待结贴。
      

  19.   

    总结。
    1,响应的解决办法。
    可以用群响应,也就是RANGE吧。  这个响应就是一系列IDC对应同一个方法。
    不过我写到MyButton类里面去了。重载了几个方法。2,局部按钮变量的显示。
    声明为指针变量就可以显示了。
    经测试,如果生命为MyButton button1;即便存在vector里面,也没用,还是不显示。