如何通过控件句柄来设置控件的背景颜色
通过 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));
没有变化。。
应该怎么用?
[其他解释]
有谁知道的提示一下。。 改不了背景颜色, 哪的问题?