首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么通过控件句柄来设置控件的背景颜色

2012-12-16 
如何通过控件句柄来设置控件的背景颜色通过 GetDlgItem(IDC_XXX) 得到控件的句柄,如何通过这个句柄改变控

如何通过控件句柄来设置控件的背景颜色
通过 GetDlgItem(IDC_XXX) 得到控件的句柄,如何通过这个句柄改变控件的背景颜色,而后又恢复原来的颜色?
[最优解释]
GetDC(),GetWindowDC(),SetBkColor(),改回来的话加个定时器将原有颜色缓存起来,到时候恢复
另外不同的控件有不同的方法,比如Rich Edit的EM_SETBKGNDCOLOR
[其他解释]
改变控件的颜色只需要添加WM_CTLCOLOR消息就行了吧
HBRUSH CDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 

// TODO:  在此更改 DC 的任何属性
        if(pWnd->GetDlgCtrlID() == IDC_BUTTON1)//这里把ID改成你想改的控件就行了啊
        {
         pDC->SetBkColor(RGB(255,0,255));  
 hbr = CreateSolidBrush(RGB(255,0,255));
        }

// TODO:  如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}

[其他解释]
ON_WM_CTLCOLOR_REFLECT() (反射的机制是控件自己)
或者
ON_WM_CTLCOLOR(控件父窗体)


HBRUSH XXXXX::CtlColor(CDC* pDC, UINT /*nCtlColor*/)
{
HBRUSH hbr = CreateSolidBrush(RGB(255,255,255));

// TODO:  Change any attributes of the DC here
pDC->SetBKColor(RGB(255,0,0));
// TODO:  Return a different brush if the default is not desired
return hbr;
}


[其他解释]
GetClientRect()坐标永远top=0,left=0
用GetWindowRect()然后ScreenToClient()转成相对位置
[其他解释]
CRect  m_Rect;
HDC  m_hDC;

hWnd为控件句柄
GetClientRect(hWnd,m_Rect);

m_hDC = GetDC(hWnd);

得到的m_Rect为{top=0 bottom=267 left=0 right=230}
控件在中间位置,位置明显不对了,用错了吗 GetClientRect

[其他解释]
GetWindowRect(hWnd,m_Rect);

m_hDC = GetWindowDC(hWnd);

//ScreenToClient(hWnd,&pt);

COLORREF colorref = SetBkColor(m_hDC,RGB(255,0,255));

还是没效果。请问是哪错了 还是缺了什么
[其他解释]
我是在一个独立封装类里面处理,接收控件的句柄,而不涉及这些消息
[其他解释]
HWND hwnd = ::GetDlgItem(m_hWnd,IDC_STATIC);

通过这个句柄在其他类里面设置控件背景颜色,
CRect rect;

GetWindowRect(hwnd,rect);

HDC hDC = GetWindowDC(hwnd);

COLORREF colorref = SetBkColor(hDC,RGB(255,0,255));

没有变化。。

应该怎么用?
[其他解释]
有谁知道的提示一下。。  改不了背景颜色,  哪的问题?

热点排行