59上位机VC MFC带任意背景图的编辑框
功能展示
正常情况下我们新建的默认程序,编辑框背景都是白色很是乏味,如果我们为编辑框设置张漂亮的背景图片,就是吸引用户美化我们的程序界面,我们当前例程就实现一这一功用,效果如图 要点提示 对背景的处理是通过WM_ERASEBKGND消息来实现。对应的处理函数为OnEraseBkgnd(); 为消除编辑框中文本的背景色影响,我们也得在CtlColor()函数中通过调用 pDC->SetBkMode(TRANSPARENT);设置文本背景模式为透明;在编辑框内容发生变化时,我们进行重画便可实现编辑框背景图片的任意设置;
当然这里还得定义一个位图的变量用于保存编辑框所设置的位图才行 CBitmapm_BkBitmap; 实现功能 1.新建基于对话框的应用程序 2.从编辑框类派生一个自己的类class CBmpEdit : public Cedit; 3.给这个新建的类添加函数CtlColor(), OnChange() ,OnEraseBkgnd()函数,函数实体为 - BOOL CBmpEdit::OnEraseBkgnd(CDC* pDC)
- {
- if (m_BkBitmap.GetSafeHandle())
- {
- CDC memDC;
- memDC.CreateCompatibleDC(pDC);
- memDC.SelectObject(&m_BkBitmap);
- BITMAP m_Bmp;
- m_BkBitmap.GetBitmap(&m_Bmp);
- int x = m_Bmp.bmWidth;
- int y = m_Bmp.bmHeight;
- CRect rect;
- GetClientRect(rect);
- pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,x,y,SRCCOPY);
- memDC.DeleteDC();
- return TRUE;
- }
- return CEdit::OnEraseBkgnd(pDC);
- }
复制代码- void CBmpEdit::OnChange()
- {
- Invalidate();
- }
- HBRUSH CBmpEdit::CtlColor(CDC* pDC, UINT nCtlColor)
- {
- pDC->SetBkMode(TRANSPARENT);
- return NULL;
- }
复制代码4.添加用以保存背景位图的变量private: CBitmap m_BkBitmap;及设置它的函数public: voidSetBkBitmapID(UINT nSourceID); 5.最后是这个自定义编辑框类的使用,在对话框中添加此类头文件,添加一编辑框控件,设置一些多行,换行等属性,并关联一个变量CBmpEdit m_Edit;这个变量进行加载位置便可实现编辑框位图的任意修改
|