If you only want to change the text color, implement a handler for OnCtlColor in your containing dialog. Like this:
HBRUSH CDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == IDC_CHECK_BOX) //check for your check box control ID
{
pDC->SetTextColor(RGB(255,0,0));
}
return hbr;
}
Beware that this works not for regular push buttons, but for check boxes there should be no problem. No need to implement an owner-drawn control.
EDIT:
You have to make sure, your check box uses the BS_AUTOCHECKBOX style. Also make sure the BS_OWNERDRAW style is not set.
EDIT #2:
DrawFrameControl() with DFCS_BUTTONCHECK will let you draw the default check box bitmaps.