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

📄 sendsmswnd.c

📁 俄罗斯方块的整套源代码
💻 C
字号:
#include "SendSmsWnd.h"

#include "russdmd.h"
#include "russdmd_res.h"

static void SendSmsWnd_Update(SendSmsWnd* pthis);
static void SendSmsWnd_Notify(void * pUser,int st);

boolean SendSmsWnd_New(SendSmsWnd *pthis, RussDmdApp* pMe)
{
	pthis->pMe = pMe;

	return TRUE;
}


boolean SendSmsWnd_HandleEvent(SendSmsWnd* pthis, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	switch (eCode) 
	{
	case EVT_APP_SUSPEND:
		ISHELL_CancelTimer(pthis->pMe->a.m_pIShell, (PFNNOTIFY)SendSmsWnd_Update, pthis);
		return TRUE;
		
	case EVT_APP_RESUME:
		SendSmsWnd_Update(pthis);
		return TRUE;

	case EVT_KEY_RELEASE:
		if (pthis->m_eState == eSendSmsState_INPUT)
		{
			if (wParam >= AVK_0 && wParam <= AVK_9)
			{
				int len = STRLEN(pthis->m_pszDst);
				if (len < 11)
				{
					// 电话号码还未满位
					pthis->m_pszDst[len] = (wParam - AVK_0) + 0x30;
					pthis->m_pszDst[len + 1] = 0;
				}
			}
			else if (wParam == AVK_CLR)
			{
				int len = STRLEN(pthis->m_pszDst);
				if (len > 0)
					pthis->m_pszDst[len - 1] = 0;
				else
					RussDmdApp_SetActiveWnd(pthis->pMe, IDW_MAINMENU);
			}
			pthis->pMe->keyFlag = 0;
		}
		return TRUE;
		
	default:
		return FALSE;
	}

}

boolean SendSmsWnd_Open(SendSmsWnd* pthis)
{
	ISHELL_CreateInstance(pthis->pMe->a.m_pIShell, AEECLSID_TAPI,(void**)&pthis->m_pITapi);

	pthis->m_pszText = (AECHAR*)MALLOC(MAX_STRING_SIZE);
	ISHELL_LoadResString(pthis->pMe->a.m_pIShell, RUSSDMD_RES_FILE, IDS_SMS, pthis->m_pszText, MAX_STRING_SIZE);
	pthis->m_pszDst = (char*)MALLOC(20);
	MEMSET(pthis->m_pszDst, 0, 20);

	pthis->m_pimage = ISHELL_LoadResImage(pthis->pMe->a.m_pIShell, RUSSDMD_RES_FILE, IMG_OPTIONBG);

	pthis->m_eState = eSendSmsState_INPUT;
	SendSmsWnd_Update(pthis);
	return TRUE;
}

static void SendSmsWnd_Update(SendSmsWnd* pthis)
{
	AECHAR num[12] = {0};
	ISHELL_SetTimer(pthis->pMe->a.m_pIShell, MAIN_LOOP_TIME, (PFNNOTIFY)SendSmsWnd_Update, pthis);
	//IDISPLAY_FillRect(pthis->pMe->a.m_pIDisplay, NULL, RGB_BLACK);
	IIMAGE_Draw(pthis->m_pimage, 0, 0);

	switch(pthis->m_eState)
	{
	case eSendSmsState_INPUT:
		// 检查是否满足发送条件
		if (pthis->pMe->keyFlag & kKeypad_DPad_Click)
		{
			if (STRLEN(pthis->m_pszDst) == 11)
			{
                AECHAR szTxt[128];
                ISHELL_LoadResString(pthis->pMe->a.m_pIShell, RUSSDMD_RES_FILE, IDS_SMS1, szTxt, sizeof(szTxt));
                
				pthis->m_eState = eSendSmsState_SENDING;
				ITAPI_SendSMS(pthis->m_pITapi, pthis->m_pszDst,(const char*)szTxt, 0, (PFNSMSSTATUS)SendSmsWnd_Notify, pthis);
				return;
			}
		}

		// 显示
		IDISPLAY_DrawText(pthis->pMe->a.m_pIDisplay, AEE_FONT_NORMAL, 
							pthis->m_pszText, 7, 0, 10, NULL, IDF_TEXT_TRANSPARENT | IDF_ALIGN_CENTER);
		if (STRLEN(pthis->m_pszDst) > 0)
		{
			STRTOWSTR(pthis->m_pszDst, num, sizeof(AECHAR) * 12);
			IDISPLAY_DrawText(	pthis->pMe->a.m_pIDisplay, AEE_FONT_NORMAL, num, -1, 0, 0, NULL, 
								IDF_TEXT_TRANSPARENT | IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
		}
		break;

	case eSendSmsState_SENDING:
		IDISPLAY_DrawText(	pthis->pMe->a.m_pIDisplay, AEE_FONT_NORMAL, pthis->m_pszText + 7, 5, 0, 0, NULL, 
							IDF_TEXT_TRANSPARENT | IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
		goto keyevent;
	case eSendSmsState_OK:
		IDISPLAY_DrawText(	pthis->pMe->a.m_pIDisplay, AEE_FONT_NORMAL, pthis->m_pszText + 12, 5, 0, 0, NULL, 
							IDF_TEXT_TRANSPARENT | IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
		goto keyevent;
	case eSendSmsState_FAILED:
		IDISPLAY_DrawText(	pthis->pMe->a.m_pIDisplay, AEE_FONT_NORMAL, pthis->m_pszText + 17, 4, 0, 0, NULL, 
							IDF_TEXT_TRANSPARENT | IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
keyevent:
		if (pthis->pMe->keyFlag & kKeypad_Clr)
		{
			RussDmdApp_SetActiveWnd(pthis->pMe, IDW_MAINMENU);
		}
		break;
	}
	IDISPLAY_Update(pthis->pMe->a.m_pIDisplay);
}

void SendSmsWnd_Close(SendSmsWnd* pthis)
{
	ISHELL_CancelTimer(pthis->pMe->a.m_pIShell, (PFNNOTIFY)SendSmsWnd_Update, pthis);
	if (pthis->m_pITapi) 
	{
		ITAPI_Release(pthis->m_pITapi);
		pthis->m_pITapi = NULL;
	}
	FREEIF(pthis->m_pszDst);
	FREEIF(pthis->m_pszText);
	CleanDeleteImage(pthis->m_pimage);
}

void SendSmsWnd_Free(SendSmsWnd* pthis)
{	
	SendSmsWnd_Close(pthis);
}

static void SendSmsWnd_Notify(void * pUser,int st)
{
	SendSmsWnd* pthis = (SendSmsWnd*)pUser;
	if (st == SUCCESS)
		pthis->m_eState = eSendSmsState_OK;
	else
		pthis->m_eState = eSendSmsState_FAILED;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -