资源简介
标题栏自绘是很多初学者最苦恼的问题,目前网上的例子要么是系统默认的标题按钮时不时的会重现出来,要么是影响了窗口非客户区原来默认的行为(去掉系统菜单)等等,各种的不如意,于是本人研究试验了下,感觉这个是比较完美的了,不影响任何原来窗口的特性,比如标题栏系统菜单等,要么是把非客户区去掉了,然后自己模拟,笔者也有这样处理过,不过这里只演示非客户区标题栏绘制的例子,特发此贴以飨读者。
代码片段和文件信息
#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);
}
}
// 创建按钮
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;
}
//设置按钮图标信息
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个文件信息
评论
共有 条评论