在設定對話框時,想調整對話框邊界的顏色(不是對話框背景色),該如何修改呢?
uj5u.com熱心網友回復:
推薦自繪或貼圖 SetSysColors 會導致系統其他應用也被改變uj5u.com熱心網友回復:
最簡單的
SystemParametersInfo(SPI_SETDROPSHADOW,0, (PVOID)TRUE, 0); // - 開啟陰影效果
SystemParametersInfo(SPI_SETDROPSHADOW,0, (PVOID)FALSE, 0);// - 關閉陰影效果
復雜的就重繪
uj5u.com熱心網友回復:
CBrush Brush(RGB(187,200,143));
CBrush* pOldBrush = pDC->SelectObject(&Brush);
CRect rtWnd,rtTitle,rtButtons;
GetWindowRect(&rtWnd);
//取得標題欄的位置
//SM_CXFRAME 視窗邊框的邊緣寬度
//SM_CYFRAME 視窗邊框的邊緣高度
//SM_CXSIZE 視窗標題欄寬度
//SM_CYSIZE 視窗標題欄高度
rtTitle.left = GetSystemMetrics(SM_CXFRAME);
rtTitle.top = GetSystemMetrics(SM_CYFRAME);
rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME);
rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE);
CPoint point;
//填充頂部框架
point.x = rtWnd.Width();
point.y = GetSystemMetrics(SM_CYSIZE)+GetSystemMetrics(SM_CYFRAME)+0;
pDC->PatBlt(0,0,point.x,point.y,PATCOPY);
//填充左側框架
point.x = GetSystemMetrics(SM_CXFRAME)-1;
point.y = rtWnd.Height()-1;
pDC->PatBlt(0,0,point.x,point.y,PATCOPY);
//填充底部框架
point.x=rtWnd.Width();
point.y=GetSystemMetrics(SM_CYFRAME);
pDC->PatBlt(0,rtWnd.Height()-point.y,point.x,point.y,PATCOPY);
//填充右側框架
point.x=GetSystemMetrics(SM_CXFRAME);
point.y=rtWnd.Height();
pDC->PatBlt(rtWnd.Width()-point.x,0,point.x,point.y,PATCOPY);
//重畫標題欄圖示
m_rtIcon.left=rtTitle.left;
m_rtIcon.top=rtTitle.top;
m_rtIcon.right=m_rtIcon.left+16;
m_rtIcon.bottom=m_rtIcon.top+15;
::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());
CBitmap* pBitmap=new CBitmap;
CBitmap* pOldBitmap;
CDC* pDisplayMemDC=new CDC;
pDisplayMemDC->CreateCompatibleDC(pDC);
//重畫關閉button
rtButtons.left=rtTitle.right - 16;
rtButtons.top=rtTitle.top-1;
rtButtons.right=rtButtons.left + 16;
rtButtons.bottom=rtButtons.top+15;
pBitmap->LoadBitmap(IDB_EXIT_FOCUS);
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
rtButtons.right = rtButtons.left-3;
rtButtons.left=rtButtons.right-16;
if (IsZoomed())
{
pBitmap->LoadBitmap(IDB_RESTORE_NORMAL);
}
else
pBitmap->LoadBitmap(IDB_MAX_NORMAL);
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
rtButtons.right=rtButtons.left-3;
rtButtons.left=rtButtons.right-16;
pBitmap->LoadBitmap(IDB_MIN_NORMAL);
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();
//重畫caption
int nOldMode =pDC->SetBkMode(TRANSPARENT);
COLORREF clOldText=pDC->SetTextColor(RGB(255,255,255));
CFont m_captionFont;
m_captionFont.CreateFont(
18, // 字體的高度
0, // 字體的寬度
0, // 字體顯示的角度
0, // 字體的角度
FW_BOLD, // 字體的磅數
FALSE, // 斜體字體
FALSE, // 帶下劃線的字體
0, // 帶洗掉線的字體
ANSI_CHARSET, // 所需的字符集
OUT_DEFAULT_PRECIS, // 輸出的精度
CLIP_DEFAULT_PRECIS, // 裁減的精度
DEFAULT_QUALITY, // 邏輯字體與輸出設備的實際字體之間的精度
DEFAULT_PITCH | FF_SWISS, // 字體間距和字體集
_T("Arial")); // 字體名稱
CFont* pOldFont = NULL;
pOldFont = pDC->SelectObject(&m_captionFont);
rtTitle.left += m_rtIcon.Width ()+3;
rtTitle.top = rtTitle.top;
rtTitle.bottom = rtTitle.top + 30;
CString m_strTitle;
GetWindowText(m_strTitle);
pDC->DrawText(m_strTitle, &rtTitle, DT_LEFT);
pDC->SetBkMode(nOldMode);
pDC->SetTextColor(clOldText);
ReleaseDC(pDisplayMemDC);
delete pDisplayMemDC;
delete pBitmap;
uj5u.com熱心網友回復:
博主,你好,請問你的這個問題解決了嗎?uj5u.com熱心網友回復:
還是貼圖為好,整體視窗貼圖。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/55895.html
標籤:界面
下一篇:小白求大神
