📄 haictrl.c
字号:
hCtrl = hai_CreateCtrl(CT_LISTAREA, CtrlID, style, x, y, w, h);
if (hCtrl)
ok = hai_SetListAreaCtrlInfo(hCtrl, LineH);
if (hCtrl && !ok)
{
_hai_DestroyCtrl(hCtrl, S_FALSE);
hCtrl = S_NULL;
}
return hCtrl;
}
S_DWORD hai_ListAreaCtrlProc(SH_CTRL hCtrl, S_BYTE event, WPARAM wParam, LPARAM lParam)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
S_SHORT x, y;
x = HAI_GETLOWORD(lParam);
y = HAI_GETHIWORD(lParam);
switch (event)
{
case EVT_CREAT:
break;
case EVT_PAINT:
break;
case EVT_TIMER:
break;
case EVT_KEYDN:
break;
case EVT_SYSKEY:
break;
case EVT_DESTROY:
break;
case EVT_MOUSEDN:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEDN,pCtrl->CtrlID), (y - pCtrl->y) / pCtrl->ListAreaData.LineH);
break;
case EVT_MOUSEUP:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEUP,pCtrl->CtrlID), (y - pCtrl->y) / pCtrl->ListAreaData.LineH);
break;
case EVT_MOUSEDB:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEDB,pCtrl->CtrlID), (y - pCtrl->y) / pCtrl->ListAreaData.LineH);
break;
case EVT_MOUSEMV:
break;
case EVT_RESTORE:
break;
case EVT_COMMAND:
break;
default:
break;
}
return 0;
}
//scroll bar
//
S_BOOL hai_SetScrlBarCtrlInfo(SH_CTRL hCtrl, S_DWORD TotalLine, S_DWORD CurStart, S_WORD LinePerPage)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
S_DWORD totallines;
if (!pCtrl || pCtrl->CtrlType != CT_SCRLBAR)
return S_FALSE;
if (TotalLine <= LinePerPage)
CurStart = 0;
else
{
if (CurStart > TotalLine - LinePerPage)
CurStart = 0;
}
if ((pCtrl->style&BS_SCRLBAR_VH_MASK) == BS_VSCRLBAR)
{
if (pCtrl->h < BS_SCRLBAR_WIDTH*3)
pCtrl->h = BS_SCRLBAR_WIDTH*3;
pCtrl->w = BS_SCRLBAR_WIDTH;
}
else
{
if (pCtrl->w < BS_SCRLBAR_WIDTH*3)
pCtrl->w = BS_SCRLBAR_WIDTH*3;
pCtrl->h = BS_SCRLBAR_WIDTH;
}
pCtrl->ScrlBarData.TotalLine = TotalLine;
pCtrl->ScrlBarData.CurStart = CurStart;
pCtrl->ScrlBarData.LinePerPage = LinePerPage;
totallines = pCtrl->ScrlBarData.TotalLine ? pCtrl->ScrlBarData.TotalLine : 1;
if ((pCtrl->style&BS_SCRLBAR_VH_MASK) == BS_VSCRLBAR)
pCtrl->ScrlBarData.ThumbW = pCtrl->h - BS_SCRLBAR_WIDTH*2;
else
pCtrl->ScrlBarData.ThumbW = pCtrl->w - BS_SCRLBAR_WIDTH*2;
if(pCtrl->ScrlBarData.LinePerPage && pCtrl->ScrlBarData.LinePerPage < totallines)
{
pCtrl->ScrlBarData.ThumbW = (S_WORD)(pCtrl->ScrlBarData.ThumbW * pCtrl->ScrlBarData.LinePerPage / totallines);
if( pCtrl->ScrlBarData.ThumbW < 8 )
pCtrl->ScrlBarData.ThumbW = 8;
}
pCtrl->ScrlBarData.ThumbPos = 0;
if ((pCtrl->style&BS_SCRLBAR_VH_MASK) == BS_VSCRLBAR)
{
if(pCtrl->ScrlBarData.CurStart)
{
pCtrl->ScrlBarData.ThumbPos = (S_WORD)((pCtrl->h-BS_SCRLBAR_WIDTH*2)*(pCtrl->ScrlBarData.CurStart+pCtrl->ScrlBarData.LinePerPage)/totallines-pCtrl->ScrlBarData.ThumbW);
if( pCtrl->ScrlBarData.ThumbPos < 0 )
pCtrl->ScrlBarData.ThumbPos = 0;
}
if(pCtrl->ScrlBarData.ThumbPos + pCtrl->ScrlBarData.ThumbW > pCtrl->h-BS_SCRLBAR_WIDTH*2)
pCtrl->ScrlBarData.ThumbPos = pCtrl->h-BS_SCRLBAR_WIDTH*2-pCtrl->ScrlBarData.ThumbW;
}
else
{
if(pCtrl->ScrlBarData.CurStart)
{
pCtrl->ScrlBarData.ThumbPos = (S_WORD)((pCtrl->w-BS_SCRLBAR_WIDTH*2)*(pCtrl->ScrlBarData.CurStart+pCtrl->ScrlBarData.LinePerPage)/totallines-pCtrl->ScrlBarData.ThumbW);
if( pCtrl->ScrlBarData.ThumbPos < 0 )
pCtrl->ScrlBarData.ThumbPos = 0;
}
if(pCtrl->ScrlBarData.ThumbPos + pCtrl->ScrlBarData.ThumbW > pCtrl->w-BS_SCRLBAR_WIDTH*2)
pCtrl->ScrlBarData.ThumbPos = pCtrl->w-BS_SCRLBAR_WIDTH*2-pCtrl->ScrlBarData.ThumbW;
}
return S_TRUE;
}
SH_CTRL hai_CreateScrlBar(S_DWORD style, S_BYTE CtrlID, S_SHORT x, S_SHORT y, S_SHORT w, S_SHORT h, S_DWORD TotalLine, S_DWORD CurStart, S_WORD LinePerPage)
{
S_BOOL ok;
SH_CTRL hCtrl;
hCtrl = hai_CreateCtrl(CT_SCRLBAR, CtrlID, style, x, y, w, h);
if (hCtrl)
ok = hai_SetScrlBarCtrlInfo(hCtrl, TotalLine, CurStart, LinePerPage);
if (hCtrl && !ok)
{
_hai_DestroyCtrl(hCtrl, S_FALSE);
hCtrl = S_NULL;
}
return hCtrl;
}
S_BOOL hai_GetScrlBarInfo(SH_CTRL hCtrl, S_DWORD *CurStart, S_DWORD *TotalLines, S_WORD *LinesPerPage)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
if (!pCtrl || pCtrl->CtrlType != CT_SCRLBAR)
return S_FALSE;
if (CurStart) *CurStart = pCtrl->ScrlBarData.CurStart;
if (TotalLines) *TotalLines = pCtrl->ScrlBarData.TotalLine;
if (LinesPerPage) *LinesPerPage = pCtrl->ScrlBarData.LinePerPage;
return S_TRUE;
}
S_BOOL hai_SetScrlBarInfo(SH_CTRL hCtrl, S_DWORD CurStart, S_DWORD TotalLines, S_WORD LinesPerPage)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
S_DWORD totallines;
if (!pCtrl || pCtrl->CtrlType != CT_SCRLBAR)
return S_FALSE;
if (TotalLines <= LinesPerPage)
CurStart = 0;
else
{
if (CurStart > TotalLines - LinesPerPage)
CurStart = 0;
}
// if (pCtrl->ScrlBarData.TotalLine == TotalLines && pCtrl->ScrlBarData.CurStart == CurStart
// && pCtrl->ScrlBarData.LinePerPage == LinesPerPage)
// return S_FALSE;
pCtrl->ScrlBarData.TotalLine = TotalLines;
pCtrl->ScrlBarData.CurStart = CurStart;
pCtrl->ScrlBarData.LinePerPage = LinesPerPage;
totallines = pCtrl->ScrlBarData.TotalLine ? pCtrl->ScrlBarData.TotalLine : 1;
if ((pCtrl->style&BS_SCRLBAR_VH_MASK) == BS_VSCRLBAR)
pCtrl->ScrlBarData.ThumbW = pCtrl->h - BS_SCRLBAR_WIDTH*2;
else
pCtrl->ScrlBarData.ThumbW = pCtrl->w - BS_SCRLBAR_WIDTH*2;
if(pCtrl->ScrlBarData.LinePerPage && pCtrl->ScrlBarData.LinePerPage < totallines)
{
pCtrl->ScrlBarData.ThumbW = (S_WORD)(pCtrl->ScrlBarData.ThumbW * pCtrl->ScrlBarData.LinePerPage / totallines);
if( pCtrl->ScrlBarData.ThumbW < 8 )
pCtrl->ScrlBarData.ThumbW = 8;
}
pCtrl->ScrlBarData.ThumbPos = 0;
if ((pCtrl->style&BS_SCRLBAR_VH_MASK) == BS_VSCRLBAR)
{
if(pCtrl->ScrlBarData.CurStart)
{
pCtrl->ScrlBarData.ThumbPos = (S_WORD)((pCtrl->h-BS_SCRLBAR_WIDTH*2)*(pCtrl->ScrlBarData.CurStart+pCtrl->ScrlBarData.LinePerPage)/totallines-pCtrl->ScrlBarData.ThumbW);
if( pCtrl->ScrlBarData.ThumbPos < 0 )
pCtrl->ScrlBarData.ThumbPos = 0;
}
if(pCtrl->ScrlBarData.ThumbPos + pCtrl->ScrlBarData.ThumbW > pCtrl->h-BS_SCRLBAR_WIDTH*2)
pCtrl->ScrlBarData.ThumbPos = pCtrl->h-BS_SCRLBAR_WIDTH*2-pCtrl->ScrlBarData.ThumbW;
}
else
{
if(pCtrl->ScrlBarData.CurStart)
{
pCtrl->ScrlBarData.ThumbPos = (S_WORD)((pCtrl->w-BS_SCRLBAR_WIDTH*2)*(pCtrl->ScrlBarData.CurStart+pCtrl->ScrlBarData.LinePerPage)/totallines-pCtrl->ScrlBarData.ThumbW);
if( pCtrl->ScrlBarData.ThumbPos < 0 )
pCtrl->ScrlBarData.ThumbPos = 0;
}
if(pCtrl->ScrlBarData.ThumbPos + pCtrl->ScrlBarData.ThumbW > pCtrl->w-BS_SCRLBAR_WIDTH*2)
pCtrl->ScrlBarData.ThumbPos = pCtrl->w-BS_SCRLBAR_WIDTH*2-pCtrl->ScrlBarData.ThumbW;
}
pCtrl->CtrlProc(hCtrl, EVT_RESTORE, 0, 0);
return S_TRUE;
}
S_DWORD hai_VScrlBarCtrlProc(SH_CTRL hCtrl, S_BYTE event, WPARAM wParam, LPARAM lParam)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
S_SHORT x, y, i;
SH_DC hDC;
SH_BRUSH hBrush;
S_DWORD PreStart;
switch (event)
{
case EVT_CREAT:
break;
case EVT_PAINT:
if (!pCtrl->visible)
break;
hDC = hai_GetSceneDC();
x = pCtrl->x; y = pCtrl->y;
hai_Draw3DBlock(hDC, x, y, BS_SCRLBAR_WIDTH, BS_SCRLBAR_WIDTH, BLOCK_3D_UP, GRAY_BRUSH);
y += pCtrl->h - BS_SCRLBAR_WIDTH;
hai_Draw3DBlock(hDC, x, y, BS_SCRLBAR_WIDTH, BS_SCRLBAR_WIDTH, BLOCK_3D_UP, GRAY_BRUSH);
x = pCtrl->x + BS_SCRLBAR_WIDTH/2;
y = pCtrl->y + (BS_SCRLBAR_WIDTH - (BS_SCRLBAR_WIDTH+3)/4)/2-1;
for(i = 0 ; i < (BS_SCRLBAR_WIDTH + 3)/4+1 ; ++i)
_hai_DrawHLine(hDC, (S_SHORT)(x-i), (S_SHORT)(x+i), y++, COLOR_BLACK);
y = pCtrl->y+pCtrl->h-1-(BS_SCRLBAR_WIDTH-(BS_SCRLBAR_WIDTH+3)/4)/2+1;
for(i=0 ; i < (BS_SCRLBAR_WIDTH+3)/4+1; ++i)
_hai_DrawHLine(hDC, (S_SHORT)(x-i), (S_SHORT)(x+i), y--, COLOR_BLACK);
hBrush = (SH_BRUSH)hai_GetStockObject(LTGRAY_BRUSH);
hBrush = (SH_BRUSH)hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
hai_BitBlt(hDC, pCtrl->x, (S_SHORT)(pCtrl->y+BS_SCRLBAR_WIDTH), BS_SCRLBAR_WIDTH, (S_SHORT)(pCtrl->h-BS_SCRLBAR_WIDTH*2), S_NULL, 0, 0, PATCOPY);
hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
hai_Draw3DBlock(hDC, pCtrl->x, (S_SHORT)(pCtrl->y+pCtrl->ScrlBarData.ThumbPos+BS_SCRLBAR_WIDTH), BS_SCRLBAR_WIDTH, pCtrl->ScrlBarData.ThumbW, BLOCK_3D_UP, GRAY_BRUSH);
if (pCtrl->focus)
hai_DrawBoxByDashed(hDC, (S_SHORT)(pCtrl->x+2), (S_SHORT)(pCtrl->y+pCtrl->ScrlBarData.ThumbPos+BS_SCRLBAR_WIDTH+2), (S_SHORT)(BS_SCRLBAR_WIDTH-5), (S_SHORT)(pCtrl->ScrlBarData.ThumbW-5), COLOR_BLACK);
hai_ReleaseDC(hDC);
_hai_ObjectUpdateRect(pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h);
break;
case EVT_TIMER:
break;
case EVT_KEYDN:
switch (wParam)
{
case VK_PRIOR:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_PAGEUP,pCtrl->CtrlID), 0);
break;
case VK_NEXT:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_PAGEDOWN,pCtrl->CtrlID), 0);
break;
case VK_END:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_BOTTOM,pCtrl->CtrlID), 0);
break;
case VK_HOME:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_TOP,pCtrl->CtrlID), 0);
break;
case VK_UP:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_LINEUP,pCtrl->CtrlID), 0);
break;
case VK_DOWN:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_LINEDOWN,pCtrl->CtrlID), 0);
break;
default:
hai_SendEvent(EVT_KEYDN, wParam, lParam);
break;
}
break;
case EVT_KEYUP:
switch (wParam)
{
case VK_PRIOR:
case VK_NEXT:
case VK_END:
case VK_HOME:
case VK_UP:
case VK_DOWN:
break;
default:
hai_SendEvent(EVT_KEYUP, wParam, lParam);
break;
}
break;
case EVT_CHAR:
break;
case EVT_SYSKEY:
break;
case EVT_DESTROY:
break;
case EVT_MOUSEDN:
hai_SetCapture(hCtrl);
x = HAI_GETLOWORD(lParam);
y = HAI_GETHIWORD(lParam);
hDC = hai_GetSceneDC();
if (y < pCtrl->y+BS_SCRLBAR_WIDTH)
{
pCtrl->ScrlBarData.ClickArea = 1;
hai_Draw3DBlock(hDC, pCtrl->x, pCtrl->y, BS_SCRLBAR_WIDTH, BS_SCRLBAR_WIDTH, BLOCK_3D_DN, GRAY_BRUSH);
x = pCtrl->x + BS_SCRLBAR_WIDTH/2;
y = pCtrl->y + (BS_SCRLBAR_WIDTH - (BS_SCRLBAR_WIDTH+3)/4)/2-1;
for(i = 0 ; i < (BS_SCRLBAR_WIDTH + 3)/4+1 ; ++i)
_hai_DrawHLine(hDC, (S_SHORT)(x-i), (S_SHORT)(x+i), y++, COLOR_BLACK);
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_LINEUP, pCtrl->CtrlID), 0);
}
else if (y < pCtrl->y+BS_SCRLBAR_WIDTH+pCtrl->ScrlBarData.ThumbPos)
{
pCtrl->ScrlBarData.ClickArea = 2;
hBrush = (SH_BRUSH)hai_GetStockObject(GRAY_BRUSH);
hBrush = (SH_BRUSH)hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
hai_BitBlt(hDC, pCtrl->x, (S_SHORT)(pCtrl->y+BS_SCRLBAR_WIDTH), BS_SCRLBAR_WIDTH, (S_SHORT)(pCtrl->ScrlBarData.ThumbPos), S_NULL, 0, 0, PATCOPY);
hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_PAGEUP, pCtrl->CtrlID), 0);
}
else if (y < pCtrl->y+BS_SCRLBAR_WIDTH+pCtrl->ScrlBarData.ThumbPos+pCtrl->ScrlBarData.ThumbW)
{
pCtrl->ScrlBarData.ClickArea = 3;
pCtrl->ScrlBarData.PriorMouseY = y;
}
else if (y < pCtrl->y+pCtrl->h-BS_SCRLBAR_WIDTH)
{
pCtrl->ScrlBarData.ClickArea = 4;
hBrush = (SH_BRUSH)hai_GetStockObject(GRAY_BRUSH);
hBrush = (SH_BRUSH)hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
hai_BitBlt(hDC, pCtrl->x, (S_SHORT)(pCtrl->y+BS_SCRLBAR_WIDTH+pCtrl->ScrlBarData.ThumbPos+pCtrl->ScrlBarData.ThumbW), BS_SCRLBAR_WIDTH, (S_SHORT)(pCtrl->h-pCtrl->ScrlBarData.ThumbPos-pCtrl->ScrlBarData.ThumbW-BS_SCRLBAR_WIDTH*2), S_NULL, 0, 0, PATCOPY);
hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_PAGEDOWN, pCtrl->CtrlID), 0);
}
else
{
pCtrl->ScrlBarData.ClickArea = 5;
y = pCtrl->y + pCtrl->h - BS_SCRLBAR_WIDTH;
hai_Draw3DBlock(hDC, pCtrl->x, y, BS_SCRLBAR_WIDTH, BS_SCRLBAR_WIDTH, BLOCK_3D_DN, GRAY_BRUSH);
x = pCtrl->x + BS_SCRLBAR_WIDTH/2;
y = pCtrl->y+pCtrl->h-1-(BS_SCRLBAR_WIDTH-(BS_SCRLBAR_WIDTH+3)/4)/2+1;
for(i=0 ; i < (BS_SCRLBAR_WIDTH+3)/4+1; ++i)
_hai_DrawHLine(hDC, (S_SHORT)(x-i), (S_SHORT)(x+i), y--, COLOR_BLACK);
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_LINEDOWN, pCtrl->CtrlID), 0);
}
hai_ReleaseDC(hDC);
_hai_ObjectUpdateRect(pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h);
break;
case EVT_MOUSEUP:
x = HAI_GETLOWORD(lParam);
y = HAI_GETHIWORD(lParam);
hDC = hai_GetSceneDC();
if (pCtrl->ScrlBarData.ClickArea == 1)//(y < pCtrl->y+BS_SCRLBAR_WIDTH)
{
hai_Draw3DBlock(hDC, pCtrl->x, pCtrl->y, BS_SCRLBAR_WIDTH, BS_SCRLBAR_WIDTH, BLOCK_3D_UP, GRAY_BRUSH);
x = pCtrl->x + BS_SCRLBAR_WIDTH/2;
y = pCtrl->y + (BS_SCRLBAR_WIDTH - (BS_SCRLBAR_WIDTH+3)/4)/2-1;
for(i = 0 ; i < (BS_SCRLBAR_WIDTH + 3)/4+1 ; ++i)
_hai_DrawHLine(hDC, (S_SHORT)(x-i), (S_SHORT)(x+i), y++, COLOR_BLACK);
}
else if (pCtrl->ScrlBarData.ClickArea == 2)//(y < pCtrl->y+BS_SCRLBAR_WIDTH+pCtrl->ScrlBarData.ThumbPos)
{
hBrush = (SH_BRUSH)hai_GetStockObject(LTGRAY_BRUSH);
hBrush = (SH_BRUSH)hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
if (pCtrl->ScrlBarData.ThumbPos)
hai_BitBlt(hDC, pCtrl->x, (S_SHORT)(pCtrl->y+BS_SCRLBAR_WIDTH), BS_SCRLBAR_WIDTH, (S_SHORT)(pCtrl->ScrlBarData.ThumbPos), S_NULL, 0, 0, PATCOPY);
hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
}
else if (pCtrl->ScrlBarData.ClickArea == 3)//(y < pCtrl->y+BS_SCRLBAR_WIDTH+pCtrl->ScrlBarData.ThumbPos+pCtrl->ScrlBarData.ThumbW)
{
PreStart = 0;
if (pCtrl->ScrlBarData.TotalLine && pCtrl->ScrlBarData.TotalLine > pCtrl->ScrlBarData.LinePerPage)
{
PreStart = (pCtrl->ScrlBarData.ThumbPos + pCtrl->ScrlBarData.ThumbW) * pCtrl->ScrlBarData.TotalLine;
PreStart = PreStart / (pCtrl->h - BS_SCRLBAR_WIDTH*2);
if (PreStart > pCtrl->ScrlBarData.LinePerPage)
PreStart = PreStart - pCtrl->ScrlBarData.LinePerPage;
else
PreStart = 0;
}
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(SB_THUMBPOSITION, pCtrl->CtrlID), PreStart);
hai_SetScrlBarInfo(hCtrl, pCtrl->ScrlBarData.CurStart, pCtrl->ScrlBarData.TotalLine, pCtrl->ScrlBarData.LinePerPage);
pCtrl->ScrlBarData.PriorMouseY = 0;
}
else if (pCtrl->ScrlBarData.ClickArea == 4)//(y < pCtrl->y+pCtrl->h-BS_SCRLBAR_WIDTH)
{
hBrush = (SH_BRUSH)hai_GetStockObject(LTGRAY_BRUSH);
hBrush = (SH_BRUSH)hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
if (pCtrl->h-pCtrl->ScrlBarData.ThumbPos-pCtrl->ScrlBarData.ThumbW-BS_SCRLBAR_WIDTH*2)
hai_BitBlt(hDC, pCtrl->x, (S_SHORT)(pCtrl->y+BS_SCRLBAR_WIDTH+pCtrl->ScrlBarData.ThumbPos+pCtrl->ScrlBarData.ThumbW), BS_SCRLBAR_WIDTH, (S_SHORT)(pCtrl->h-pCtrl->ScrlBarData.ThumbPos-pCtrl->ScrlBarData.ThumbW-BS_SCRLBAR_WIDTH*2), S_NULL, 0, 0, PATCOPY);
hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
}
else if (pCtrl->ScrlBarData.ClickArea == 5)
{
y = pCtrl->y + pCtrl->h - BS_SCRLBAR_WIDTH;
hai_Draw3DBlock(hDC, pCtrl->x, y, BS_SCRLBAR_WIDTH, BS_SCRLBAR_WIDTH, BLOCK_3D_UP, GRAY_BRUSH);
x = pCtrl->x + BS_SCRLBAR_WIDTH/2;
y = pCtrl->y+pCtrl->h-1-(BS_SCRLBAR_WIDTH-(BS_SCRLBAR_WIDTH+3)/4)/2+1;
for(i=0 ; i < (BS_SCRLBAR_WIDTH+3)/4+1; ++i)
_hai_DrawHLine(hDC, (S_SHORT)(x-i), (S_SHORT)(x+i), y--, COLOR_BLACK);
}
hai_ReleaseDC(hDC);
pCtrl->ScrlBarData.ClickArea = 0;
_hai_ObjectUpdateRect(pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h);
hai_ReleaseCapture();
break;
case EVT_MOUSEDB:
hai_ReleaseCapture();
break;
case EVT_MOUSEMV:
x = HAI_GETLOWORD(lParam);
y = HAI_GETHIWORD(lParam);
hDC = hai_GetSceneDC();
if (x>pCtrl->x && x<pCtrl->x+pCtrl->w && y>pCtrl->y && y<pCtrl->y+pCtrl->h)
{
if (pCtrl->ScrlBarData.ClickArea == 0)
{
}
else
{
if (y < pCtrl->y+BS_SCRLBAR_WIDTH)
{
if (pCtrl->ScrlBarData.ClickArea != 1)
{
hai_VScrlBarCtrlProc(hCtrl, EVT_MOUSEUP, wParam, lParam);
}
}
else if (y < pCtrl->y+BS_SCRLBAR_WIDTH+pCtrl->ScrlBarData.ThumbPos)
{
if (pCtrl->ScrlBarData.ClickArea != 2)
{
hai_VScrlBarCtrlProc(hCtrl, EVT_MOUSEUP, wParam, lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -