方法一(成功):
HBRUSH COptionsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
//用下面GetDlgCtrlID比较,能够成功改变STATIC背景颜色
if (pWnd->GetDlgCtrlID() == IDC_STATIC_BACKCOLOR) {
HBRUSH brush=CreateSolidBrush(m_nBackColor);
pWnd->GetDC()->SetBkColor(m_nBackColor);
return brush;
}
}
return hbr;
}方法二(失败):HBRUSH COptionsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
//用下面GetDlgItem比较,没有进入IF模块
if (pWnd == GetDlgItem(IDC_STATIC_BACKCOLOR)) {
HBRUSH brush=CreateSolidBrush(m_nBackColor);
pWnd->GetDC()->SetBkColor(m_nBackColor);
return brush;
}
}
return hbr;
}难道
如果pWnd->GetDlgCtrlID() == IDC_STATIC_BACKCOLOR相等的话,
pWnd 和 GetDlgItem(IDC_STATIC_BACKCOLOR)回不相等?请问为什么?
HBRUSH COptionsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
//用下面GetDlgCtrlID比较,能够成功改变STATIC背景颜色
if (pWnd->GetDlgCtrlID() == IDC_STATIC_BACKCOLOR) {
HBRUSH brush=CreateSolidBrush(m_nBackColor);
pWnd->GetDC()->SetBkColor(m_nBackColor);
return brush;
}
}
return hbr;
}方法二(失败):HBRUSH COptionsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
//用下面GetDlgItem比较,没有进入IF模块
if (pWnd == GetDlgItem(IDC_STATIC_BACKCOLOR)) {
HBRUSH brush=CreateSolidBrush(m_nBackColor);
pWnd->GetDC()->SetBkColor(m_nBackColor);
return brush;
}
}
return hbr;
}难道
如果pWnd->GetDlgCtrlID() == IDC_STATIC_BACKCOLOR相等的话,
pWnd 和 GetDlgItem(IDC_STATIC_BACKCOLOR)回不相等?请问为什么?
GetDlgItem(IDC_STATIC_BACKCOLOR)是取当前窗口中的子控制IDC_STATIC_BACKCOLOR的句柄,如果pWnd是对话框句柄,那么GetDlgItem(IDC_STATIC_BACKCOLOR)就是背景的句柄;如果pWnd是背景句柄,那么GetDlgItem(IDC_STATIC_BACKCOLOR)就是背景的子控制句柄。懂了吗?
SDK下是句柄
MFC下是指针这下行了吧?