VC/MFC怎么改变状态栏字体颜色和大小 RT,希望大家能给个例子。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自绘标题栏void CIbsServerSafeDlg::DrawTitleBar(CDC *pDC){ if (!m_hWnd) return; CRect rtWnd, rtButtons, rtClient; GetWindowRect(&rtWnd); //整个Window的相对于屏幕的矩形 GetClientRect(&rtClient); //取得整个Title bar的矩形 m_rtTitle.left = GetSystemMetrics(SM_CXFRAME) - 1; m_rtTitle.top = GetSystemMetrics(SM_CYFRAME) ; m_rtTitle.right = rtWnd.right-rtWnd.left-GetSystemMetrics(SM_CYFRAME) + 1; m_rtTitle.bottom = m_rtTitle.top + GetSystemMetrics(SM_CYCAPTION); //重画Title Bar CEnBitmap bmp; CString strFile = CUtilityEx::GetBasePath() + "images\\bgtitle.bmp"; bmp.LoadImage(CUtilityEx::GetBasePath() + "images\\bgtitle.bmp"); //准备画XP风格按钮 CEnBitmap* pBitmap = new CEnBitmap; CBitmap* pOldBitmap; BITMAP bmpInfo; CDC* pDisplayMemDC=new CDC; pDisplayMemDC->CreateCompatibleDC(pDC); //平铺标题 pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\bgtitle.bmp"); pBitmap->GetBitmap(&bmpInfo); pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); pDC->BitBlt(m_rtTitle.left, m_rtTitle.top, m_rtTitle.Width(), m_rtTitle.Height(), pDisplayMemDC, 0, 0, SRCCOPY); pDisplayMemDC->SelectObject(pOldBitmap); pBitmap->DeleteObject(); //m_rtTitle.top += 1; m_rtTitle.right += 1; m_rtTitle.right -= 1; //重画图标 m_rtIcon.left = rtClient.left + 5; m_rtIcon.top = GetSystemMetrics(SM_CYFRAME); m_rtIcon.right = m_rtIcon.left + 16; m_rtIcon.bottom = m_rtIcon.top + 16; //pDC->DrawIcon(m_rtIcon.left, m_rtIcon.top, AfxGetApp()->LoadIcon(IDR_MAINFRAME)); ::DrawIconEx(pDC->m_hDC, m_rtIcon.left, m_rtIcon.top, AfxGetApp()->LoadIcon(IDR_MAINFRAME), m_rtIcon.Width(), m_rtIcon.Height(), 0, NULL, DI_NORMAL); m_rtIcon.OffsetRect(rtWnd.TopLeft()); //重画关闭button pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\exit_nor.bmp"); pBitmap->GetBitmap(&bmpInfo); rtButtons.left = m_rtTitle.right - bmpInfo.bmWidth - 4; rtButtons.top = m_rtTitle.top; rtButtons.right = rtButtons.left + bmpInfo.bmWidth; rtButtons.bottom = rtButtons.top + bmpInfo.bmHeight; pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY); pDisplayMemDC->SelectObject(pOldBitmap); m_rtButtExit = rtButtons; m_rtButtExit.OffsetRect(rtWnd.TopLeft()); pBitmap->DeleteObject(); //重画最大化/恢复button if (IsZoomed()) pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\res_norm.bmp"); else pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\max_norm.bmp"); pBitmap->GetBitmap(&bmpInfo); rtButtons.right = rtButtons.left - 1; rtButtons.left = rtButtons.right - bmpInfo.bmWidth; pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY); pDisplayMemDC->SelectObject(pOldBitmap); m_rtButtMax = rtButtons; m_rtButtMax.OffsetRect(rtWnd.TopLeft()); pBitmap->DeleteObject(); //重画最小化button pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\min_norm.bmp"); pBitmap->GetBitmap(&bmpInfo); rtButtons.right = rtButtons.left - 1; rtButtons.left = rtButtons.right - bmpInfo.bmWidth; pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY); pDisplayMemDC->SelectObject(pOldBitmap); m_rtButtMin = rtButtons; m_rtButtMin.OffsetRect(rtWnd.TopLeft()); pBitmap->DeleteObject(); //重画帮助button pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\hel_norm.bmp"); pBitmap->GetBitmap(&bmpInfo); rtButtons.right = rtButtons.left - 1; rtButtons.left = rtButtons.right - bmpInfo.bmWidth; pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY); pDisplayMemDC->SelectObject(pOldBitmap); m_rtButtHelp = rtButtons; m_rtButtHelp.OffsetRect(rtWnd.TopLeft()); pBitmap->DeleteObject(); CFont titleFont; if( !titleFont.GetSafeHandle() ) { VERIFY(titleFont.CreateFont( 12, // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_BOLD, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut GB2312_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily _T("宋体"))); } CFont *OldFont; OldFont = pDC->SelectObject(&titleFont); //重画caption int nOldMode=pDC->SetBkMode(TRANSPARENT); COLORREF clOldText=pDC->SetTextColor(RGB(0, 0, 0)); m_rtTitle.right-=GetSystemMetrics(SM_CYSMICON); m_rtTitle.left += 16; m_rtTitle.top += 3; pDC->SetTextColor(RGB(255, 255, 255)); pDC->DrawText((LPSTR)"华盾服务器安全专家",-1, &m_rtTitle, DT_LEFT); pDC->SetBkMode(nOldMode); pDC->SetTextColor(clOldText); pDC->SelectObject(OldFont); ReleaseDC(pDisplayMemDC); delete pDisplayMemDC; delete pBitmap;} 一种办法是自绘。直接修改的话,字体可以重载OnSetFont消息,颜色的话重载OnCtlColor消息不知道行不行。如果装了VS2008sp1的话,使用向导创建工程后,状态条的类是CMFCStatusBar,这个类提供了更改字体颜色和背景颜色的方法。 最简单是就是在状态栏的各个Pane上贴上CStatic控件,WM_CTLCOLOR消息中修改CStatic的颜色和字体样式。 考试前来散散分,尽管没多少分可散。。。 多线程时,主线程退出,程序coredump 如何更改树控件被选中文本的蓝色? MFC下实现拖动无框架模态对话框 Java调用C++问题!!~~~ 调用dll无动作? 串口问题 Gannt ocx控件 icon的问题 同一种数据有多种存储格式,各种数据格式之间的转换原理是什么? check box用法 真心求分析 TCP粘包问题 我有丢包 ,已经困惑通宵了
{
if (!m_hWnd) return; CRect rtWnd, rtButtons, rtClient;
GetWindowRect(&rtWnd); //整个Window的相对于屏幕的矩形
GetClientRect(&rtClient);
//取得整个Title bar的矩形
m_rtTitle.left = GetSystemMetrics(SM_CXFRAME) - 1;
m_rtTitle.top = GetSystemMetrics(SM_CYFRAME) ;
m_rtTitle.right = rtWnd.right-rtWnd.left-GetSystemMetrics(SM_CYFRAME) + 1;
m_rtTitle.bottom = m_rtTitle.top + GetSystemMetrics(SM_CYCAPTION);
//重画Title Bar CEnBitmap bmp;
CString strFile = CUtilityEx::GetBasePath() + "images\\bgtitle.bmp";
bmp.LoadImage(CUtilityEx::GetBasePath() + "images\\bgtitle.bmp"); //准备画XP风格按钮
CEnBitmap* pBitmap = new CEnBitmap;
CBitmap* pOldBitmap;
BITMAP bmpInfo;
CDC* pDisplayMemDC=new CDC;
pDisplayMemDC->CreateCompatibleDC(pDC); //平铺标题
pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\bgtitle.bmp");
pBitmap->GetBitmap(&bmpInfo);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pDC->BitBlt(m_rtTitle.left, m_rtTitle.top, m_rtTitle.Width(), m_rtTitle.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
//m_rtTitle.top += 1;
m_rtTitle.right += 1;
m_rtTitle.right -= 1;
//重画图标
m_rtIcon.left = rtClient.left + 5;
m_rtIcon.top = GetSystemMetrics(SM_CYFRAME);
m_rtIcon.right = m_rtIcon.left + 16;
m_rtIcon.bottom = m_rtIcon.top + 16; //pDC->DrawIcon(m_rtIcon.left, m_rtIcon.top, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
::DrawIconEx(pDC->m_hDC, m_rtIcon.left, m_rtIcon.top, AfxGetApp()->LoadIcon(IDR_MAINFRAME),
m_rtIcon.Width(), m_rtIcon.Height(), 0, NULL, DI_NORMAL);
m_rtIcon.OffsetRect(rtWnd.TopLeft()); //重画关闭button
pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\exit_nor.bmp");
pBitmap->GetBitmap(&bmpInfo);
rtButtons.left = m_rtTitle.right - bmpInfo.bmWidth - 4;
rtButtons.top = m_rtTitle.top;
rtButtons.right = rtButtons.left + bmpInfo.bmWidth;
rtButtons.bottom = rtButtons.top + bmpInfo.bmHeight;
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
pDisplayMemDC->SelectObject(pOldBitmap);
m_rtButtExit = rtButtons;
m_rtButtExit.OffsetRect(rtWnd.TopLeft());
pBitmap->DeleteObject(); //重画最大化/恢复button
if (IsZoomed())
pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\res_norm.bmp");
else
pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\max_norm.bmp");
pBitmap->GetBitmap(&bmpInfo);
rtButtons.right = rtButtons.left - 1;
rtButtons.left = rtButtons.right - bmpInfo.bmWidth; pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
pDisplayMemDC->SelectObject(pOldBitmap);
m_rtButtMax = rtButtons;
m_rtButtMax.OffsetRect(rtWnd.TopLeft());
pBitmap->DeleteObject(); //重画最小化button
pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\min_norm.bmp");
pBitmap->GetBitmap(&bmpInfo);
rtButtons.right = rtButtons.left - 1;
rtButtons.left = rtButtons.right - bmpInfo.bmWidth;
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
pDisplayMemDC->SelectObject(pOldBitmap);
m_rtButtMin = rtButtons;
m_rtButtMin.OffsetRect(rtWnd.TopLeft());
pBitmap->DeleteObject(); //重画帮助button
pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\hel_norm.bmp");
pBitmap->GetBitmap(&bmpInfo);
rtButtons.right = rtButtons.left - 1;
rtButtons.left = rtButtons.right - bmpInfo.bmWidth;
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
pDisplayMemDC->SelectObject(pOldBitmap);
m_rtButtHelp = rtButtons;
m_rtButtHelp.OffsetRect(rtWnd.TopLeft());
pBitmap->DeleteObject(); CFont titleFont;
if( !titleFont.GetSafeHandle() )
{
VERIFY(titleFont.CreateFont(
12, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_BOLD, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
GB2312_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("宋体")));
}
CFont *OldFont;
OldFont = pDC->SelectObject(&titleFont); //重画caption
int nOldMode=pDC->SetBkMode(TRANSPARENT);
COLORREF clOldText=pDC->SetTextColor(RGB(0, 0, 0));
m_rtTitle.right-=GetSystemMetrics(SM_CYSMICON);
m_rtTitle.left += 16;
m_rtTitle.top += 3;
pDC->SetTextColor(RGB(255, 255, 255));
pDC->DrawText((LPSTR)"华盾服务器安全专家",-1, &m_rtTitle, DT_LEFT);
pDC->SetBkMode(nOldMode);
pDC->SetTextColor(clOldText); pDC->SelectObject(OldFont);
ReleaseDC(pDisplayMemDC);
delete pDisplayMemDC;
delete pBitmap;
}
这个类提供了更改字体颜色和背景颜色的方法。