请各位高手帮帮忙:给界面加上背景图片后出现了问题!急!!! 我给VC界面背景添加了Bitmap背景,但添加上背景后,Edit控件被背景遮住了三分之一,请问各位高手这是怎么回事啊?应该怎样才能解决这个问题呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先放背景图片到dialog,再放edit看看 为什么会遮住三分之一呢?要不全遮,要不就不遮.试试下面的,不覆盖控件的.BOOL CXXXDlg::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default CString string="E:\\Pic\\BACKGROUND.bmp"; HBITMAP hbitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),string, IMAGE_BITMAP,1024,768, LR_CREATEDIBSECTION|LR_LOADFROMFILE); //VERY IMPORTANT:NOT CALL THE SUPER CLASS FUNCTION CPaintDC dc(this); if(hbitmap==NULL) return FALSE; CBitmap bitmap; bitmap.Attach(hbitmap); BITMAP bmp; bitmap.GetBitmap(&bmp); CDC cdc; cdc.CreateCompatibleDC(pDC); cdc.SelectObject(&bitmap); pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&cdc,0,0,SRCCOPY); return TRUE;} 放在OnEraseBkgnd中,直接返回true 我是新手,还想请问一下,OnEraseBkgnd函数是映射什么消息生成的函数,还是需要自己增加消息?非常感谢各位高手的热心帮助,呵呵! 右键单击对话框->Events->右下角选择childwindow,添加WM_EraseBkgnd.然后在对话框的ClassWizard里添加EraseBkgnd的事件 非常感谢,但还是没有解决Edit控件被遮住三分之一的问题,请问还有别的方法吗? 看看Edit控件旁边有没有静态文本之类的,有可能是其它的控件挡住了吧。 不是其它控件挡住的原因,就算界面上只放一个Edit控件,加上背景后也是会挡住三分之一,Edit控件中的光标也是变成了原来的三分之一,到底是什么原因呢?真是着急啊,不过还是很感谢你的帮助! 先导入一副BMP图片资源,id改为IDB_BITMAP1在对话框头文件加入如下两个变量:CBitmap m_bitmap;CBrush m_brush;再给对话框增加个WM_CTLCOLOR消息处理函数,代码如下:HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor==CTLCOLOR_DLG) { return m_brush; } return hbr;}BOOL MyDlg::OnInitDialog() { CDialog::OnInitDialog(); m_bitmap.LoadBitmap(IDB_BTIMAP); m_brush.CreatePatternBrush(&m_bitmap); return TRUE; }这段代码加上后,背景图片显示没有问题,Edit控件也不会被挡,但是CStatic控件的背景不透明,为了让cStatic控件的背景透明,我又在OnCtlColor函数中加了下面的代码:if(nCtlColor==CTLCOLOR_STATIC){ pDC->SetBkMode(TRANSPARENT);}return HBRUSH(GetStockObject(HOLLOW_BRUSH));加上这段代码后CStatic控件的背景是透明了,但Edit控件被背景图片挡住了三分之一,请各位帮我看看,是不是我加的代码有问题,应该怎么修改? HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor==CTLCOLOR_DLG) { return m_brush; } if(nCtlColor==CTLCOLOR_STATIC) { pDC->SetBkMode(TRANSPARENT); return HBRUSH(GetStockObject(HOLLOW_BRUSH));/////是这里 } return hbr;} 谢谢covsno(),我看了好久了都没有看到到底哪里错了,你帮我解决了问题,真的非常感谢!!! 用BCG10做界面始终不能显示关闭按钮的图标 讨论个方案,关于多方向运动控制的 每日一贴 有没有这个MFC类? 关于使用CSocket实现CS模式的聊天室 如何放大,缩小,以及拖动一张位图 关于VC中的数据类型 请问用VC怎么读3ds文件,及3ds文件数据结构是怎样的,谢谢!急! 请各位高手给予指点?????? 是否有将字符串按一定条件分解成一个数组的函数? D3D纹理绘制怎样像素对齐(不用消除锯齿) 判断命令按钮是否弹出新窗口? 我想编写一个教师工资管理系统 我现在实现了一些功能 我还想在里面进行添加和删除修改不知道怎么做了 我是第一次做这个 请教
要不全遮,要不就不遮.
试试下面的,不覆盖控件的.BOOL CXXXDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CString string="E:\\Pic\\BACKGROUND.bmp";
HBITMAP hbitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),string,
IMAGE_BITMAP,1024,768, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
//VERY IMPORTANT:NOT CALL THE SUPER CLASS FUNCTION
CPaintDC dc(this);
if(hbitmap==NULL)
return FALSE;
CBitmap bitmap;
bitmap.Attach(hbitmap);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC cdc;
cdc.CreateCompatibleDC(pDC);
cdc.SelectObject(&bitmap);
pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&cdc,0,0,SRCCOPY);
return TRUE;
}
然后在对话框的ClassWizard里添加EraseBkgnd的事件
在对话框头文件加入如下两个变量:
CBitmap m_bitmap;
CBrush m_brush;
再给对话框增加个WM_CTLCOLOR消息处理函数,代码如下:
HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_DLG)
{
return m_brush;
}
return hbr;
}
BOOL MyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_bitmap.LoadBitmap(IDB_BTIMAP);
m_brush.CreatePatternBrush(&m_bitmap);
return TRUE;
}
这段代码加上后,背景图片显示没有问题,Edit控件也不会被挡,但是CStatic控件的背景不透明,为了让cStatic控件的背景透明,我又在OnCtlColor函数中加了下面的代码:
if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
}
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
加上这段代码后CStatic控件的背景是透明了,但Edit控件被背景图片挡住了三分之一,请各位帮我看看,是不是我加的代码有问题,应该怎么修改?
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_DLG)
{
return m_brush;
}
if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
return HBRUSH(GetStockObject(HOLLOW_BRUSH));/////是这里
}
return hbr;
}