1 我想在SDI里动态创建一下按钮。请问这个动态创建能不能在OnDraw()函数里面实现。我发现好像不行的。因为如果最小化后重绘,程序就会发生错误。。同样,如果我调用Invalidate()也会发生错误。
2 请问下面这个要求该怎么实现啊。工具栏里有两个按钮。我希望点击第一个工具按钮能动态生成一些按钮,点击第二个工具能动态生成另外一些按钮。
3 如果按钮用CButton,怎么把已经导入的位图(id为IDB_BITMAP)变为按钮的背景?本人初学者,懂得很少。望牛牛们不吝赐教。不胜感激哈。。我把所有的分都给哈。。

解决方案 »

  1.   

    OnDraw()会被多次调用,无论从逻辑上还是效率上(即使你每次删掉重建)都是不合适的。在你需要的地方(比如菜单消息、初始化的时候)创建,并且如果是重复创建的要先删除旧的或者增加新的。
    位图按钮可以用CBitmapButton类或者自己自绘。
      

  2.   

    1,可以在ondraw里面添加一个标签来判断是否有按钮创建,如果已经创建了就不要重新创建了,加一个if判断就可以了。2,动态生成按钮的话,如果是在工具栏上的话,直接导入新的工具栏就可以了,如果是在工作区里面创建按钮的话,那就需要在函数里面创建按钮了。3,网上搜索一下吧,用位图按钮就可以了,这个的例子很多。
      

  3.   

    OnCreate或者OnInitUpdate中创建,使用CBitmapButton来实现。
      

  4.   

    创建一次就可以,OnDraw会被不断调用,因此不要在这里创建可以在OnInitUpdate创建。
    按钮上放图片的方法很多
      

  5.   

    OnDraw()会调用很多次,不用在这里面创建按钮,第二个问题需要重新导入工具栏。
      

  6.   

    1.在OnDraw函数里也可以,只不过要加个if判断
    if(m_btn.m_hWnd)
    {
      m_btn.DeleteObject();
    }
    else
    {
      m_btn.Create(...);
    }
    2.自己要添加消息处理,将你添加的按钮的消息响应
    3.CBitmapButton(),或是自己重载DrawItem虚函数
      

  7.   

    1 最好不要在OnDraw()函数里面实现,这样容易出错。 
    2 在按钮事件中动态创建按钮。 
    3 LoadImage、SetBitmap 
      

  8.   

    1、最好是响应其父窗口的WM_CREATE消息来创建控件。
    2、建议你创建多个工具栏,根据需要显示或隐藏。
    3、设置OwnerDraw,响应父窗口的WM_DRAWITEM消息来绘制,也可以用CBitmapButton类。
      

  9.   

    把button定义为全局变量,
    创建了,应该不会消失吧
      

  10.   

    失望。。回答这么简练
    能不能具体点。大家说的我网上都可以找到。我希望能具体的说明。sigh
    我水平太差了。。