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

MFC非客户区重绘有关问题

2012-12-16 
MFC非客户区重绘问题,高手进!有一个父窗口DLG_PARENT和一个子窗口DLG_CHILD,父窗口上有按钮button点击DoMo

MFC非客户区重绘问题,高手进!
有一个父窗口DLG_PARENT和一个子窗口DLG_CHILD,父窗口上有按钮button点击DoModal()方式连接到子窗口,父窗口PARENT和子窗口DLG_CHILD的客户区和非客户区都用BMP做背景图

问题是这样:单击父窗口的Button打开子窗口,然后不关闭子窗口,再点击任意可见的父窗口位置,发现子窗口DLG_CHILD的非客户区背景图不见了,客户区背景还在。

问这是什么原因,怎么解决?

越详细越好,谢谢啦!
[最优解释]
可能是你的非客户区重绘写的有问题?你刷新一下父窗口看看能显示非客户区不?
[其他解释]
问题补充:我在OnEraseBkgnd()和DefWindowProc()函数里都调用了非客户区重绘函数!谁给个例子,详细点的,高手帮忙啊!
[其他解释]
我的非客户区重绘函数是这样的,请帮忙看看!
void CDataBaseImport::DrawDlg(void)
{
CDC* pDC = GetWindowDC();
int nTitleHeight = GetSystemMetrics(SM_CYCAPTION);
CRect wndRC;
GetWindowRect(wndRC);
wndRC.OffsetRect(wndRC.Width(),wndRC.Height());

int nborder = ::GetSystemMetrics(SM_CXFIXEDFRAME);
if(GetStyle()&WS_THICKFRAME)
{
int nborder = ::GetSystemMetrics(SM_CXBORDER);
}
CBitmap bmp;

//加载左边界位图
bmp.LoadBitmap(DB_BK_2_LEFT);
BITMAP so_bmp;
bmp.GetBitmap(&so_bmp);
int nBmpWidth, nbmpHeight;
nBmpWidth = so_bmp.bmWidth;
nbmpHeight = so_bmp.bmHeight;

CDC memDC;

memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&bmp);

pDC->StretchBlt(0,nTitleHeight,nborder,wndRC.Height()-nTitleHeight,&memDC,0,0,nBmpWidth,
nbmpHeight,SRCCOPY);

bmp.DeleteObject();

//加载右边界位图
bmp.LoadBitmap(DB_BK_2_RIGHT);

bmp.GetBitmap(&so_bmp);
nBmpWidth = so_bmp.bmWidth;
nbmpHeight = so_bmp.bmHeight;
memDC.SelectObject(&bmp);

pDC->StretchBlt(wndRC.Width()-nborder,nTitleHeight,nborder,wndRC.Height()-nTitleHeight,&memDC,0,0,nBmpWidth,
nbmpHeight,SRCCOPY);

bmp.DeleteObject();

//加载底边位图
bmp.LoadBitmap(DB_BK_2_BOTTOM);

bmp.GetBitmap(&so_bmp);
nBmpWidth = so_bmp.bmWidth;
nbmpHeight = so_bmp.bmHeight;

memDC.SelectObject(&bmp);

pDC->StretchBlt(nborder,wndRC.Height()-nborder,wndRC.Width()-2*nborder,nborder,&memDC,0,0,nBmpWidth,
nbmpHeight,SRCCOPY);

bmp.DeleteObject();


//加载标题栏位图
bmp.LoadBitmap(DB_BK_2_TITLE);

bmp.GetBitmap(&so_bmp);
nBmpWidth = so_bmp.bmWidth;
nbmpHeight = so_bmp.bmHeight;

memDC.SelectObject(&bmp);

pDC->StretchBlt(0,0,wndRC.Width(),nTitleHeight+nborder,&memDC,0,0,nBmpWidth,
nbmpHeight,SRCCOPY);

bmp.DeleteObject();
memDC.DeleteDC();
}
[其他解释]
學習了、///

热点排行