15,980
社区成员




if (nCtlColor == CTLCOLOR_STATIC&&pWnd->GetDlgCtrlID() == IDC_GROUP) //文本编辑框颜色
{
pDC->SetTextColor(RGB(255, 255, 255));
pDC->SetBkMode(TRANSPARENT);
hbr = (HBRUSH)::GetStockObject(NULL_BRUSH);
}
//单选按钮字体修改颜色问题???????????
if (pWnd->GetDlgCtrlID() == IDC_SINGLEMODE || pWnd->GetDlgCtrlID() == IDC_MANYMODE) //文本编辑框颜色
{
pDC->SetTextColor(RGB(255, 255, 255));
pDC->SetBkMode(TRANSPARENT);
CFont font;
font.CreatePointFont(120, L"微软雅黑");
CFont *pOldFont=pDC->SelectObject(&font);
CRect rc;
pWnd->GetWindowRect(&rc);
ScreenToClient(&rc);
CDC* dc = GetDC();
pDC->BitBlt(0, 0, rc.Width(), rc.Height(), dc, rc.left, rc.top, SRCCOPY); //把父窗口背景图片先画到按钮上
ReleaseDC(dc);
hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);
}
void CNumberLeapDlg::OnCustomdrawGroup(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
if (pNMCD->dwDrawStage == CDDS_PREPAINT) {
CString strText;
CDC *pDC = CDC::FromHandle(pNMCD->hdc);
CWnd *pCtrl = CWnd::FromHandle(pNMCD->hdr.hwndFrom);
pDC->SetTextColor(0xFFFFFF);
pDC->SetBkMode(TRANSPARENT);
pCtrl->GetWindowText(strText);
pDC->DrawText(strText, &pNMCD->rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
*pResult = CDRF_SKIPDEFAULT;
}
}
为什么这样修改不了group box的文本颜色?[/quote]
虽然同为按钮类,不过系统在处理这些消息上还是有所不同的。如不使用主题,OnCtrlColor 这类的函数仅对勾选、单选、按钮,而分组框也就是 GroupBox 的文字颜色一直都不行的(也可能需要响应)。如果使用了主题,按钮类的控件都没法设置文字颜色,只能通过 Custom Draw 之类的方法给按钮来修改颜色,其他的都不行。[/quote]
我这个是用 Custom Draw做的,但是没有用。
我重写了OnPaint()解决了这个问题。
void CNumberLeapDlg::OnCustomdrawGroup(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
if (pNMCD->dwDrawStage == CDDS_PREPAINT) {
CString strText;
CDC *pDC = CDC::FromHandle(pNMCD->hdc);
CWnd *pCtrl = CWnd::FromHandle(pNMCD->hdr.hwndFrom);
pDC->SetTextColor(0xFFFFFF);
pDC->SetBkMode(TRANSPARENT);
pCtrl->GetWindowText(strText);
pDC->DrawText(strText, &pNMCD->rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
*pResult = CDRF_SKIPDEFAULT;
}
}
为什么这样修改不了group box的文本颜色?[/quote]
虽然同为按钮类,不过系统在处理这些消息上还是有所不同的。如不使用主题,OnCtrlColor 这类的函数仅对勾选、单选、按钮,而分组框也就是 GroupBox 的文字颜色一直都不行的(也可能需要响应)。如果使用了主题,按钮类的控件都没法设置文字颜色,只能通过 Custom Draw 之类的方法给按钮来修改颜色,其他的都不行。if (pWnd->GetDlgCtrlID() == IDC_SINGLEMODE || pWnd->GetDlgCtrlID() == IDC_MANYMODE) //文本编辑框颜色
{
pDC->SetTextColor(RGB(255, 255, 255));
pDC->SetBkMode(TRANSPARENT);
/*CFont font;
font.CreatePointFont(120, L"微软雅黑");
CFont *pOldFont=pDC->SelectObject(&font);
CRect rc;
pWnd->GetWindowRect(&rc);
ScreenToClient(&rc);
CDC* dc = GetDC();
pDC->BitBlt(0, 0, rc.Width(), rc.Height(), dc, rc.left, rc.top, SRCCOPY); //把父窗口背景图片先画到按钮上
ReleaseDC(dc);*/
hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);
}
这样就可以设置Radio button的文本颜色和背景透明~void CXXXWndOrDlg::OnButton1CustomDraw(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
if (pNMCD->dwDrawStage == CDDS_PREPAINT) {
CString strText;
CDC *pDC = CDC::FromHandle(pNMCD->hdc);
CWnd *pCtrl = CWnd::FromHandle(pNMCD->hwndFrom);
pDC->SetTextColor(0xFF00FF);
pDC->SetBkMode(TRANSPARENT);
pCtrl->GetWindowText(strText);
pDC->DrawText(strText, &pNMCD->rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
*pResult = CDRF_SKIPDEFAULT;
}
}
void CNumberLeapDlg::OnCustomdrawGroup(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
if (pNMCD->dwDrawStage == CDDS_PREPAINT) {
CString strText;
CDC *pDC = CDC::FromHandle(pNMCD->hdc);
CWnd *pCtrl = CWnd::FromHandle(pNMCD->hdr.hwndFrom);
pDC->SetTextColor(0xFFFFFF);
pDC->SetBkMode(TRANSPARENT);
pCtrl->GetWindowText(strText);
pDC->DrawText(strText, &pNMCD->rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
*pResult = CDRF_SKIPDEFAULT;
}
}
为什么这样修改不了group box的文本颜色?void CNumberLeapDlg::OnCustomdrawSinglemode(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = CDRF_DODEFAULT;
switch (pNMCD->dwDrawStage)
{
case CDDS_PREPAINT://让其发出项改变的消息.
{
*pResult = CDRF_NOTIFYITEMDRAW;//控制每行的信息.
}
break;
case CDDS_ITEMPREPAINT://按行处理信息
{
CDC *pDC = NULL;
pDC->Attach(pNMCD->hdc);
pDC->SetTextColor(RGB(255, 255, 255));
pDC->Detach();
*pResult = CDRF_DODEFAULT;//只修改行, 则返回defaut.
//*pResult = CDRF_NOTIFYSUBITEMDRAW; //控制每个单元格的信息.
}
break;
case CDDS_SUBITEM | CDDS_ITEMPREPAINT://按项处理信息(单元格)
{
*pResult = CDRF_DODEFAULT;
}
break;
}
}
这样为什么调试,没有进入case CDDS_ITEMPREPAINT:里面去void CNumberLeapDlg::OnCustomdrawSinglemode(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = NULL;
pDC->Attach(pNMCD->hdc);
pDC->SetTextColor(RGB(255, 255, 255));
pDC->Detach();
*pResult = 0;
}