📄 pregraphic.cpp
字号:
//写文字
pData->Rect.left += 4*pData->xPix;
pData->dwStyle = DT_LEFT | DT_TOP;
//pData->crBkColor = pData->crBkColorParent;
pData->nBkMode = OPAQUE;
DrawText(pDraw);
return TRUE;
}
//画Check
//////////////////////////////////////////////////////////////
#define CALPIX(x) (x*xPix)
BOOL CPreGraphic::DrawCheck(void * pDraw)
{
CDataCell *pData = (CDataCell*)pDraw;
CDC *pDC = pData->pDC;
CBrush Brush;
CPen Pen, *pOldPen;
BOOL bChecked = FALSE;
CRect Rect = pData->Rect;
CRect rcText, rcRound;
DOUBLE xPix = pData->xPix;
DOUBLE yPix = pData->yPix;
//画背景
/*
if(!Brush.CreateSolidBrush(pData->crBkColorParent))return FALSE;
pDC->FillRect(&Rect, &Brush);
Brush.DeleteObject();
*/
if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;
//计算方框位置
rcRound.SetRect(1,1,13,13);
CalMulRect(&rcRound, pData->xPix,pData->yPix);
if (pData->dwStyle & BS_LEFTTEXT)
{
rcText = Rect;
Rect.top += (Rect.Height()-rcRound.Height())/2;
Rect.bottom = Rect.top+rcRound.Height();
Rect.right -= rcRound.left; Rect.left = Rect.right - rcRound.Width();
rcText.right -= rcRound.right+rcRound.left;
}
else
{
rcText = Rect;
Rect.top += (Rect.Height()-rcRound.Height())/2;
Rect.bottom = Rect.top+rcRound.Height();
Rect.left += rcRound.left; Rect.right = Rect.left + rcRound.Width();
rcText.left += rcRound.right+rcRound.left;
}
//绘方框
if(!Pen.CreatePen(PS_SOLID, CALPIX(1),pData->crColor))return FALSE;
pOldPen=(CPen *)pDC->SelectObject(&Pen);
if(pData->dwStyle & BS_FLAT)
{//平面
// if(!Brush.CreateSolidBrush(pData->crColor))return FALSE;
// pDC->FrameRect(&Rect, &Brush);
// Brush.DeleteObject();
FrameRect(pDC, &Rect);
}
else
{//其它
pDC->Draw3dRect(&Rect,GetSysColor(COLOR_3DDKSHADOW),
GetSysColor(COLOR_3DHILIGHT));
}
pDC->SelectObject(pOldPen);
Pen.DeleteObject();
//绘内框
Rect.DeflateRect(1,1);
if(pData->dwStyle & WS_DISABLED)
{
if(!Brush.CreateSolidBrush(GetSysColor(COLOR_BTNFACE)))return FALSE;
}
else
{
if(!Brush.CreateSolidBrush(pData->crBkColor))return FALSE;
}
pDC->FillRect(&Rect, &Brush);
Brush.DeleteObject();
if(pData->dwCommand == PNS_DATABASE)
{//数据库类型
if(pData->strText == "TRUE" ||
pData->strText == "Y" ||
pData->strText == "1")
bChecked = TRUE;
}
// else
// {
// DWORD dwStyle = SendMessage(pData->hWnd, BM_GETCHECK, 0, 0);
// if (dwStyle == BST_CHECKED) bChecked = TRUE;
// }
//绘选仲标志
if(bChecked)
{
if(!Pen.CreatePen(PS_SOLID,1, pData->crTextColor))return FALSE;
pOldPen = pDC->SelectObject(&Pen);
Rect.DeflateRect(Rect.Width()/4,Rect.Height()/4);//√起启位置
for (int i = CALPIX(3); i < CALPIX(10); i++)
{
pDC->MoveTo(Rect.left+i-CALPIX(3), Rect.top + ((i < CALPIX(6)) ? i - CALPIX(1) : (CALPIX(9) - i)));
pDC->LineTo(Rect.left+i-CALPIX(3), Rect.top + ((i < CALPIX(6)) ? i + CALPIX(2) : (CALPIX(12) - i )));
}
pDC->SelectObject(pOldPen);
Pen.DeleteObject();
}
//写文字
if(pData->dwCommand != PNS_DATABASE)
{//数据库类型,约定不写文字
pData->Rect = rcText;
pData->nBkMode = TRANSPARENT;
pData->dwStyle=ButtonStyle2Format(pData->dwStyle);
DrawText(pDraw);
}
return TRUE;
}
//////////////////////////////////////////////////////////
//画Button
BOOL CPreGraphic::DrawButton(void * pDraw)
{
CDataCell *pData = (CDataCell*)pDraw;
CDC *pDC = pData->pDC;
CBrush Brush;//, *pOldBrush;
CPen Pen;//, *pOldPen;
CRect Rect = pData->Rect;
//画背景,不知道有没有必要
if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;
if(!Brush.CreateSolidBrush(pData->crBkColor))return FALSE;
pDC->FillRect(&Rect, &Brush);
Brush.DeleteObject();
if(pData->dwStyle & BS_FLAT)
{//平面模式
if(!Brush.CreateSolidBrush(pData->crColor))return FALSE;
pDC->FrameRect(&Rect, &Brush);
Brush.DeleteObject();
}
else
{//其它
pDC->Draw3dRect(&Rect,GetSysColor(COLOR_3DHILIGHT),
GetSysColor(COLOR_3DDKSHADOW));
}
//写文字
pData->nBkMode = TRANSPARENT;
pData->dwStyle = ButtonStyle2Format(pData->dwStyle);
DrawText(pDraw);
return TRUE;
}
////////////////////////////////////////////
//写文字
BOOL CPreGraphic::DrawText(void * pDraw)
{
CDataCell *pData = (CDataCell*)pDraw;
CDC *pDC = pData->pDC;
CRect Rect = pData->Rect;
Rect.left += 2; //略略右移2位
pDC->SetBkColor(pData->crBkColor);
pDC->SetBkMode(pData->nBkMode);
CFont Font,*pOldFont = NULL;
LOGFONT LogFont;
if(pData->pFont)//默认已指字体
{
if(pData->bIsPrint)
int i = 0;
if(!pData->pFont->GetLogFont(&LogFont))return FALSE;
LogFont.lfWidth*=pData->xPix;///4;
LogFont.lfHeight*=pData->yPix;///4;
if(!Font.CreateFontIndirect(&LogFont))return FALSE;
pOldFont = pDC->SelectObject(&Font);
}
if(pData->dwStyle & WS_DISABLED)
{//禁止
pDC->SetTextColor(GetSysColor(COLOR_3DHIGHLIGHT));
pDC->DrawText(pData->strText, Rect, pData->dwStyle);
// Rect.top -= 2*pData->xPix;
// Rect.left -= 2*pData->yPix;
pDC->SetTextColor(GetSysColor(COLOR_GRAYTEXT));
pDC->DrawText(pData->strText, Rect, pData->dwStyle);
}
else
{
pDC->SetTextColor(pData->crTextColor);
pDC->DrawText(pData->strText, Rect, pData->dwStyle);
}
if(pOldFont) pDC->SelectObject(pOldFont);
return TRUE;
}
//////////////////////////////////////////////////////
//画线
BOOL CPreGraphic::DrawFrame(void * pDraw)
{
CDataCell *pData = (CDataCell*)pDraw;
CDC *pDC = pData->pDC;
CGdiObject *pOldObject;
CPen *pPen,*pOldPen;
if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;
if(pData->pPen==NULL) //没有指定绘笔
{
pPen = new CPen;
if(pPen == NULL)
return FALSE;
if(!pPen->CreatePen(PS_SOLID, 1,pData->crColor))
return FALSE;
}
else
{
pPen = pData->pPen;
}
//画线
pOldPen=pDC->SelectObject(pPen);
CRect Rect = pData->Rect;
pOldObject=pDC->SelectStockObject(NULL_BRUSH);
pDC->Rectangle(&Rect);
pDC->SelectObject(pOldPen);
if(pData->pPen==NULL) //删除
{
pPen->DeleteObject();
delete pPen;
}
return TRUE;
}
//////////////////////////////////////////////////////
//画实心框
BOOL CPreGraphic::DrawRange(void * pDraw)
{
CDataCell *pData = (CDataCell*)pDraw;
CDC *pDC = pData->pDC;
CBrush Brush;
CRect Rect = pData->Rect;
Rect.right-=pData->xPix; //减少1,因为IDE无法画为1宽的线
Rect.bottom-=pData->yPix; //减少1,因为IDE无法画为1宽的线
if(!(pData->dwStyle & WS_VISIBLE)) return TRUE;
if(pData->dwStyle & WS_DISABLED)
{
if(!Brush.CreateSolidBrush(GetSysColor(COLOR_BTNFACE)))
return FALSE;
}
else
{
if(!Brush.CreateSolidBrush(pData->crColor))
return FALSE;
}
pDC->FillRect(&Rect, &Brush);
Brush.DeleteObject();
return TRUE;
}
/////////////////////////////////////////////////////////////
//自绘控件,不能识别的将被忽略
////////
BOOL CPreGraphic::DrawItem(void *pDraw)
{
static char s_szClass[][32] =
{
"Button", // 按钮类0
"Edit", // 编辑框类1
"ComboBox", // 组合框类2
"ListBox", // 列表框3
"ScrollBar", // 滚动条4
"Static", // 说明条5
"#32770", // 窗口6
"msctls_hotkey32", // 热键7
"SysIPAddress32", // IP 地址8
"SysListView32", // 列表查看9
"SysTreeView32", // 树形查看10
"SysDateTimePick32", // 日期/时间选择11
"msctls_updown32", // 旋转12
"SysMonthCal32", // 月历13
"SysTabControl32", // TAB 控件14
"msctls_progress32", // 进度条15
"msctls_trackbar32", // 追踪条16
};
CDataCell *pData = (CDataCell*)pDraw;
if(pData->pDC==NULL)return FALSE;
for (int lReturn = 0; lReturn < (sizeof(s_szClass) / sizeof(s_szClass[0])); lReturn++)
if (pData->strType == s_szClass[lReturn])
break;
DWORD dwStyle = pData->dwStyle;
switch (lReturn)
{
case 0: //按钮
switch (dwStyle & SS_TYPEMASK)
{
case BS_CHECKBOX: // 复选框
case BS_AUTOCHECKBOX: // 自动复选框
case BS_3STATE: // 三状态复选框
case BS_AUTO3STATE: // 自动三状态复选框
if (dwStyle & BS_PUSHLIKE)
return DrawButton(pDraw);
else
return DrawCheck(pDraw);
case BS_RADIOBUTTON: // 单选框
case BS_AUTORADIOBUTTON: // 自动单选框
if (dwStyle & BS_PUSHLIKE)
return DrawButton(pDraw);
else
return DrawRadio(pDraw);
break;
case BS_DEFPUSHBUTTON: // 默认按钮
case BS_PUSHBUTTON: // 普通按钮
return DrawButton(pDraw);
case BS_GROUPBOX: // 分组框
return DrawGroup(pDraw);
}
break;
case 5://静态说明条
// if(dwStyle & SS_BLACKRECT)//SS_BLACKFRAME类型表示绘线
// return DrawLine(pDraw);
// else
return DrawStatic(pDraw);
break;
}//end switch
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -