关于窗口中画刷有关问题
关于窗口中画刷问题
比较下面两端代码
第一段代码所创建的窗口是红色背景,而用第二段代码所创建的窗口是白色背景,WHY ?
------解决方案--------------------
CBrush hbkbrush;
这样定义的局部变量,析构里会自动DeleteObject创建的画刷
------解决方案--------------------
楼上解析正确,
第一段的HBRUSH为画刷句柄,
而第二段的CBrush只是一个局部变量,自动析构
------解决方案--------------------
CBrush hbkbrush;
用 hbkbrush.m_hObject 看看。
AfxRegisterWndClass可能失败了。
------解决方案--------------------
AfxRegisterWndClass()
第三个参数类型是HBRUSH,默认值为0
CBrush myBrush;
myBrush.CreateSolidPenBrush(RGB(255,0,0));
HBRUSH hMyBrush = (HBRUSH)myBrush;
cs.lpszClass = AfxRegisterWndClass(NULL,NULL,hMyBrush,0);
------解决方案--------------------
CBrush hbkbrush;
用 hbkbrush.m_hObject 看看。
AfxRegisterWndClass可能失败了。
如果是析构问题。
hbkbrush.Detach(); 就行了。
比较下面两端代码
- C/C++ code
BOOL CWndEx::PreCreateWindow(CREATESTRUCT& cs) { // TODO: 在此添加专用代码和/或调用基类 HBRUSH hbkbrush=CreateSolidBrush(RGB(255,0,0)); cs.lpszClass = AfxRegisterWndClass(NULL,NULL,hbkbrush,0); return CWnd::PreCreateWindow(cs); }
- C/C++ code
BOOL CWndEx::PreCreateWindow(CREATESTRUCT& cs) { // TODO: 在此添加专用代码和/或调用基类 CBrush hbkbrush; hbkbrush.CreateSolidBrush(RGB(255,0,0)); cs.lpszClass = AfxRegisterWndClass(NULL,NULL,hbkbrush,0); return CWnd::PreCreateWindow(cs); }
第一段代码所创建的窗口是红色背景,而用第二段代码所创建的窗口是白色背景,WHY ?
------解决方案--------------------
CBrush hbkbrush;
这样定义的局部变量,析构里会自动DeleteObject创建的画刷
------解决方案--------------------
楼上解析正确,
第一段的HBRUSH为画刷句柄,
而第二段的CBrush只是一个局部变量,自动析构
------解决方案--------------------
CBrush hbkbrush;
用 hbkbrush.m_hObject 看看。
AfxRegisterWndClass可能失败了。
------解决方案--------------------
AfxRegisterWndClass()
第三个参数类型是HBRUSH,默认值为0
CBrush myBrush;
myBrush.CreateSolidPenBrush(RGB(255,0,0));
HBRUSH hMyBrush = (HBRUSH)myBrush;
cs.lpszClass = AfxRegisterWndClass(NULL,NULL,hMyBrush,0);
------解决方案--------------------
CBrush hbkbrush;
用 hbkbrush.m_hObject 看看。
AfxRegisterWndClass可能失败了。
如果是析构问题。
hbkbrush.Detach(); 就行了。