首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC窗口切换 背景图片消失

2012-01-16 
【急】MFC窗口切换 背景图片消失MFC对话框程序我在OnEraseBkgnd里面绘制背景C/C++ codeBOOL CFaFunBarDlg::O

【急】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会失败。

热点排行