散分!CEdit自绘背景,该如何处理
散分!CEdit自绘背景
CEdit背景自绘.
方案:
在CtlColor设置透明.
在OnEraseBkgnd自绘.
在OnEnChange使之无效.
代码如下.
响应WM_ERASEBKGND
响应=WM_CTLCOLOR
最后,
这里需要注意的是,设置透明是在=WM_CTLCOLOR里设置的,不是在WM_CTLCOLOR中.
有=的是从父窗口反射回来的消息.当然也可以在父窗口的WM_CTLCOLOR中设置透明,不过这样就封装得不好了.
------解决方案--------------------
分享帖??
接分。。。
------解决方案--------------------
JF......
------解决方案--------------------
谢谢LZ,学习了
------解决方案--------------------
接~~~~
------解决方案--------------------
学习一下,老长时间不做这方面了
------解决方案--------------------
接分,顺便学习
------解决方案--------------------
jf~
------解决方案--------------------
用这个方法改变过CEdit的背景色,没绘过图
------解决方案--------------------
学习。。。
------解决方案--------------------
谢谢lz,学习了
------解决方案--------------------
虚心学习
------解决方案--------------------
来凑个热闹
------解决方案--------------------
好人啊
------解决方案--------------------
占位学习
------解决方案--------------------
mark,学习下
------解决方案--------------------
------解决方案--------------------
CEdit背景自绘.
方案:
在CtlColor设置透明.
在OnEraseBkgnd自绘.
在OnEnChange使之无效.
代码如下.
- C/C++ code
#pragma once // CBmpEdit class CBmpEdit : public CEdit { DECLARE_DYNAMIC(CBmpEdit) public: CBmpEdit(); virtual ~CBmpEdit(); protected: DECLARE_MESSAGE_MAP() public: afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); public: CBitmap m_Bitmap; CBrush m_Brush; afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg void OnEnChange(); };
响应WM_ERASEBKGND
- C/C++ code
CBmpEdit::CBmpEdit() { m_Bitmap.LoadBitmap(IDB_BITMAP1); } BOOL CBmpEdit::OnEraseBkgnd(CDC* pDC) { //TODO: 在此添加消息处理程序代码和/或调用默认值 CDC memDC; memDC.CreateCompatibleDC(pDC); memDC.SelectObject(&m_Bitmap); BITMAP m_Bmp; m_Bitmap.GetBitmap(&m_Bmp); CRect rect; GetClientRect(&rect); //拉伸贴图 pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),&memDC,0,0,m_Bmp.bmWidth,m_Bmp.bmHeight,SRCCOPY); memDC.DeleteDC(); return TRUE; //return CEdit::OnEraseBkgnd(pDC); }
响应=WM_CTLCOLOR
- C/C++ code
HBRUSH CBmpEdit::CtlColor(CDC* pDC, UINT nCtlColor) { // TODO: 在此更改 DC 的任何属性 //透明 pDC->SetBkMode(TRANSPARENT); //字体色彩 pDC->SetTextColor(RGB(0,255,0)); //空的画笔 return (HBRUSH)GetStockObject(HOLLOW_BRUSH); // TODO: 如果默认的不是所需画笔,则返回另一个画笔 }
最后,
- C/C++ code
void CBmpEdit::OnEnChange() { //使无效 Invalidate(); }
这里需要注意的是,设置透明是在=WM_CTLCOLOR里设置的,不是在WM_CTLCOLOR中.
有=的是从父窗口反射回来的消息.当然也可以在父窗口的WM_CTLCOLOR中设置透明,不过这样就封装得不好了.
------解决方案--------------------
分享帖??
接分。。。
------解决方案--------------------
JF......
------解决方案--------------------
谢谢LZ,学习了
------解决方案--------------------
接~~~~
------解决方案--------------------
学习一下,老长时间不做这方面了
------解决方案--------------------
接分,顺便学习
------解决方案--------------------
jf~
------解决方案--------------------
用这个方法改变过CEdit的背景色,没绘过图
------解决方案--------------------
学习。。。
------解决方案--------------------
谢谢lz,学习了
------解决方案--------------------
虚心学习
------解决方案--------------------
来凑个热闹
------解决方案--------------------
好人啊
------解决方案--------------------
占位学习
------解决方案--------------------
mark,学习下
------解决方案--------------------
------解决方案--------------------