如题“对话框背景图片挡住了控件”,在头文件中:CBitmap m_bitmapBack;
HICON m_hIcon;
在OnInitDialog()中:m_bitmapBack.LoadBitmap(IDB_BITMAP3);在OnPaint()中: if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this);
dc.DrawState(CPoint(0,0), CSize(318,256), m_bitmapBack, DST_BITMAP);
CDialog::OnPaint();
}
结果是我的背景图片把对话框上的所有控件挡住了,只有点击或者光标在控件上移动才会看到控件,请教如何解决背景图片挡住控件这个问题啊?
HICON m_hIcon;
在OnInitDialog()中:m_bitmapBack.LoadBitmap(IDB_BITMAP3);在OnPaint()中: if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this);
dc.DrawState(CPoint(0,0), CSize(318,256), m_bitmapBack, DST_BITMAP);
CDialog::OnPaint();
}
结果是我的背景图片把对话框上的所有控件挡住了,只有点击或者光标在控件上移动才会看到控件,请教如何解决背景图片挡住控件这个问题啊?
解决方案 »
- 关于cview窗口画图的问题
- ATL创建Activex控件的问题!
- 如何把lParam转换成CString?
- 凌晨散分~~
- 问一个vc里嵌入汇编的问题
- 组合框中设置的items不显示是什么原因?
- 如何在VC++中使用_ConnectionPtr对象建立非DSN的连接?
- 如果m_ofn.Flags需要多加几个数值应该怎么办呢?
- 我用COleClientItem::CreateNewItem创建了一个OLE Item,向RichEdit中插入了一个控件,我怎么拿回这个控件的对象变量?
- win32中如何添加GDI+
- 求ftp问题解答,急急急!!!
- VC6.0MFC中如何在webbrowser控件中填写网页表单?
{
CRect rect;
CBitmap bitmap;
BITMAP bmp;
CDC dcCompatible; bitmap.LoadBitmap(IDB_BITMAP3);
bitmap.GetBitmap(&bmp);
dcCompatible.CreateCompatibleDC(pDC);
CBitmap *pOlBitmap = dcCompatible.SelectObject(&bitmap);
GetWindowRect(&rect); pDC->SetStretchBltMode(COLORONCOLOR);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
dcCompatible.SelectObject(pOlBitmap);
DeleteDC(dcCompatible.m_hDC);
return TRUE; } 我试过这样做,但是初始化的时候跑不到这里,如何解决啊
支持2楼的。OnPaint调用要比OnEraseBkGnd频繁的多,不管从效率还是效果上都没有OnEraseBkGnd来的好。而OnEraseBkGnd函数只是在刷新背景时才被触发,所以被调用的几率很低,避免了被经常调用,而且他应该也是显示在最下层的。