读书人

MFC窗口切换 背景图片消失

发布时间: 2012-01-16 23:36:51 作者: rapoo

【急】MFC窗口切换 背景图片消失
MFC对话框程序

我在OnEraseBkgnd里面绘制背景

C/C++ code
BOOL CFaFunBarDlg::OnEraseBkgnd( CDC* pDC ){    CPaintDC dc(this);    CDC dcMem;    dcMem.CreateCompatibleDC(&dc);     BITMAP bitMap;    m_bmpBG.GetBitmap(&bitMap);    dcMem.SelectObject(&m_bmpBG);    dc.StretchBlt(0,0,480,320,&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);    ReleaseDC(&dcMem);    return TRUE;}


现在来说明现象:
现象一,当我的程序运行起来后,显示正常,然后启动另一个全屏程序遮挡住,然后再点这个程序的最小化,我的程序显示正常。
现象二,当我的程序运行起来后,显示正常,然后启动另一个全屏程序遮挡住,在任务栏点击该全屏程序,同样是使全屏程序进行最小化切换我的程序,但这是后,我的程序的背景就没有了。


下面是我用spy++监听的
现象一(显示正常):
WM_SYNCPAINT
WM_NCPAINT hrgn:00000001
WM_NCPAINT
WM_ERASEBACKGND hdc:2F0128E0
WM_ERASEBACKGND fErased:True
WM_SYNCPAINT

现象二(显示不正常):

WM_NCPAINT hrgn:00000000
WM_NCPAINT hrgn:00000001
WM_NCPAINT
WM_ERASEBACKGND hdc:92013712
WM_ERASEBACKGND fErased:True

以上:都有触发WM_ERASEBACKGND消息,但是第一种正常,第二种不正常,求指教

WM_SYNCPAINT 有影响吗? 求高手解答


[解决办法]
在OnPaint里面画背景
[解决办法]
用函数传递进来的 CDC* pDC 画
[解决办法]
检查下StretchBlt的返回值,当第二种不正常 时看看返回值
貌似不正常了
[解决办法]
CPaintDC用于OnPaint函数中,具体的仔细看下MFC的几种DC的区别;

用函数传入的pDC绘制;

兼容DC用DeleteDC删掉,若用ReleaseDC会失败。

读书人网 >VC/MFC

热点推荐