关于窗口中画刷有关问题

关于窗口中画刷问题
比较下面两端代码

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(); 就行了。