⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 haictrl.c

📁 HGui4.1.rar
💻 C
📖 第 1 页 / 共 5 页
字号:
		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 + -