// TitleBarDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TitleBar.h"
#include "TitleBarDlg.h"
#include "youdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/**************************************************************
严重声明:未经本人许可不得用于任何商业用途.
作 者:朱一松
联系方式:Email:song_0962@sina.com
//*************************************************************
界面程序用法说明:
1.TitleBarDlg.h和TitleBarDlg.cpp 为主界面类程序文件
若其它窗口要继承主窗口风格,其窗口的基类必须为
CTitleBarDlg,采用对话框资源编辑器完成窗口设计后,新
建类后,在你的对话框类文件(.cpp .h)中手工修所有的
CDialog 为 CTitleBarDlg。
2.TitleBarDlg.h和TitleBarDlg.cpp
除了指定位置可添加代码外,其它地方不能随便添加修改代码.
3.一定要用本的界面工程做为模板,在此基础开发项目,不要新建
工程文件。
4.请参考CyouDlg类*/
// CTitleBarDlg dialog
//****************************************************
CTitleBarDlg::CTitleBarDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTitleBarDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTitleBarDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_ShowTitle = TRUE;
m_ReSizeFlag = FALSE;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTitleBarDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTitleBarDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTitleBarDlg, CDialog)
//{{AFX_MSG_MAP(CTitleBarDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_NCLBUTTONDOWN()
ON_WM_NCMOUSEMOVE()
ON_WM_SYSCOMMAND()
ON_WM_SIZE()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTitleBarDlg message handlers
BOOL CTitleBarDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_ToolTip.Create(this,TTS_ALWAYSTIP);//创建工具提示控件,TTS_ALWAYSTIP表示,
m_ReSizeFlag = TRUE;
CRect rtWnd;
GetClientRect(rtWnd);
m_OldWidth = rtWnd.Width();
m_OldHeight = rtWnd.Height();
return TRUE; // return TRUE unless you set the focus to a control
}
void CTitleBarDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CTitleBarDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
LRESULT CTitleBarDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT lrst=CDialog::DefWindowProc(message, wParam, lParam);
if (!::IsWindow(m_hWnd))
return lrst;
if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY)
{
CDC* pWinDC = GetWindowDC();
if (pWinDC)
DrawTitleBar(pWinDC);
ReleaseDC(pWinDC);
}
return lrst;
}
void CTitleBarDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
CRect rtWnd;
GetWindowRect(&rtWnd);
//mouse坐标转化为本窗口坐标 重要
point.x = point.x - rtWnd.left;
point.y = point.y - rtWnd.top;
//检测各按钮是否按到
if (m_rtIcon.PtInRect(point))
AfxMessageBox("界面软件设计者:朱一松 EMail:Song_0962@sina.com");
else
{
if (m_rtButtHelp.PtInRect(point))
{
SendMessage(WM_HELP);
}
else
{
if (m_rtButtExit.PtInRect(point))
{
SendMessage(WM_CLOSE);
}
else
{
if (m_rtButtMin.PtInRect(point))
{
m_ShowTitle = FALSE;
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));
}
else
{
if (m_rtButtMax.PtInRect(point))
{
m_ShowTitle = TRUE;
if (IsZoomed())
SendMessage(WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y));
else
{
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));
Invalidate();
}
}
else
{
if (!IsZoomed())
{
Default();
}
}
}
}
}
}
}
void CTitleBarDlg::OnNcMouseMove(UINT nHitTest, CPoint point)
{
CDC* pDC = GetWindowDC();
CDC* pDisplayMemDC=new CDC;
pDisplayMemDC->CreateCompatibleDC(pDC);
CBitmap* pBitmap = new CBitmap;
CBitmap* pOldBitmap;
CRect rtWnd, rtButton;
if (pDC)
{
CString StrTemp = "";
GetWindowRect(&rtWnd);
//mouse坐标转化为本窗口坐标 重要
point.x = point.x - rtWnd.left;
point.y = point.y - rtWnd.top;
//判断mouse是否移到系统按钮上
if (m_rtButtExit.PtInRect(point))
{
pBitmap->LoadBitmap(IDB_EXIT_FOCUS);
StrTemp = _T("关闭");
}
else
{
if(m_rtButtMin.PtInRect(point))
{
pBitmap->LoadBitmap(IDB_MIN_FOCUS);
StrTemp = _T("最小化窗口");
}
else
{
if(m_rtButtMax.PtInRect(point))
{
pBitmap->LoadBitmap(IDB_MAX_FOCUS);
if(IsZoomed())
{
StrTemp = _T("还原窗口");
}
else
{
StrTemp = _T("最化大窗口");
}
}
else
{
pBitmap->LoadBitmap(IDB_NORMAL);
}
}
}
rtButton = m_rtButtMin;
BITMAP BmpInfo;
pBitmap->GetBitmap(&BmpInfo);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pDC->BitBlt(rtButton.left-6, rtButton.top-2, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
CRect ShowTipRec;
ShowTipRec = m_rtButtMin;
if(!StrTemp.IsEmpty())
{
ScreenToClient(&ShowTipRec);
m_ToolTip.AddToolTip(IDD_TITLEBAR_DIALOG,&ShowTipRec,StrTemp);
m_ToolTip.SetDelayTime(200);
}
}
ReleaseDC(pDisplayMemDC);
ReleaseDC(pDC);
delete pDisplayMemDC;
delete pBitmap;
CDialog::OnNcMouseMove(nHitTest, point);
}
void CTitleBarDlg::DrawTitleBar(CDC *pDC)
{
if (m_hWnd)
{
CBrush Brush(RGB(0,100,255));
CBrush* pOldBrush = pDC->SelectObject(&Brush);
CRect rtWnd, rtTitle, rtButtons;
GetWindowRect(&rtWnd);
//取得标题栏的位置
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);
//计算最小化按钮的位置,位图大小为15X15
rtButtons.left = rtTitle.right-60;
rtButtons.top= rtTitle.top+2;
rtButtons.right = rtTitle.right-42;
rtButtons.bottom = rtTitle.top+20;
m_rtButtMin = rtButtons;
//计算最大化按钮的位置,位图大小为15X15
m_rtButtMax.left = m_rtButtMin.left + 18;
m_rtButtMax.top = m_rtButtMin.top;
m_rtButtMax.right = m_rtButtMin.right + 16;
m_rtButtMax.bottom = m_rtButtMin.bottom;
m_rtButtExit.left = m_rtButtMax.left + 18;
m_rtButtExit.top = m_rtButtMax.top;
m_rtButtExit.right = m_rtButtMax.right + 16;
m_rtButtExit.bottom = m_rtButtMax.bottom;
//准备画图
CBitmap* pBitmap = new CBitmap;
BITMAP BmpInfo;
CBitmap* pOldBitmap;
CDC* pDisplayMemDC=new CDC;
pDisplayMemDC->CreateCompatibleDC(pDC);
//重画最Caption
POINT DrawPonit;
DrawPonit.x = rtTitle.left-4;
DrawPonit.y = rtTitle.top-4;
pBitmap->LoadBitmap(IDB_TITLE_LEFT);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pBitmap->GetBitmap(&BmpInfo);
pDC->BitBlt(rtTitle.left-4, rtTitle.top-4, BmpInfo.bmWidth, BmpInfo.bmHe
漂亮的软件界面(带源码)
2星 需积分: 47 65 浏览量
2006-02-23
09:05:59
上传
评论 4
收藏 110KB RAR 举报
普通网友
- 粉丝: 882
- 资源: 2万+
最新资源
- mosquitto-2.018-install-windows-x64
- FTPServer FTP 服务器,绿色免安装,单文件
- 梦畅语音点名软件,上课点名
- 利用ADNI数据集和标签,在tensorflow框架上使用tensorlayer接口,通过架构u-net实现海马体的分割
- Kutools for Word v9.0 office word 插件
- 修复Windows 10 LTSC 2021资源占用率高
- Hash工具,小巧绿色hash校验工具,免费hash工具
- 重启进行BIOS快捷方式,不需要开机按BIOS键
- 鸭子开车记(儿童绘本)
- 威纶通触摸屏编程软件Easy builder pro V6.09.01.556安装包(2024.04).txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页