我现在把radio button 设成不响应外部选择(取消其属性菜单里Styles tab 下的自动选项),
我现在利用该radio button group作为显示程序中一个变量的状态的显示面板。这时候程序是正确的。点击radio button 不会出错。
我同时需要动态改变一个static button 的背景颜色。我重载函数
HBRUSH CS1_Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor == CTLCOLOR_STATIC
&& m_pwdBttn[3]->GetDlgCtrlID() == IDC_STATIC_RECEIVE
&& m_bModify == TRUE)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(m_clrText);
m_bModify = FALSE;

m_brshMYBRUSH.CreateSolidBrush(m_clrBackGround); return (HBRUSH)m_brshMYBRUSH;

}
return hbr;
}
可是我发现这时候若是点击radio button的话,程序立即出现错误提示,并且整个程序被强制终了。
在debug 的时候我发现GetDlgCtrlID()出现了没有句柄的错误提示。
请问应该如何清除该错误?

解决方案 »

  1.   

    CButton *m_pwdBttn[3];
    m_pwdBttn[3]是我想要改变其颜色的一个static button的指针。
      

  2.   

    m_pwdBttn[3]->m_hWnd == ::GetDltItem(m_hWnd, IDC_STATIC_RECEIVE)
      

  3.   

    m_pwdBttn[3]->GetDlgCtrlID()改为pWnd->GetDlgCtrlID()试试!!!
      

  4.   

    请问 feiniaoliang(飞鸟良)
    m_pwdBttn[3]->GetDlgCtrlID()改为pWnd->GetDlgCtrlID()有什么不同?
      

  5.   

    TO: CloudWater(秋云开水):
    m_pwdBttn[3]->m_hWnd == ::GetDltItem(m_hWnd, IDC_STATIC_RECEIVE)
    通不过编译!
    显示:GetDltItem' :非 '`global namespace'的成员
    '==' : 从'int' 到 'struct HWND__ *' 无法变换
      

  6.   

    m_pwdBttn[3]是你button控件的指针,而pWnd是你Dialog的窗口指针!由于你的button似再对话框上的,所以用GetDlgCtrlID()来枚举对话框上的空间时,当然应该用对话框的窗口指针pWnd来调用罗!!
      

  7.   

    如果还是不明白,可以参阅MSDN上的CWnd::OnCtlColor ,也有Sample的!!
      

  8.   

    请问 feiniaoliang(飞鸟良)
    改为pWnd->GetDlgCtrlID()的话
    在我的dialog上面有众多的控件,如何区分我要改变哪个的颜色?
      

  9.   

    后面不是还有== IDC_STATIC_RECEIVE;ID号就是用来区分的呀!!!