近日碰到一个奇怪的问题,我在一个SDI的程序界面中想添加一个自己的子窗口,但是给定其底色刷子时确发现用CBrush类定义的对象的刷子没有起作用,不知为什么?代码如下:
HBRUSH hBrush=CreateSolidBrush(RGB(0,192,192));//这样起作用,换成
        /* CBrush brush;
           brush.CreateSolidBrush(RGB(0,192,192));//就不管用
           hBrush =(HBRUSH) brush;*/
m_myWnd.CreateEx(WS_EX_CLIENTEDGE,AfxRegisterWndClass(CS_VREDRAW|CS_HREDRAW,
LoadCursor(NULL,IDC_ARROW),hBrush,NULL),"",WS_CHILD|WS_VISIBLE,CRect   (0,0,0,0),this,IDC_MYWND);
        
另外:求教如何去除CFormView类派生的窗口类的滚动条,不是SetSrollBars()和 CFormView::ShowScrollBar(SB_VERT,FALSE); CFormView::ShowScrollBar(SB_HORZ,FALSE); ,是否有更好的方法?

解决方案 »

  1.   

    你的brush定义成了局域变量,出了这个函数就不存在了?在派生的view类中的precreatewindow中去掉它的WS_HSCROLL/WS_VSCROLL属性试试。
      

  2.   

    试了一下,第一个回答给了我很大启发,谢谢!第二个不行,在PreCreateWindow中设置窗口风格是最常用的方法了,但是对CFormView不管用,所以才有了另外的那些不太理想的解决之道。再次表示感谢,有您的一半分。
      

  3.   

    因为brush是CBrush类,作为局部变量,出了作用域之后要销毁,而在CBrush的析构函数中,调用了DeleteObject(),所有其画刷句柄无效,指向的GDI对象被释放了;而hBrush没有删除GDI对象,虽然出了作用域之后,hBrush无效,但是其指向的GDI对象资源仍然存在。