我新建一个工程MFC AppWizard[exe],下一步选择的是Dialog based,而不是Single document,这样运行后弹出来的是一个对话框,而不是一个菜单窗口,接下来我想在这个对话框上贴上一幅我自己的位图,这就奇怪了,这个对话框没有响应处理函数OnEraseBKgnd(),好像这个函数只有菜单窗口类有而对话框窗口类没有(这是为什么啊???),我就另想了一个办法,办法如下:
1,在窗口初始化函数BOOL CTest001Dlg::OnInitDialog()里面
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);
m_brushBK.CreatePatternBrush(&bitmap);//定义了m_brushBK为CBrush类型
bitmap.DeleteObject();
2,重载了函数OnCtlColor,在里面加了代码如下:
HBRUSH CTest001Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(pWnd == this)
{
return m_brushBK;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
运行后只能显示位图的一部分,不能完整的显示,我想完整的现实,请问有什么办法。
另外,我还想了一个办法,直接就是在初始化函数OnInitDialog()里面加了如下代码
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);
CDC *pDC;
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);//这个函数是可以完整显示一幅位图的
运行后无任何反应,但是也没有错误。
可是我发现以上的代码放在OnEraseBKgnd()里面可以,但是对话框窗口类没有这个函数啊,请问办法怎么解决?
1,在窗口初始化函数BOOL CTest001Dlg::OnInitDialog()里面
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);
m_brushBK.CreatePatternBrush(&bitmap);//定义了m_brushBK为CBrush类型
bitmap.DeleteObject();
2,重载了函数OnCtlColor,在里面加了代码如下:
HBRUSH CTest001Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(pWnd == this)
{
return m_brushBK;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
运行后只能显示位图的一部分,不能完整的显示,我想完整的现实,请问有什么办法。
另外,我还想了一个办法,直接就是在初始化函数OnInitDialog()里面加了如下代码
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);
CDC *pDC;
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);//这个函数是可以完整显示一幅位图的
运行后无任何反应,但是也没有错误。
可是我发现以上的代码放在OnEraseBKgnd()里面可以,但是对话框窗口类没有这个函数啊,请问办法怎么解决?
C**Dlg类派生于CDialog类,
而CView,CDialog都派生于CWnd类,OnEraseBKgnd()究竟是在哪个类中的函数啊