📄 skinwndobject.cpp
字号:
{
//移动窗口
m_pWndHook->MoveWindow(&m_crNormalSize,TRUE);
//设置变量
m_bMaxSize=false;
DrawSkinView(NULL);
}
return;
}
//绘画标题栏
bool CSkinWndObject::DrawCaption(CDC * pDC, int cx, int cy)
{
//加载位图
CImageHandle TitleLeft(&m_SkinAttribute.m_TitleLeft);
if (m_SkinAttribute.m_TitleLeft.IsNull()) return false;
CImageHandle TitleMid(&m_SkinAttribute.m_TitleMid);
if (m_SkinAttribute.m_TitleMid.IsNull()) return false;
CImageHandle TitleRight(&m_SkinAttribute.m_TitleRight);
if (m_SkinAttribute.m_TitleRight.IsNull()) return false;
//绘画标题
int nLeftWidth=TitleLeft->GetWidth();
int nMidWidth=TitleMid->GetWidth();
int nRightWidth=TitleRight->GetWidth();
int nXMinDrawPause=cx-nRightWidth;
TitleLeft->BitBlt(pDC->m_hDC,0,0);
for (int i=nLeftWidth;i<nXMinDrawPause;i+=nMidWidth) TitleMid->BitBlt(pDC->m_hDC,i,0);
TitleRight->BitBlt(pDC->m_hDC,nXMinDrawPause,0);
//绘画文字
CString strTitle;
CRect rcTitleRect(8,5,cx-100,cy-2);
m_pWndHook->GetWindowText(strTitle);
pDC->SetBkMode(TRANSPARENT);
pDC->SelectObject(&m_SkinAttribute.m_DefaultFont);
pDC->SetTextColor(m_SkinAttribute.m_crCaptionTXColor);
pDC->DrawText(strTitle,&rcTitleRect,DT_LEFT|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS);
//关闭按钮
if (m_cbButtonState[BST_CLOSE]&BUT_EXIST)
{
int nDrawPos=0;
CImageHandle ImageHandle(&m_SkinAttribute.m_ButtonClose);
if (m_cbButtonState[BST_CLOSE]&BUT_DISABLE)
{
nDrawPos=ImageHandle->GetWidth()*3/4;
}
else if (m_cbNowDownButton==BST_CLOSE)
{
nDrawPos=ImageHandle->GetWidth()*2/4;
}
else if (m_cbNowHotButton==BST_CLOSE)
{
nDrawPos=ImageHandle->GetWidth()/4;
}
ImageHandle->BitBlt(pDC->GetSafeHdc(),m_rcButton[BST_CLOSE].left,m_rcButton[BST_CLOSE].top,
m_SkinAttribute.m_nButtonWidth,m_SkinAttribute.m_nButtonHeigth,nDrawPos,0);
}
//最大化和还原按钮
if (m_cbButtonState[BST_MAX]&BUT_EXIST)
{
int nDrawPos=0;
CImageHandle ImageHandle;
if (m_bMaxSize==true) ImageHandle.AttachResource(&m_SkinAttribute.m_ButtonRes);
else ImageHandle.AttachResource(&m_SkinAttribute.m_ButtonMax);
if (m_cbButtonState[BST_MAX]&BUT_DISABLE)
{
nDrawPos=ImageHandle->GetWidth()*3/4;
}
if (m_cbNowDownButton==BST_MAX)
{
nDrawPos=ImageHandle->GetWidth()*2/4;
}
else if (m_cbNowHotButton==BST_MAX)
{
nDrawPos=ImageHandle->GetWidth()/4;
}
ImageHandle->BitBlt(pDC->GetSafeHdc(),m_rcButton[BST_MAX].left,m_rcButton[BST_MAX].top,
m_SkinAttribute.m_nButtonWidth,m_SkinAttribute.m_nButtonHeigth,nDrawPos,0);
}
//最小化按钮
if (m_cbButtonState[BST_MIN]&BUT_EXIST)
{
int nDrawPos=0;
CImageHandle ImageHandle(&m_SkinAttribute.m_ButtonMin);
if (m_cbButtonState[BST_MIN]&BUT_DISABLE)
{
nDrawPos=ImageHandle->GetWidth()*3/4;
}
if (m_cbNowDownButton==BST_MIN)
{
nDrawPos=ImageHandle->GetWidth()*2/4;
}
else if (m_cbNowHotButton==BST_MIN)
{
nDrawPos=ImageHandle->GetWidth()/4;
}
ImageHandle->BitBlt(pDC->GetSafeHdc(),m_rcButton[BST_MIN].left,m_rcButton[BST_MIN].top,
m_SkinAttribute.m_nButtonWidth,m_SkinAttribute.m_nButtonHeigth,nDrawPos,0);
}
return true;
}
//设置改变事件
void CSkinWndObject::OnSettingChange()
{
//移动窗口
if (m_bMaxSize==true)
{
//计算位置
CRect rcClient;
m_pWndHook->GetClientRect(&rcClient);
m_pWndHook->ClientToScreen(&rcClient);
m_pWndHook->GetWindowRect(&m_crNormalSize);
//移动窗口
CRect rcRect;
SystemParametersInfo(SPI_GETWORKAREA,0,&rcRect,SPIF_SENDCHANGE);
rcRect.top-=(rcClient.top-m_crNormalSize.top);
rcRect.bottom+=(m_crNormalSize.bottom-rcClient.bottom);
rcRect.left-=(rcClient.left-m_crNormalSize.left);
rcRect.right+=(m_crNormalSize.right-rcClient.right);
m_pWndHook->MoveWindow(&rcRect,FALSE);
m_pWndHook->Invalidate(FALSE);
}
return;
}
//鼠标移动事件
bool CSkinWndObject::OnMouseMoveEvent(CPoint ClientPoint)
{
//设置光标
SetCursor(LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW)));
//判断按下
if (m_cbNowDownButton!=255) return false;
//按钮搜索
for (int i=0;i<3;i++)
{
if ((m_cbButtonState[i]&BUT_EXIST)&&(m_rcButton[i].PtInRect(ClientPoint)))
{
if (m_cbNowHotButton==i) return true;
if (m_cbNowHotButton!=255)
{
m_cbButtonState[m_cbNowHotButton]|=BUT_NORMAL;
m_cbNowHotButton=255;
}
if ((m_cbButtonState[i]&BUT_EXIST)&&(!(m_cbButtonState[i]&BUT_DISABLE)))
{
m_cbNowHotButton=i;
m_cbButtonState[m_cbNowHotButton]&=~BUT_NORMAL;
}
DrawSkinView(NULL);
return true;
}
}
//清理旧焦点
if (m_cbNowHotButton!=255)
{
m_cbButtonState[m_cbNowHotButton]|=BUT_NORMAL;
m_cbNowHotButton=255;
DrawSkinView(NULL);
}
return true;
}
//鼠标左键事件
bool CSkinWndObject::OnLMouseDownEvent(CPoint ClientPoint)
{
//判断按下
if (m_cbNowDownButton!=255) return false;
//按钮搜索
for (int i=0;i<3;i++)
{
if ((m_cbButtonState[i]&BUT_EXIST)&&(!(m_cbButtonState[i]&BUT_DISABLE))
&&(m_rcButton[i].PtInRect(ClientPoint)))
{
//设置数据
m_pWndHook->SetCapture();
m_cbNowDownButton=i;
DrawSkinView(NULL);
return true;
}
}
//模拟按标题
if (m_bMaxSize==false)
{
if (ClientPoint.y<GetYExcursionPos())
{
m_pWndHook->PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(ClientPoint.x,ClientPoint.y));
return true;
}
return false;
}
return true;
}
//鼠标左键事件
bool CSkinWndObject::OnLMouseUpEvent(CPoint ClientPoint)
{
//按钮搜索
if (m_cbNowDownButton!=255)
{
ReleaseCapture();
if ((m_rcButton[m_cbNowDownButton].PtInRect(ClientPoint))
&&(!(m_cbButtonState[m_cbNowDownButton]&BUT_DISABLE)))
{
switch (m_cbNowDownButton)
{
case BST_CLOSE: //关闭按钮
{
m_cbNowDownButton=255;
m_pWndHook->PostMessage(WM_CLOSE,0,0);
return true;
}
case BST_MAX: //还原按钮
{
m_cbNowDownButton=255;
if (m_bMaxSize==true) RestoreWindow();
else MaxSizeWindow();
return true;
}
case BST_MIN: //最小化按钮
{
m_cbNowDownButton=255;
m_pWndHook->ShowWindow(SW_MINIMIZE);
return true;
}
}
}
//默认操作
m_cbNowDownButton=255;
DrawSkinView(NULL);
}
return true;
}
//鼠标左键事件
bool CSkinWndObject::OnLMouseDoubleEvent(CPoint ClientPoint)
{
//判断按下
if (m_cbNowDownButton!=255) return false;
//按钮搜索
for (int i=0;i<3;i++)
{
if ((m_cbButtonState[i]&BUT_EXIST)&&(m_rcButton[i].PtInRect(ClientPoint)))
return true;
}
//最大化窗口
if ((ClientPoint.y<GetYExcursionPos())&&(m_cbButtonState[BST_MAX]&BUT_EXIST)&&
(!(m_cbButtonState[BST_MAX]&BUT_DISABLE)))
{
if (m_bMaxSize==true) RestoreWindow();
else MaxSizeWindow();
}
return true;
}
//鼠标右键事件
bool CSkinWndObject::OnRMouseDownEvent(CPoint ClientPoint)
{
return true;
}
//鼠标右键事件
bool CSkinWndObject::OnRMouseUpEvent(CPoint ClientPoint)
{
return true;
}
//鼠标右键事件
bool CSkinWndObject::OnRMouseDoubleEvent(CPoint ClientPoint)
{
return true;
}
//////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -