📄 haictrl.c
字号:
break;
case EVT_MOUSEUP:
break;
case EVT_MOUSEDB:
break;
case EVT_MOUSEMV:
break;
case EVT_RESTORE:
break;
case EVT_COMMAND:
break;
default:
break;
}
return 0;
}
S_DWORD hai_RadioBtnCtrlProc(SH_CTRL hCtrl, S_BYTE event, WPARAM wParam, LPARAM lParam)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
switch (event)
{
case EVT_CREAT:
break;
case EVT_PAINT:
{
SH_DC hDC;
SH_BITMAP hTemp, hbitmap;
if (!pCtrl->visible)
break;
if (pCtrl->h < CTRL_CHECKBTN_FLAG_W)
pCtrl->h = CTRL_CHECKBTN_FLAG_W;
hDC = hai_GetSceneDC();
if (pCtrl->grayed)
hai_SelectObject(hDC, (SH_GDIOBJ)hai_GetStockObject(GRAY_BRUSH));
hai_SendEvent(EVT_CTRLCOLOR, (WPARAM)(pCtrl->CtrlID), (LPARAM)hDC);
hai_BitBlt(hDC, pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h, S_NULL, 0, 0, PATCOPY);
if (pCtrl->grayed)
{
if (pCtrl->ButtonData.GrayPicID)
{
hTemp = hai_LoadBitmap((S_BYTE *)(pCtrl->ButtonData.GrayPicID));
hbitmap = hai_CreateFormatBitmap(hDC, hTemp);
hai_DeleteObject((SH_GDIOBJ)hTemp);
hai_DrawIcon(hDC, pCtrl->x, pCtrl->y, (SH_ICON)hbitmap);
hai_DeleteObject((SH_GDIOBJ)hbitmap);
}
else
{
if (pCtrl->focus)
hTemp = hai_LoadBitmap(MAKEINTRESOURCE(IDI_RADIOSELG));
else
hTemp = hai_LoadBitmap(MAKEINTRESOURCE(IDI_RADIONORG));
hbitmap = hai_CreateFormatBitmap(hDC, hTemp);
hai_DeleteObject((SH_GDIOBJ)hTemp);
hai_DrawIcon(hDC, (S_SHORT)(pCtrl->x+2), (S_SHORT)(pCtrl->y + ((pCtrl->h-CTRL_CHECKBTN_FLAG_W)>>1)), (SH_ICON)hbitmap);
hai_DeleteObject((SH_GDIOBJ)hbitmap);
}
}
else
{
if (pCtrl->state == BS_CHECKBTN_CHECKED)
if (pCtrl->ButtonData.UpPicID)
{
hTemp = hai_LoadBitmap((S_BYTE *)(pCtrl->ButtonData.UpPicID));
hbitmap = hai_CreateFormatBitmap(hDC, hTemp);
hai_DeleteObject((SH_GDIOBJ)hTemp);
hai_DrawIcon(hDC, pCtrl->x, pCtrl->y, (SH_ICON)hbitmap);
hai_DeleteObject((SH_GDIOBJ)hbitmap);
}
else
{
hTemp = hai_LoadBitmap(MAKEINTRESOURCE(IDI_RADIOSEL));
hbitmap = hai_CreateFormatBitmap(hDC, hTemp);
hai_DeleteObject((SH_GDIOBJ)hTemp);
hai_DrawIcon(hDC, (S_SHORT)(pCtrl->x+2), (S_SHORT)(pCtrl->y + ((pCtrl->h-CTRL_CHECKBTN_FLAG_W)>>1)), (SH_ICON)hbitmap);
hai_DeleteObject((SH_GDIOBJ)hbitmap);
}
else if (pCtrl->state == BS_CHECKBTN_NOCHECK)
if (pCtrl->ButtonData.DownPicID)
{
hTemp = hai_LoadBitmap((S_BYTE *)(pCtrl->ButtonData.DownPicID));
hbitmap = hai_CreateFormatBitmap(hDC, hTemp);
hai_DeleteObject((SH_GDIOBJ)hTemp);
hai_DrawIcon(hDC, pCtrl->x, pCtrl->y, (SH_ICON)hbitmap);
hai_DeleteObject((SH_GDIOBJ)hbitmap);
}
else
{
hTemp = hai_LoadBitmap(MAKEINTRESOURCE(IDI_RADIONOR));
hbitmap = hai_CreateFormatBitmap(hDC, hTemp);
hai_DeleteObject((SH_GDIOBJ)hTemp);
hai_DrawIcon(hDC, (S_SHORT)(pCtrl->x+2), (S_SHORT)(pCtrl->y + ((pCtrl->h-CTRL_CHECKBTN_FLAG_W)>>1)), (SH_ICON)hbitmap);
hai_DeleteObject((SH_GDIOBJ)hbitmap);
}
}
if (pCtrl->ButtonData.pText)
hai_CtrlDrawText(hCtrl, hDC);
if (!pCtrl->grayed && pCtrl->focus)
hai_DrawBoxByDashed(hDC, (S_SHORT)(pCtrl->x+2), (S_SHORT)(pCtrl->y+2), (S_SHORT)(pCtrl->w-5), (S_SHORT)(pCtrl->h-5), COLOR_BLACK);
hai_ReleaseDC(hDC);
_hai_ObjectUpdateRect(pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h);
}
break;
case EVT_TIMER:
break;
case EVT_SYSKEY:
break;
case EVT_DESTROY:
break;
case EVT_CHAR:
break;
case EVT_KEYUP:
if (wParam != ' ' && wParam != VK_RETURN)
hai_SendEvent(EVT_KEYUP, wParam, lParam);
break;
case EVT_KEYDN:
if (wParam != ' ' && wParam != VK_RETURN)
{
hai_SendEvent(EVT_KEYDN, wParam, lParam);
break;
}
case EVT_MOUSEDN:
_hai_CheckRadioButton(hCtrl, S_FALSE);
_hai_SetFocusCtrl(hCtrl, S_FALSE);
hai_RadioBtnCtrlProc(hCtrl, EVT_PAINT, 0, 0);
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(pCtrl->state,pCtrl->CtrlID), 0);
break;
case EVT_MOUSEUP:
break;
case EVT_MOUSEDB:
break;
case EVT_MOUSEMV:
break;
case EVT_RESTORE:
break;
case EVT_COMMAND:
break;
default:
break;
}
return 0;
}
S_DWORD hai_SelectBtnCtrlProc(SH_CTRL hCtrl, S_BYTE event, WPARAM wParam, LPARAM lParam)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
S_SHORT x, y;
switch (event)
{
case EVT_CREAT:
break;
case EVT_PAINT:
{
SH_DC hDC;
SH_BITMAP hTemp, hbitmap;
if (!pCtrl->visible)
break;
hDC = hai_GetSceneDC();
hai_SendEvent(EVT_CTRLCOLOR, (WPARAM)(pCtrl->CtrlID), (LPARAM)hDC);
hai_BitBlt(hDC, pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h, S_NULL, 0, 0, PATCOPY);
if (pCtrl->grayed)
{
if (pCtrl->ButtonData.GrayPicID)
{
hTemp = hai_LoadBitmap((S_BYTE *)(pCtrl->ButtonData.GrayPicID));
hbitmap = hai_CreateFormatBitmap(hDC, hTemp);
hai_DeleteObject((SH_GDIOBJ)hTemp);
hai_DrawIcon(hDC, pCtrl->x, pCtrl->y, (SH_ICON)hbitmap);
hai_DeleteObject((SH_GDIOBJ)hbitmap);
}
else
hai_Draw3DBlock(hDC, pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h, BLOCK_3D_UP, DKGRAY_BRUSH);
}
else
{
if (!pCtrl->focus)
{
pCtrl->state = BS_CHECKBTN_NOCHECK;
if (pCtrl->ButtonData.UpPicID)
{
hTemp = hai_LoadBitmap((S_BYTE *)(pCtrl->ButtonData.UpPicID));
hbitmap = hai_CreateFormatBitmap(hDC, hTemp);
hai_DeleteObject((SH_GDIOBJ)hTemp);
hai_DrawIcon(hDC, pCtrl->x, pCtrl->y, (SH_ICON)hbitmap);
hai_DeleteObject((SH_GDIOBJ)hbitmap);
}
else
hai_Draw3DBlock(hDC, pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h, BLOCK_3D_UP, GRAY_BRUSH);
}
else
{
pCtrl->state = BS_CHECKBTN_CHECKED;
if (pCtrl->ButtonData.DownPicID)
{
hTemp = hai_LoadBitmap((S_BYTE *)(pCtrl->ButtonData.DownPicID));
hbitmap = hai_CreateFormatBitmap(hDC, hTemp);
hai_DeleteObject((SH_GDIOBJ)hTemp);
hai_DrawIcon(hDC, pCtrl->x, pCtrl->y, (SH_ICON)hbitmap);
hai_DeleteObject((SH_GDIOBJ)hbitmap);
}
else
hai_Draw3DBlock(hDC, pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h, BLOCK_3D_DN, GRAY_BRUSH);
}
}
if (pCtrl->ButtonData.pText)
hai_CtrlDrawText(hCtrl, hDC);
if (!pCtrl->grayed && pCtrl->state == BS_CHECKBTN_CHECKED && pCtrl->focus)
hai_DrawBoxByDashed(hDC, (S_SHORT)(pCtrl->x+2), (S_SHORT)(pCtrl->y+2), (S_SHORT)(pCtrl->w-5), (S_SHORT)(pCtrl->h-5), COLOR_BLACK);
hai_ReleaseDC(hDC);
_hai_ObjectUpdateRect(pCtrl->x, pCtrl->y, pCtrl->w, pCtrl->h);
}
break;
case EVT_TIMER:
break;
case EVT_CHAR:
break;
case EVT_KEYUP:
if (wParam == VK_RETURN)
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEUP,pCtrl->CtrlID), 0);
else
hai_SendEvent(EVT_KEYUP, wParam, lParam);
break;
case EVT_KEYDN:
if (wParam != VK_RETURN)
hai_SendEvent(EVT_KEYDN, wParam, lParam);
break;
case EVT_SYSKEY:
break;
case EVT_DESTROY:
break;
case EVT_MOUSEDN:
pCtrl->state = BS_CHECKBTN_CHECKED;
_hai_SetFocusCtrl(hCtrl, S_FALSE);
hai_SelectBtnCtrlProc(hCtrl, EVT_PAINT, 0, 0);
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEDN,pCtrl->CtrlID), 0);
break;
case EVT_MOUSEUP:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEUP,pCtrl->CtrlID), 0);
break;
case EVT_MOUSEDB:
break;
case EVT_MOUSEMV:
x = HAI_GETLOWORD(lParam);
y = HAI_GETHIWORD(lParam);
if (x>pCtrl->x && x<pCtrl->x+pCtrl->w && y>pCtrl->y && y<pCtrl->y+pCtrl->h)
{
if (pCtrl->state == BS_CHECKBTN_NOCHECK)
{
pCtrl->state = BS_CHECKBTN_CHECKED;
_hai_SetFocusCtrl(hCtrl, S_FALSE);
hai_SelectBtnCtrlProc(hCtrl, EVT_PAINT, 0, 0);
}
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEMV,pCtrl->CtrlID), 0);
}
else
{
((SP_CTRL)hCtrl)->state = BS_CHECKBTN_NOCHECK;
hai_SelectBtnCtrlProc(hCtrl, EVT_PAINT, 0, 0);
}
break;
case EVT_RESTORE:
break;
case EVT_COMMAND:
break;
default:
break;
}
return 0;
}
S_DWORD hai_ButtonCtrlProc(SH_CTRL hCtrl, S_BYTE event, WPARAM wParam, LPARAM lParam)
{
switch (((SP_CTRL)hCtrl)->style & BS_BTN_TYPE_MASK)
{
case BS_PUSHBTN:
return hai_PushBtnCtrlProc(hCtrl, event, wParam, lParam);
case BS_CHECKBTN:
return hai_CheckBtnCtrlProc(hCtrl, event, wParam, lParam);
case BS_RADIOBTN:
return hai_RadioBtnCtrlProc(hCtrl, event, wParam, lParam);
case BS_SELECTBTN:
return hai_SelectBtnCtrlProc(hCtrl, event, wParam, lParam);
default:
return 0;
}
}
S_BOOL hai_IsButtonChecked(SH_CTRL hCtrl)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
if (!hCtrl || pCtrl->CtrlType != CT_BUTTON)
return S_FALSE;
return (!!pCtrl->state);
}
S_BOOL hai_CheckButton(SH_CTRL hCtrl, S_BOOL checked)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
if (!hCtrl || pCtrl->CtrlType != CT_BUTTON)
return S_FALSE;
if (pCtrl->state == checked)
return S_FALSE;
pCtrl->state = !!checked;
pCtrl->CtrlProc((SH_CTRL)pCtrl, EVT_PAINT, 0, 0);
return S_TRUE;
}
S_BOOL _hai_CheckRadioButton(SH_CTRL hCtrl, S_BOOL bshow)
{
S_UINT BtnType;
SP_CTRL pListHead;
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
if (!hCtrl || pCtrl->CtrlType != CT_BUTTON)
return S_FALSE;
BtnType = pCtrl->style&BS_BTN_TYPE_MASK;
if (BtnType != BS_RADIOBTN && BtnType != BS_SELECTBTN)
return S_FALSE;
pListHead = hai_GetCurSceneCtrlListHead();
if (!pListHead)
return S_FALSE;
while (pListHead)
{
if (pListHead->CtrlType == CT_BUTTON && (pListHead->style&BS_BTN_TYPE_MASK) == BtnType
&& pListHead->group == pCtrl->group && pListHead->state == BS_CHECKBTN_CHECKED)
{
pListHead->state = BS_CHECKBTN_NOCHECK;
pListHead->CtrlProc((SH_CTRL)pListHead, EVT_PAINT, 0, 0);
}
pListHead = pListHead->next;
}
pCtrl->state = BS_CHECKBTN_CHECKED;
if (bshow)
{
pCtrl->CtrlProc((SH_CTRL)pCtrl, EVT_PAINT, 0, 0);
// hai_PostEvent(EVT_PAINT, 0, 0);
}
return S_TRUE;
}
S_BOOL hai_CheckRadioButton(SH_CTRL hCtrl)
{
return _hai_CheckRadioButton(hCtrl, S_TRUE);
}
//event area
//
S_BOOL hai_SetEvtAreaCtrlInfo(SH_CTRL hCtrl, S_DWORD EvtCode)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
if (!pCtrl || pCtrl->CtrlType != CT_EVTAREA)
return S_FALSE;
pCtrl->EvtAreaData.EvtCode = EvtCode;
return S_TRUE;
}
SH_CTRL hai_CreateEvtArea(S_DWORD style, S_BYTE CtrlID, S_SHORT x, S_SHORT y, S_SHORT w, S_SHORT h, S_DWORD EvtCode)
{
S_BOOL ok;
SH_CTRL hCtrl;
hCtrl = hai_CreateCtrl(CT_EVTAREA, CtrlID, style, x, y, w, h);
if (hCtrl)
ok = hai_SetEvtAreaCtrlInfo(hCtrl, EvtCode);
if (hCtrl && !ok)
{
_hai_DestroyCtrl(hCtrl, S_FALSE);
hCtrl = S_NULL;
}
return hCtrl;
}
S_DWORD hai_EvtAreaCtrlProc(SH_CTRL hCtrl, S_BYTE event, WPARAM wParam, LPARAM lParam)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
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), pCtrl->EvtAreaData.EvtCode);
break;
case EVT_MOUSEUP:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEUP,pCtrl->CtrlID), pCtrl->EvtAreaData.EvtCode);
break;
case EVT_MOUSEDB:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEDB,pCtrl->CtrlID), pCtrl->EvtAreaData.EvtCode);
break;
case EVT_MOUSEMV:
hai_SendEvent(EVT_COMMAND, (WPARAM)HAI_COMBWORD(EVT_MOUSEMV,pCtrl->CtrlID), pCtrl->EvtAreaData.EvtCode);
break;
case EVT_RESTORE:
break;
case EVT_COMMAND:
break;
default:
break;
}
return 0;
}
//list area
//
S_BOOL hai_SetListAreaCtrlInfo(SH_CTRL hCtrl, S_SHORT LineH)
{
SP_CTRL pCtrl = (SP_CTRL)hCtrl;
if (!pCtrl || pCtrl->CtrlType != CT_LISTAREA)
return S_FALSE;
pCtrl->ListAreaData.LineH = LineH;
pCtrl->ListAreaData.TotalLine = pCtrl->h / LineH;
return S_TRUE;
}
SH_CTRL hai_CreateListArea(S_DWORD style, S_BYTE CtrlID, S_SHORT x, S_SHORT y, S_SHORT w, S_SHORT h, S_SHORT LineH)
{
S_BOOL ok;
SH_CTRL hCtrl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -