7 个解决方案
#1
试试处理一下 WM_ERASEBACKGROUND 消息吧
在 WinCE 系统,使用系统提示的控件,想实现比较的显示效果还是比较困难的。所以,一般我们都用自己写的控件,其实就是贴图。
在 WinCE 系统,使用系统提示的控件,想实现比较的显示效果还是比较困难的。所以,一般我们都用自己写的控件,其实就是贴图。
#2
CtlColor中return的HBRUSH时候正确?
必须用背景色创建一个HBRUSH返回。
我就是这样用的,没你说的问题。
必须用背景色创建一个HBRUSH返回。
我就是这样用的,没你说的问题。
#3
CBrush brush;
brush.CreateSolidBrush(RGB(0x43,0x6E,0xEE));
if(pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
CFont m_font;
m_font.CreatePointFont((L"d%",300),_T("宋体"));
pDC->SelectObject(&m_font);
pDC->SetBkColor(RGB(0x43,0x6E,0xEE));
}
return brush;
返回了还是不行啊,还是只有文字下面的背景色改变了,我对话框是设置的全屏,字体设置的300,就把静态文本框调的能够完全显示里面的文字,然后静态文本框没有文字的地方背景色还是没有变。也有看到文章说SetBkColor就是设置静态文本框的中文字的背景颜色的,不是整个静态文本框的颜色。
然后用FillSolidRect还是不行,效果一样,都是只有文字下面的背景色改变了
CBrush brush;
brush.CreateSolidBrush(RGB(0x43,0x6E,0xEE));
if(pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
CRect rcCtrl;
pWnd->GetWindowRect( &rcCtrl ); //获取控件位置
ScreenToClient( &rcCtrl ); //转换到对话框
//获取ClientDC
CDC *pBkDC = GetDC();
//拷贝背景
pDC->BitBlt(0, 0, rcCtrl.Width(), rcCtrl.Height(),
pBkDC, rcCtrl.left, rcCtrl.top, SRCCOPY);
//清理工作
ReleaseDC( pBkDC ); //释放ClientDC
pDC->FillSolidRect(&rcCtrl,RGB(0x43,0x6E,0xEE)); //背景透明模式
//hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
return brush;
你是在wince 6.0 下吗,看了不帖子其他人也有这个问题,但是都没有具体的解决方法,能不能贴一下你的代码?
#4
贴图?直接把静态文本框的背景设置成位图?还是直接贴个图片做控件,能不能给个具体的例子的代码看看你怎么实现的。
#5
用成员变量,不要用局部变量,你要返回给系统用你还用局部变量,肯定不行了。
#6
另外我是直接子类化了,不是修改dialog中的CtlColor,而是直接在子类中修改。
HBRUSH QColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
HBRUSH hbr = (HBRUSH)m_brBkgnd;
pDC->SetBkColor(m_BkColor);
pDC->SetTextColor(m_TextColor);
pDC->SetBkMode(TRANSPARENT);
return hbr;
}
void QColorEdit::SetTextColor(COLORREF color)
{
m_TextColor = color;
RedrawWindow();
}
void QColorEdit::SetBkColor(COLORREF color)
{
m_BkColor = color;
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(color);
RedrawWindow();
}
QColorEdit::QColorEdit()
{
m_BorderColor = RGB(64,128,192);
m_BkColor = RGB(255,255,255);
m_TextColor = RGB(0,0,0);
m_brBkgnd.CreateSolidBrush(m_BkColor);
}
QColorEdit::~QColorEdit()
{
m_brBkgnd.DeleteObject();
}
贴部分代码给你参考。
HBRUSH QColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
HBRUSH hbr = (HBRUSH)m_brBkgnd;
pDC->SetBkColor(m_BkColor);
pDC->SetTextColor(m_TextColor);
pDC->SetBkMode(TRANSPARENT);
return hbr;
}
void QColorEdit::SetTextColor(COLORREF color)
{
m_TextColor = color;
RedrawWindow();
}
void QColorEdit::SetBkColor(COLORREF color)
{
m_BkColor = color;
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(color);
RedrawWindow();
}
QColorEdit::QColorEdit()
{
m_BorderColor = RGB(64,128,192);
m_BkColor = RGB(255,255,255);
m_TextColor = RGB(0,0,0);
m_brBkgnd.CreateSolidBrush(m_BkColor);
}
QColorEdit::~QColorEdit()
{
m_brBkgnd.DeleteObject();
}
贴部分代码给你参考。
#7
if(nCtlColor == CTLCOLOR_STATIC)
{
HBRUSH brush;
brush=CreateSolidBrush(RGB(0x43,0x6E,0xEE));
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
return brush;
}
最后还是返回和背景色一样的画刷大道效果了
{
HBRUSH brush;
brush=CreateSolidBrush(RGB(0x43,0x6E,0xEE));
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
return brush;
}
最后还是返回和背景色一样的画刷大道效果了
#1
试试处理一下 WM_ERASEBACKGROUND 消息吧
在 WinCE 系统,使用系统提示的控件,想实现比较的显示效果还是比较困难的。所以,一般我们都用自己写的控件,其实就是贴图。
在 WinCE 系统,使用系统提示的控件,想实现比较的显示效果还是比较困难的。所以,一般我们都用自己写的控件,其实就是贴图。
#2
CtlColor中return的HBRUSH时候正确?
必须用背景色创建一个HBRUSH返回。
我就是这样用的,没你说的问题。
必须用背景色创建一个HBRUSH返回。
我就是这样用的,没你说的问题。
#3
CBrush brush;
brush.CreateSolidBrush(RGB(0x43,0x6E,0xEE));
if(pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
CFont m_font;
m_font.CreatePointFont((L"d%",300),_T("宋体"));
pDC->SelectObject(&m_font);
pDC->SetBkColor(RGB(0x43,0x6E,0xEE));
}
return brush;
返回了还是不行啊,还是只有文字下面的背景色改变了,我对话框是设置的全屏,字体设置的300,就把静态文本框调的能够完全显示里面的文字,然后静态文本框没有文字的地方背景色还是没有变。也有看到文章说SetBkColor就是设置静态文本框的中文字的背景颜色的,不是整个静态文本框的颜色。
然后用FillSolidRect还是不行,效果一样,都是只有文字下面的背景色改变了
CBrush brush;
brush.CreateSolidBrush(RGB(0x43,0x6E,0xEE));
if(pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
CRect rcCtrl;
pWnd->GetWindowRect( &rcCtrl ); //获取控件位置
ScreenToClient( &rcCtrl ); //转换到对话框
//获取ClientDC
CDC *pBkDC = GetDC();
//拷贝背景
pDC->BitBlt(0, 0, rcCtrl.Width(), rcCtrl.Height(),
pBkDC, rcCtrl.left, rcCtrl.top, SRCCOPY);
//清理工作
ReleaseDC( pBkDC ); //释放ClientDC
pDC->FillSolidRect(&rcCtrl,RGB(0x43,0x6E,0xEE)); //背景透明模式
//hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
return brush;
你是在wince 6.0 下吗,看了不帖子其他人也有这个问题,但是都没有具体的解决方法,能不能贴一下你的代码?
#4
贴图?直接把静态文本框的背景设置成位图?还是直接贴个图片做控件,能不能给个具体的例子的代码看看你怎么实现的。
#5
用成员变量,不要用局部变量,你要返回给系统用你还用局部变量,肯定不行了。
#6
另外我是直接子类化了,不是修改dialog中的CtlColor,而是直接在子类中修改。
HBRUSH QColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
HBRUSH hbr = (HBRUSH)m_brBkgnd;
pDC->SetBkColor(m_BkColor);
pDC->SetTextColor(m_TextColor);
pDC->SetBkMode(TRANSPARENT);
return hbr;
}
void QColorEdit::SetTextColor(COLORREF color)
{
m_TextColor = color;
RedrawWindow();
}
void QColorEdit::SetBkColor(COLORREF color)
{
m_BkColor = color;
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(color);
RedrawWindow();
}
QColorEdit::QColorEdit()
{
m_BorderColor = RGB(64,128,192);
m_BkColor = RGB(255,255,255);
m_TextColor = RGB(0,0,0);
m_brBkgnd.CreateSolidBrush(m_BkColor);
}
QColorEdit::~QColorEdit()
{
m_brBkgnd.DeleteObject();
}
贴部分代码给你参考。
HBRUSH QColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
HBRUSH hbr = (HBRUSH)m_brBkgnd;
pDC->SetBkColor(m_BkColor);
pDC->SetTextColor(m_TextColor);
pDC->SetBkMode(TRANSPARENT);
return hbr;
}
void QColorEdit::SetTextColor(COLORREF color)
{
m_TextColor = color;
RedrawWindow();
}
void QColorEdit::SetBkColor(COLORREF color)
{
m_BkColor = color;
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(color);
RedrawWindow();
}
QColorEdit::QColorEdit()
{
m_BorderColor = RGB(64,128,192);
m_BkColor = RGB(255,255,255);
m_TextColor = RGB(0,0,0);
m_brBkgnd.CreateSolidBrush(m_BkColor);
}
QColorEdit::~QColorEdit()
{
m_brBkgnd.DeleteObject();
}
贴部分代码给你参考。
#7
if(nCtlColor == CTLCOLOR_STATIC)
{
HBRUSH brush;
brush=CreateSolidBrush(RGB(0x43,0x6E,0xEE));
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
return brush;
}
最后还是返回和背景色一样的画刷大道效果了
{
HBRUSH brush;
brush=CreateSolidBrush(RGB(0x43,0x6E,0xEE));
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
return brush;
}
最后还是返回和背景色一样的画刷大道效果了