让VC窗口轻而易举变漂亮

来源:互联网 发布:linux 查看物理网卡 编辑:程序博客网 时间:2024/04/29 08:31
前段时间一直在想怎么样能让窗口变得更漂亮一点,更加吸引人呢?在网上也看到了不少高手们的做法,但对于我这种不喜欢太复杂的人来说,我不是很喜欢那样写代码,GetSystemMetrics函数来得到各个边框的长度或宽度。。。。没几下,我的头就晕了,在查了许多资料以及实验后,我终于找到了一种比较简单的美化窗口的方法,现在就拿出来献丑一下,觉得不好的就请跳过去吧~~

  大家请看这张图:

 

  其实这张图已经很直观的表达了窗口内部的布局,有了这张图你觉得美化窗口还难吗?想怎么好看就可以怎么好看….<注:这张图是从网上搜索得来,十分感谢此作者,为我们提供了方便,在这里我只是拿这张图做一下参考>

  //取得标题栏的位置

  rtTitle.left = 6;

  rtTitle.top = 0;

  rtTitle.right = rtWnd.right - rtWnd.left - 6;

  rtTitle.bottom = 30;

  //计算最小化按钮的位置

  m_rtButtMin.left = rtWnd.right - rtWnd.left - 66;

  m_rtButtMin.top= 0;

  m_rtButtMin.right = rtWnd.right - rtWnd.left - 46;

  m_rtButtMin.bottom = 30;

  //计算最大化按钮的位置

  m_rtButtMax.left = rtWnd.right - rtWnd.left - 46;

  m_rtButtMax.top = 0;

  m_rtButtMax.right = rtWnd.right - rtWnd.left - 26;

  m_rtButtMax.bottom = 30;

  //计算关闭按钮的位置

  m_rtButtExit.left = rtWnd.right - rtWnd.left - 26;

  m_rtButtExit.top = 0;

  m_rtButtExit.right = rtWnd.right - rtWnd.left-6;

  m_rtButtExit.bottom = 30;

  有了它们的位置美化它们就容易了:

  //准备画图

  CBitmap* pBitmap = new CBitmap;

  BITMAP BmpInfo;

  CBitmap* pOldBitmap;

  CDC* pDisplayMemDC=new CDC;

  pDisplayMemDC->CreateCompatibleDC(pDC);

  //重画标题栏

  pBitmap->LoadBitmap(IDB_TITLE_TOP);

  pBitmap->GetBitmap(&BmpInfo);

  pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);

  pDC->StretchBlt(6,0, rtWnd.right-rtWnd.left-12,

  30,

  pDisplayMemDC, 0, 0,

  BmpInfo.bmWidth,

  BmpInfo.bmHeight,SRCCOPY);

  pDisplayMemDC->SelectObject(pOldBitmap);

  pBitmap->DeleteObject();

  //写上标题

WriteCaption(m_CaptionColor,m_Caption);

  //重画两个标题栏两边的小边框

  pBitmap->LoadBitmap(IDB_DOWN);

  pBitmap->GetBitmap(&BmpInfo);

  pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);

  //左边的

  pDC->StretchBlt(0,0,6,30,

  pDisplayMemDC,0, 0,

  BmpInfo.bmWidth,

  BmpInfo.bmHeight,

  SRCCOPY);

  //右边的

  pDC->StretchBlt(rtWnd.right-rtWnd.left-6,0,6,30,

  pDisplayMemDC,0,0,

  BmpInfo.bmWidth,

  BmpInfo.bmHeight,

  SRCCOPY);

  pDisplayMemDC->SelectObject(pOldBitmap);

  pBitmap->DeleteObject();

  //重画功能button

  pBitmap->LoadBitmap(IDB_NORMAL);

  pBitmap->GetBitmap(&BmpInfo);

  pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);

  pDC->StretchBlt(m_rtButtMin.left,

  m_rtButtMin.top+4,

  60, 21, pDisplayMemDC,

  0, 0, BmpInfo.bmWidth,

  BmpInfo.bmHeight,SRCCOPY);

  pDisplayMemDC->SelectObject(pOldBitmap);

  pBitmap->DeleteObject();

  这样,我们想在窗口的什么位置上贴什么我们就可以很容易的做到。

转自http://c.chinaitlab.com/vc/916576_2.html

 

原创粉丝点击