資源簡介
標題欄自繪是很多初學(xué)者最苦惱的問題,目前網(wǎng)上的例子要么是系統(tǒng)默認的標題按鈕時不時的會重現(xiàn)出來,要么是影響了窗口非客戶區(qū)原來默認的行為(去掉系統(tǒng)菜單)等等,各種的不如意,于是本人研究試驗了下,感覺這個是比較完美的了,不影響任何原來窗口的特性,比如標題欄系統(tǒng)菜單等,要么是把非客戶區(qū)去掉了,然后自己模擬,筆者也有這樣處理過,不過這里只演示非客戶區(qū)標題欄繪制的例子,特發(fā)此貼以饗讀者。

代碼片段和文件信息
#include?“StdAfx.h“
#include?“DUIButton.h“
//?繪制按鈕
void?CDUIButton::DrawButton(?Gdiplus::Graphics&??graphics)
{
//?獲取按鈕圖片信息
UINT?iCount?=?m_nImageCount;
int iButtonIndex?=?0;
if(m_bDisabled?&&?iCount?>=?4)?iButtonIndex?=?3;
else?if(m_bPressed?&&?iCount?>=?3)iButtonIndex?=?2;
else?if(m_bHovering?&&?iCount?>=?2)iButtonIndex?=?1;
else?iButtonIndex?=?0;
//?在指定位置繪制按鈕
int?iWidth?=?m_pImage->GetWidth()/iCount;
int?iHeight?=?m_pImage->GetHeight();
RectF?grect;
grect.X=(Gdiplus::REAL)m_rcRect.left;
grect.Y=(Gdiplus::REAL)m_rcRect.top;
grect.Width?=?(Gdiplus::REAL)m_rcRect.Width();
grect.Height?=?(Gdiplus::REAL)m_rcRect.Height();
graphics.DrawImage(m_pImage?grect?(Gdiplus::REAL)iWidth*iButtonIndex0(Gdiplus::REAL)iWidth(Gdiplus::REAL)iHeight?UnitPixel);
StringFormat?stringFormat;
if?(m_pIcon)
{
PointF?ptIcon(m_ptIcon.xm_ptIcon.y);
graphics.DrawImage(m_pIconptIcon);
grect.X=(Gdiplus::REAL)m_ptIcon.x?+?m_pIcon->GetWidth()?+?2;
grect.Width?=?(Gdiplus::REAL)m_rcRect.Width()?-?m_pIcon->GetWidth()?-?2;
stringFormat.SetFormatFlags(?StringFormatFlagsDirectionVertical);
stringFormat.SetAlignment(StringAlignmentCenter);
stringFormat.SetLineAlignment(StringAlignmentNear);
}
else
{
//stringFormat.SetFormatFlags(?StringFormatFlagsDirectionVertical);
stringFormat.SetAlignment(StringAlignmentCenter);
stringFormat.SetLineAlignment(StringAlignmentCenter);
}
if?(!m_strCaption.IsEmpty())
{
//繪制文字
FontFamily?fontFamily(L“宋體“);
Gdiplus::Font?font(&fontFamily?10?FontstyleRegular?UnitPoint);
CStringW?strtitle(m_strCaption);
SolidBrush?brush((ARGB)Color::White);
if?(m_bDisabled)
{
brush.SetColor((ARGB)Color::Gray);
}
graphics.DrawString(strtitle?strtitle.GetLength()?&fontgrect&stringFormat?&brush);
}
}
//?創(chuàng)建按鈕
void?CDUIButton::CreateButton(LPCTSTR?lpszCaptionLPRECT?lpRectCWnd*?pParent?Image*?pImage?UINT?nCount/*?=?4*/?UINT?nID/*?=?0*/)
{
if?(lpszCaption)
{
m_strCaption?=?lpszCaption;
}
m_pParent?=?pParent;
m_rcRect?=?lpRect;
m_pImage?=?pImage;
m_nImageCount?=?nCount;
m_nID?=?nID;
}
//設(shè)置按鈕圖標信息
void??CDUIButton::SetIconInfo(Image?*pIconCPoint?ptPos/*?=?CPoint(53)*/BOOL?bRedraw/*=FALSE*/)
{
????m_pIcon?=?pIcon;
m_ptIcon?=?CPoint(m_rcRect.left+ptPos.xm_rcRect.top+ptPos.y);
if?(bRedraw)
{
m_pParent->InvalidateRect(&m_rcRect);
}
}
void?CDUIButton::SetRect(LPCRECT?lpRect)
{
CPoint?ptIconOrg(m_ptIcon.x?-?m_rcRect.leftm_ptIcon.y?-?m_rcRect.top);
m_rcRect?=?lpRect;
m_ptIcon?=?CPoint(m_rcRect.left+ptIconOrg.xm_rcRect.top+ptIconOrg.y);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2698??2013-10-21?14:58??NCSkinDemo\NCSkinDemo\DUIButton.cpp
?????文件???????2568??2013-10-25?13:20??NCSkinDemo\NCSkinDemo\DUIButton.h
?????文件???????9837??2013-10-25?18:18??NCSkinDemo\NCSkinDemo\MainFrm.cpp
?????文件???????1266??2013-10-25?17:55??NCSkinDemo\NCSkinDemo\MainFrm.h
?????文件?????129936??2013-10-25?18:20??NCSkinDemo\NCSkinDemo\NCSkinDemo.aps
?????文件???????4785??2013-10-25?17:34??NCSkinDemo\NCSkinDemo\NCSkinDemo.cpp
?????文件????????741??2013-10-25?17:34??NCSkinDemo\NCSkinDemo\NCSkinDemo.h
?????文件??????15144??2013-10-25?18:20??NCSkinDemo\NCSkinDemo\NCSkinDemo.rc
?????文件???????6394??2013-10-25?17:21??NCSkinDemo\NCSkinDemo\NCSkinDemo.vcproj
?????文件???????1427??2013-10-25?18:21??NCSkinDemo\NCSkinDemo\NCSkinDemo.vcproj.DEEP-20131022OL.Administrator.user
?????文件???????1193??2013-10-25?17:19??NCSkinDemo\NCSkinDemo\NCSkinDemoDoc.cpp
?????文件????????642??2013-10-25?17:19??NCSkinDemo\NCSkinDemo\NCSkinDemoDoc.h
?????文件???????2408??2013-10-25?17:19??NCSkinDemo\NCSkinDemo\NCSkinDemoView.cpp
?????文件???????1248??2013-10-25?17:19??NCSkinDemo\NCSkinDemo\NCSkinDemoView.h
?????文件???????5110??2013-10-25?17:19??NCSkinDemo\NCSkinDemo\ReadMe.txt
????.......?????67777??2007-11-28?16:21??NCSkinDemo\NCSkinDemo\res\NCSkinDemo.ico
?????文件????????401??2013-10-25?17:19??NCSkinDemo\NCSkinDemo\res\NCSkinDemo.rc2
????.......??????4710??2007-10-31?09:37??NCSkinDemo\NCSkinDemo\res\NCSkinDemoDoc.ico
????.......??????1078??2003-07-23?17:52??NCSkinDemo\NCSkinDemo\res\Toolbar.bmp
????.......??????5816??2007-08-30?17:14??NCSkinDemo\NCSkinDemo\res\Toolbar256.bmp
?????文件???????1259??2013-10-25?17:19??NCSkinDemo\NCSkinDemo\Resource.h
?????文件??????13080??2013-10-25?18:06??NCSkinDemo\NCSkinDemo\Skinfr
?????文件???????1822??2013-10-25?18:03??NCSkinDemo\NCSkinDemo\Skinfr
?????文件???????1313??2013-10-23?10:29??NCSkinDemo\NCSkinDemo\SkinManager.cpp
?????文件????????493??2013-10-23?10:29??NCSkinDemo\NCSkinDemo\SkinManager.h
?????文件????????637??2013-10-25?17:30??NCSkinDemo\NCSkinDemo\stdafx.cpp
?????文件???????2303??2013-10-25?17:30??NCSkinDemo\NCSkinDemo\stdafx.h
?????文件???????1432??2013-10-25?17:19??NCSkinDemo\NCSkinDemo\targetver.h
????.......??????7976??2007-08-30?17:14??NCSkinDemo\NCSkinDemo\UserImages.bmp
?????文件????????896??2013-10-25?17:19??NCSkinDemo\NCSkinDemo.sln
............此處省略18個文件信息
評論
共有 條評論