我定义了一个全局按钮对象 CButton cb; 并且在窗体的单击消息中加入以下代码:cb.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                 CRect(10,10,100,30), this, 1);当我单击窗体之后,在指定的位置上显示出了一个按钮,
可是当我再单击那个按钮后,整个程序都关闭!
我不明白这是怎么回事???
这个按钮的单击事件在哪写???

解决方案 »

  1.   

    if (! cb)
    {
      cb.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                 CRect(10,10,100,30), this, 1);
    }
      

  2.   

    To: ShiGang(Sucess) 谢谢!你的方法可以解决再次单击窗体后发生的异常,
    可是还是解决不了我单击生成的按钮后程序关闭的情况。
    我的主窗体是用 MFC Wizard 向导选择基于对话框生成的
    难道生成的按钮默认事件是关闭当前窗体?????
    这个按钮的单击事件在哪编写呀????????
      

  3.   

    既然你定义的是全局按钮对象 CButton cb,你能不能在框架类的Create函数中创建此按钮,你的单击函数的功能是显示此按钮。
      

  4.   

    To :szy333(nini)我很矛盾呀!我用 MFC Wizard 建立的选的是基于对话框的程序,就可以有个主窗体来供我编辑
    但是就找不到那个框架类了;为了能找到框架类,我就要用 MFC Wizard 建立的选的是单文档
    可是这样又找不到主窗体来编辑了,更没法住上拖控件。TO:★★★ 们:我是一个初学者,我想我这些问题不至于难到大家吧,还请你们赐教呀。
      

  5.   

    將新建的Button的ID改一下,如改為:0x8601吧.編寫事件也一樣,只需將ID改為0x8601.即可.
      

  6.   

    To: ShiGang(Sucess) 非常感谢!你的办法的确能够解决我的问题,我也试了一下只要 ID 值取 3 以上都可以。
    我还想问一下,这个 ID 值和句柄是不是一个值呀?如果不是一个值那二者有何区别?
    再就是我如果要生成很多个按钮,那么还要一个个的设置 ID 值吗?
    设不好冲突了怎么办?有没有更好的办法和机制?
      

  7.   

    create 只需要一次就可以了,因为你的cb 是全局的变量。
      

  8.   

    /*
     * Dialog Box Command IDs
     */
    #define IDOK                1
    #define IDCANCEL            2
    #define IDABORT             3
    #define IDRETRY             4
    #define IDIGNORE            5
    #define IDYES               6
    #define IDNO                7
    #if(WINVER >= 0x0400)
    #define IDCLOSE         8
    #define IDHELP          9
    #endif /* WINVER >= 0x0400 */// end_r_winuser
      

  9.   

    看看 resource.h一般不会冲突的
      

  10.   

    ID与winuser.h中定义的IDOK相同,所以单击那个按钮后,整个程序都关闭
      

  11.   

    #define IDOK 1
    #define IDCANCEL 2如果你把ID定义成1,2就跟OK,Cancel按钮一样的结果了,
    一般用户ID,消息定义在 WM_USER + n (n=1,2,...)
    处理消息在WM_COMMAND
    两个参数:
    WPARAM wParam
    LPARAM lParam;wParam
    高位
    如果消息来自控件,表示Notification Node (BN_CLICKED...)
    如果来自加速键,=1
    如果来自菜单, =0
    低位表示控件菜单的ID(就是你动态创建时用的ID)
    lParam
    如果消息来自控件,这个值是发送消息的控件句柄,否则为NULL
      

  12.   

    cb.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                     CRect(10,10,100,30), this, 1);
    注意最后一个参数,1是控件ID,再看看系统参数定义,IDOK的值就是1,就是说你创建了一个“确定”按钮,你说按这个按钮会发生什么事?