• 大小: 1.37MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-27
  • 语言: C/C++
  • 标签:

资源简介

标题栏自绘是很多初学者最苦恼的问题,目前网上的例子要么是系统默认的标题按钮时不时的会重现出来,要么是影响了窗口非客户区原来默认的行为(去掉系统菜单)等等,各种的不如意,于是本人研究试验了下,感觉这个是比较完美的了,不影响任何原来窗口的特性,比如标题栏系统菜单等,要么是把非客户区去掉了,然后自己模拟,笔者也有这样处理过,不过这里只演示非客户区标题栏绘制的例子,特发此贴以飨读者。

资源截图

代码片段和文件信息

#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\SkinframeWnd.cpp

     文件       1822  2013-10-25 18:03  NCSkinDemo\NCSkinDemo\SkinframeWnd.h

     文件       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个文件信息

评论

共有 条评论

相关资源