mfc SDI应用程序中标题栏颜色的更改

mfc SDI应用程序中标题栏颜色的更改,mfc,Mfc,我可以使用以下命令更改对话框标题栏的颜色:- void CactiveSampleDlg::OnNcPaint() { CDC* pDC = GetWindowDC(); CRect CapRct; GetWindowRect(&CapRct); long myFillColour = RGB(200, 0, 0); long myTextColour = RGB(0, 0, 0); int x1 = GetSystemMetrics(S

我可以使用以下命令更改对话框标题栏的颜色:-

void CactiveSampleDlg::OnNcPaint()
{
    CDC* pDC = GetWindowDC();
    CRect CapRct;
    GetWindowRect(&CapRct);

    long myFillColour = RGB(200, 0, 0);
    long myTextColour = RGB(0, 0, 0);
    int x1 = GetSystemMetrics(SM_CXDLGFRAME);
    int y1 = GetSystemMetrics(SM_CYDLGFRAME);
    int x2 = CapRct.Width() - GetSystemMetrics(SM_CXDLGFRAME);
    int y2 = GetSystemMetrics(SM_CYICON) - GetSystemMetrics(SM_CYDLGFRAME) - GetSystemMetrics(SM_CYBORDER);

    CapRct.left = x1;
    CapRct.top = y1;
    CapRct.right = x2;
    CapRct.bottom = y2;
    pDC->FillSolidRect(&CapRct, myFillColour);

    CFont* pCurFont = GetFont();
    LOGFONT lf;
    pCurFont->GetLogFont (&lf);
    lf.lfItalic = TRUE;
    lf.lfWeight = FW_NORMAL;
    lf.lfWidth  = 12;
    lf.lfHeight = 18;
    strcpy(reinterpret_cast<char*>(lf.lfFaceName) ,"Veranda");

    CFont capfont ;
    capfont.CreateFontIndirect (&lf);
    pCurFont = pDC->SelectObject (&capfont);
    pDC->SetBkMode (TRANSPARENT);
    pDC->SetTextColor (GetSysColor(COLOR_CAPTIONTEXT));
    pDC->DrawText (_T("<Dialog Text>"), &CapRct, DT_CENTER | DT_VCENTER);
} 
void CactiveSampleDlg::OnNcPaint()
{
CDC*pDC=GetWindowDC();
正确的CapRct;
GetWindowRect(&CapRct);
长MyFillColor=RGB(200,0,0);
长MyTextColor=RGB(0,0,0);
int x1=GetSystemMetrics(SM_CXDLGFRAME);
int y1=GetSystemMetrics(SM_CYDLGFRAME);
int x2=CapRct.Width()-GetSystemMetrics(SM_CXDLGFRAME);
int y2=GetSystemMetrics(SM\u cycon)-GetSystemMetrics(SM\u CYDLGFRAME)-GetSystemMetrics(SM\u CYBORDER);
CapRct.left=x1;
CapRct.top=y1;
CapRct.right=x2;
CapRct.bottom=y2;
pDC->FillSolidRect(&CapRct,MyFillColor);
CFont*pCurFont=GetFont();
LOGFONT-lf;
pCurFont->GetLogFont(&lf);
lf.lfItalic=TRUE;
lf.lfWeight=FW_正常值;
lf.lfWidth=12;
lf.lf高度=18;
strcpy(重新解释铸造(左前面板名称),“阳台”);
CFont-capfont;
capfont.CreateFontIndirect(&lf);
pCurFont=pDC->选择对象(&capfont);
pDC->SetBkMode(透明);
pDC->SetTextColor(GetSysColor(COLOR_CAPTIONTEXT));
pDC->DrawText(_T(“”)和CapRct,DT_中心| DT_VCENTER);
} 
但当我在SDI应用程序中应用相同的命令时,它给出了断言错误pCurFont->GetLogFont(&lf);
有谁能指导我,如何解决同样的问题,或者是否有更好的媒介来解决。我想更改标题栏的颜色,包括设置标题栏标题的字体,关闭按钮也应该可用

断言对话框会告诉您出了什么问题。一旦你解决了这个问题,你就可以解决其他问题。就像销毁字体一样,它仍然被选择到设备上下文中。或者尝试使用不存在的字体创建字体(称为
“Verdana”
,而不是
“Veranda”
)。不要指望表现出缺乏勤奋就能取得任何成就。我发现CFont*pCurFont=GetFont();函数返回null,发现这是因为使用了系统字体,那么如何在sdi应用程序中更改标题栏的字体呢?我之前共享的代码片段中是否有一些小的更改?取消对空指针的引用不会触发调试断言。您的问题描述没有定论。请提供一个例子。我在之前的帖子中已经分享了完整的功能,还有什么更值得期待的呢?据我所知,GetFont()返回null,这是问题的原因,因为当我在基于对话框的应用程序(OnNCPaint())中使用相同的函数时,它工作正常。您不应该依赖GetFont(),因为这不是标准功能,但仅由一些MFC windows类支持。最好用另一种方式创建字体。