我在一个对话框中添加了一个CStatic控件,现在想修改它的背景色 我的代码如下:
1 通过classwizard 添加该对话框的WM_CTLCOLOR 并且在对应的函数中添加了如下代码
if (nCtlColor == IDC_STATIC_YELLOW)
{
pDC->SetTextColor(RGB(100, 112, 1));//设置成你背景的颜色
pDC->SetBkColor(RGB(123,123,32));
return (HBRUSH)::GetStockObject(NULL_BRUSH);
} 2 在该对话框的OnInitDialog方法中添加了如下代码:
CStatic *m_PStatic = (CStatic *) GetDlgItem(IDC_STATIC_YELLOW);
m_PStatic->RedrawWindow();
运行的时候为什么对应的CStatic控件没有改变呢??
请各位说说我这样做错误在哪里? 谢谢
1 通过classwizard 添加该对话框的WM_CTLCOLOR 并且在对应的函数中添加了如下代码
if (nCtlColor == IDC_STATIC_YELLOW)
{
pDC->SetTextColor(RGB(100, 112, 1));//设置成你背景的颜色
pDC->SetBkColor(RGB(123,123,32));
return (HBRUSH)::GetStockObject(NULL_BRUSH);
} 2 在该对话框的OnInitDialog方法中添加了如下代码:
CStatic *m_PStatic = (CStatic *) GetDlgItem(IDC_STATIC_YELLOW);
m_PStatic->RedrawWindow();
运行的时候为什么对应的CStatic控件没有改变呢??
请各位说说我这样做错误在哪里? 谢谢
解决方案 »
- 麻烦给看一下:richedit控件中插入图片后,如何实现右键单击能够选中图片?
- CHttpFile保存网页源代码?
- 关于WORD插件任务栏多窗口时的按钮点击相应
- 注销系统 出现 “程序正在结束,请稍候”框的原因
- VC2008设置新界面的风格后(feature packet 中的office vs2005等风格),CAFXButton 不能设置背景,图像等问题.
- 郁闷!!!!!最简单的线程代码都搞不定。
- 请问有办法隐藏MSFlexGrid控件中的一列或几列数据吗?
- CListCtrl的HeaderCtrl上面的Image背景色怎么设成透明
- 使用ocx的问题
- 关于JSONCPP的问题,大家帮我看看。
- 关于MFC下多人合作开发的任务分配问题???
- 公司要对我进行调整,现在有点烦,下不了决心该怎么办
if (nCtlColor == CTLCOLOR_STATIC)//这里不同
{
SetTextColor() and so on......
}
nCtlColorContains one of the following values, specifying the type of control: CTLCOLOR_BTN Button control
CTLCOLOR_DLG Dialog box
CTLCOLOR_EDIT Edit control
CTLCOLOR_LISTBOX List-box control
CTLCOLOR_MSGBOX Message box
CTLCOLOR_SCROLLBAR Scroll-bar control
CTLCOLOR_STATIC Static control 应该用pWnd参数来判断。
if (pWnd== GetDlgItem(IDC_STATIC_YELLOW))
{
pDC->SetTextColor(RGB(100, 112, 1));//设置成你背景的颜色
pDC->SetBkColor(RGB(123,123,32));
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
{
pDC->SetTextColor(RGB(100, 112, 1));//设置成你背景的颜色
pDC->SetBkColor(RGB(123,123,32));
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
这样来判断好像不行
另外按照上面happyparrot来做的话 我还要不要调用这个
2 在该对话框的OnInitDialog方法中添加了如下代码:
CStatic *m_PStatic = (CStatic *) GetDlgItem(IDC_STATIC_YELLOW);
m_PStatic->RedrawWindow();
// ColorStatic.cpp : implementation file
//#include "stdafx.h"
#include "ColorStatic.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CColorStaticCColorStatic::CColorStatic()
{
m_TextColor = RGB(255,255,255);
m_BackColor = RGB(100,100,100);
}CColorStatic::~CColorStatic()
{
}
BEGIN_MESSAGE_MAP(CColorStatic, CStatic)
//{{AFX_MSG_MAP(CColorStatic)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CColorStatic message handlersvoid CColorStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect); dc.SetBkMode(TRANSPARENT); //设置背景为透明的
CBrush *pBrush = new CBrush(m_BackColor);
//dc.SelectObject(pBrush);
dc.FillRect(&rect,pBrush);
CFont *pFont=GetParent()->GetFont(); //获取主窗口的字体
CFont *pOldFont;
pOldFont=dc.SelectObject(pFont); dc.SetTextColor(m_TextColor);
CString strCaption;
this->GetWindowText(strCaption); //获取窗口文本 dc.DrawText(strCaption,&rect,DT_VCENTER|DT_CENTER|DT_SINGLELINE); dc.SelectObject(pOldFont); delete pBrush;
pBrush = NULL;}void CColorStatic::SetTextColor(COLORREF TextColor)
{
m_TextColor=TextColor;
}void CColorStatic::SetBkColor(COLORREF color = RGB(150,150,150))
{
CRect rect;
GetClientRect(&rect);
m_BackColor = color;
InvalidateRect(&rect);
}
有时只看MFC是不能解决问题.MFC是对SDK进行了封闭而已.
不用这么复杂吧 还要这样做 我只要能够在我定义的对话框中修改我的静态控件背景色就行了
{
HBRUSH hbr = CDialogBar::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
int nID = pWnd->GetDlgCtrlID();
if ((nID >= IDC_STATIC1) && (nID <= IDC_STATIC23))
{
int i=nID-IDC_STATIC1;
m_br.DeleteObject();
m_br.CreateSolidBrush(m_showcol[i]);
hbr = m_br;
// pDC->SetBkMode(TRANSPARENT);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
{
SetTextColor() and so on......
}正确了就给分
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if (nCtlColor == CTLCOLOR_STATIC)
{
if (pWnd->GetDlgCtrlID() == IDC_STATIC_RED)
{
pDC->SetBkColor(RGB(255, 0, 0));
}
if (pWnd->GetDlgCtrlID() == IDC_STATIC_YELLOW)
{
pDC->SetBkColor(RGB(246, 251, 37));
}
if (pWnd->GetDlgCtrlID() == IDC_STATIC_GREEN)
{
pDC->SetBkColor(RGB(0, 255, 0));
}
if (pWnd->GetDlgCtrlID() == IDC_STATIC_BLUE)
{
pDC->SetBkColor(RGB(0, 0, 255));
}
if (pWnd->GetDlgCtrlID() == IDC_STATIC_GRAY)
{
pDC->SetBkColor(RGB(190, 190, 190));
}
if (pWnd->GetDlgCtrlID() == IDC_STATIC_DEEPGREEN)
{
pDC->SetBkColor(RGB(58, 130, 111));
}
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
想了一下 发现可以这样做
if (pWnd->GetDlgCtrlID() == IDC_STATIC_GRAY)
{
pDC->SetBkColor(RGB(190, 190, 190));
}
谢谢上面几位热心的朋友
感谢happyparrot一语中的的解答谢谢