奇怪的事:HBRUSH hbrush=::CreateSolidBrush(RGB(R,G,B)和CBrush类的CreateSolidBrush有区别吗?

jx_lgq 2005-10-17 10:03:53
近日碰到一个奇怪的问题,我在一个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); ,是否有更好的方法?
...全文
953 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2005-10-18
  • 打赏
  • 举报
回复
因为brush是CBrush类,作为局部变量,出了作用域之后要销毁,而在CBrush的析构函数中,调用了DeleteObject(),所有其画刷句柄无效,指向的GDI对象被释放了;而hBrush没有删除GDI对象,虽然出了作用域之后,hBrush无效,但是其指向的GDI对象资源仍然存在。
jx_lgq 2005-10-17
  • 打赏
  • 举报
回复
试了一下,第一个回答给了我很大启发,谢谢!第二个不行,在PreCreateWindow中设置窗口风格是最常用的方法了,但是对CFormView不管用,所以才有了另外的那些不太理想的解决之道。再次表示感谢,有您的一半分。
Hendy_So 2005-10-17
  • 打赏
  • 举报
回复
你的brush定义成了局域变量,出了这个函数就不存在了?

在派生的view类中的precreatewindow中去掉它的WS_HSCROLL/WS_VSCROLL属性试试。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧