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

📄 trayapp.cpp

📁 使ppc屏幕变成黑白的程序
💻 CPP
字号:
// TrayApp.cpp : Defines the entry point for the application.
//
/*****************************************************************************

  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  PARTICULAR PURPOSE.
  
    This is "Sample Code" and is distributable subject to the terms of the end user license agreement.
    
****************************************************************************/
#include "stdafx.h"
#define TRAY_NOTIFYICON WM_USER + 2001
#define WMO_PALMTRAYAPP WM_USER + 2002
#define ID_TRAY	5000
#include "pge/pgeutil.h"
// === Function Prototypes ====================================================
#define RGBto16bit565(r, g, b) \
	(((WORD)r<<8)&0xf800)|(((WORD)g<<3)&0x07e0)|((WORD)b>>3); \

int giTimer = 20;
HANDLE ghThrd;
BOOL bStart = TRUE;
CPGESurface* pMian;
CPGESurface** pSprite;
CPGEDevice* pDevice;
int m_iPicCount = 0;

void CreateSurfaceFormIndex(CPGESurface* pSuf, FILE* fp, FILE_OF_SIZE* pszFile, int index, DWORD dwBaseOffset)
{
	int inil = 0;

	DWORD dwFileSeek = dwBaseOffset + pszFile[index].dwStart;

	PGEPicBaseHead PicHead;
	fseek(fp, dwFileSeek, SEEK_SET);
	fread(&PicHead, sizeof(PGEPicBaseHead), 1, fp);

	DWORD dwpgpX = PicHead.wWidth;
	DWORD dwpgpY = PicHead.wHeight;
	BOOL bAlpha = PicHead.bBitCount & 0x80;
	BYTE btCount = PicHead.bBitCount & 0x7f;
	BOOL bCompress = PicHead.bCompess;

	pSuf->CreateSurface(dwpgpY, dwpgpX, PGE_PGP_SURFACE);
	if (PicHead.wPalPiexlCount)
	{
		WORD* pwPal = new WORD[PicHead.wPalPiexlCount];
		fseek(fp, dwFileSeek + PicHead.dwPalOffset, SEEK_SET);
		fread(pwPal, PicHead.dwPalSize, 1, fp);
		pSuf->SetPal(pwPal, PicHead.wPalPiexlCount);
	}

	DWORD dwSize = dwpgpX * dwpgpY;

	BYTE* pbtMapReadBuf = new BYTE[PicHead.dwDeComSize];
	BYTE*  pbtPic = new BYTE[PicHead.dwDeComSize];
	fseek(fp, dwFileSeek + PicHead.dwDataOffset, SEEK_SET);
	fread(pbtMapReadBuf, PicHead.dwDataSize, 1, fp);
	decompress(pbtMapReadBuf, PicHead.dwDataSize, pbtPic);


	BYTE* pbtAlpha = NULL;
	if(bAlpha) 
	{
		pbtAlpha = new BYTE[PicHead.dwAlphaDeComSize];
		fseek(fp, dwFileSeek + PicHead.dwAlphaOffset, SEEK_SET);
		fread(pbtMapReadBuf, PicHead.dwAlphaSize, 1, fp);
		decompress(pbtMapReadBuf, PicHead.dwAlphaSize, pbtAlpha);
		// pSuf->EnableAlphaChanle(); 如需动态alpha则必调用
	}

	pSuf->SetPgpSurface((WORD*)pbtPic, pbtAlpha);
	pSuf->m_btUserData = inil;
	SAFE_DELETE_ARY(pbtMapReadBuf);
}
int m_iDrawSurfaceIndex = 0;
void doChange()
{
//	pMian->Blt(pSprite, NULL, NULL);
//	pDevice->Flip();
	WORD* pwScreen = (WORD*)GXBeginDraw();
	RECT m_rDis;
	FILLRECT(m_rDis, 120-pSprite[m_iDrawSurfaceIndex]->GetSurfaceInfo()->wWiedth/2, 
			160-pSprite[m_iDrawSurfaceIndex]->GetSurfaceInfo()->wHeigh/2, 
			120-pSprite[m_iDrawSurfaceIndex]->GetSurfaceInfo()->wWiedth/2 + pSprite[m_iDrawSurfaceIndex]->GetSurfaceInfo()->wWiedth,
			160-pSprite[m_iDrawSurfaceIndex]->GetSurfaceInfo()->wHeigh/2 + pSprite[m_iDrawSurfaceIndex]->GetSurfaceInfo()->wHeigh);

	if (
	pwScreen[m_rDis.bottom*240+m_rDis.right] != 12345
	&&
	pwScreen[m_rDis.top*240+m_rDis.left] != 12345
	)
	{
		
	}

	RECT rScreen = {0,0,240,320};
	RECT r = RectAndRect(m_rDis, rScreen);

	r.bottom = r.bottom-r.top;
	r.right = r.right - r.left;
	r.left = r.top = 0;

	if (m_rDis.top < 0)
	{
		r.top = -m_rDis.top;
		r.bottom = r.top+r.bottom;
	}

	if (m_rDis.left < 0)
	{
		r.left = -m_rDis.left;
		r.right = r.left + r.right;
	}

	m_rDis.left = m_rDis.left > 0 ? m_rDis.left : 0;
	m_rDis.top = m_rDis.top > 0 ? m_rDis.top : 0;
	RECT m_rSrc = r;

//	pMian->Clean();
	pMian->SetPgpSurface(pwScreen, NULL);
//	pMian->Blt(pSprite, NULL, &r, PGE_BLT_ALPHA);
	pMian->Blt(pSprite[m_iDrawSurfaceIndex], &m_rSrc, &m_rDis, PGE_BLT_ALPHA);
	m_iDrawSurfaceIndex++;
	if (m_iDrawSurfaceIndex == m_iPicCount) m_iDrawSurfaceIndex = 0;
//	if (pwScreen != NULL)
//	{
//		int ix=0,iy=0;
//		BYTE bPV;
//		WORD wBuf;
//		BYTE* bBut;
//		pMian->Lock((void**)&bBut);
//		for (iy=0;iy<320;iy++)
//		{
//			for(ix=0;ix<240;ix++)
//			{
////				wBuf = pwScreen[iy*240+ix];
////				bPV = (((wBuf & 0xf800) >> 8) + ((wBuf & 0x7e0) >> 3)
////					+ ((wBuf & 0x1f) << 3)) / 3;
////				pwScreen[iy*240+ix] = RGBto16bit565(bPV, bPV, bPV);
//				
//				if (bBut[iy*240+ix] != 0)
//					pwScreen[iy*240+ix] = bBut[iy*240+ix] ;
//			}
//
//		}
//		pMian->unLock();
//	}
	GXEndDraw();
}

DWORD WINAPI RefScreen(LPVOID lpparm)	
{
	while(bStart)
	{
		Sleep(giTimer);
		doChange();
	}
	return 0;
}

BOOL WINAPI MainDlgProc(
    HWND, 
    UINT, 
    WPARAM, 
    LPARAM
    );

// === Global Variables =======================================================

HINSTANCE g_hInst;

BOOL g_bWinHide = FALSE;
BOOL g_bPalmTrayAppActive = FALSE;

// Tray Icons and Notification ------------------------------

BOOL TrayMessage(
    HWND hwnd, 
    DWORD dwMessage,
    UINT uID, 
    HICON hIcon, 
    PTSTR pszTip
    )
{
  BOOL res = FALSE;
  NOTIFYICONDATA tnd;
  
  tnd.cbSize = sizeof(NOTIFYICONDATA);
  tnd.hWnd = hwnd;
  tnd.uID = uID;
  tnd.uFlags = NIF_MESSAGE|NIF_ICON;
  tnd.uCallbackMessage = TRAY_NOTIFYICON;
  tnd.hIcon = hIcon;
  tnd.szTip[0] = '\0';
  
  res = Shell_NotifyIcon(dwMessage, &tnd);
  return res;
}

void TrayIconDelete(
    HWND hwnd, 
    UINT uID, 
    HICON hIcon, 
    PTSTR pszTip
    )
{
    TrayMessage(hwnd, NIM_DELETE, uID, hIcon, NULL);
}

void TrayIconModify(
    HWND hwnd, 
    UINT uID,
    HICON hIcon, 
    PTSTR pszTip
    ) 
{
    //animate icons
    TrayMessage(hwnd, NIM_MODIFY, uID, hIcon, NULL);
}

void TrayIconAdd(
    HWND hwnd, 
    UINT uID, 
    HICON hIcon, 
    PTSTR pszTip
    )
{
    TrayMessage(hwnd, NIM_ADD, uID,  hIcon, NULL);
}


// === Application Entry Point ================================================

int APIENTRY WinMain(
    HINSTANCE hInstance, 
    HINSTANCE hPrev, 
    LPTSTR lpCmdLine, 
    int nShowCmd
    )
{
    int retcode;
	GXOpenDisplay(0, GX_FULLSCREEN);
    g_hInst = hInstance;   //  Save instance handle in global
    InitCommonControls();
	DWORD dwThid = 0;
//	
//	pDevice = new CPGEDevice(NULL, PGE_SCREEN_DIRECTION(PGE_SCREEN_V));
//
//	if (pDevice->OpenDisplay() == PGE_FAIL)
//		return PGE_FAIL;
//
//	PGEDisplayProperties* p_displayprop = pDevice->GetDisplayProperties();
//	if (p_displayprop->cBPP != 16)
//	{
//		pDevice->CloseDisplay();
//		return PGE_FAIL;
//	}
//	CPGESurface* pMain = NULL;
//	pDevice->SetMainSurface(&pMian);
	pMian = new CPGESurface(NULL);
	pMian->CreateSurface(320, 240, PGE_PGP_SURFACE);

//	CreateSurfaceFromFile(&pSprite, "0.pgp", NULL);
	{
		FILE* fp = PGEFileOpen("羞女.img", "rb");
		if (fp == NULL) 
		{
			return PGE_FAIL;
		}

		PGE_PAK_IMAGE_HEAD tHead;
		fread(&tHead, sizeof(PGE_PAK_IMAGE_HEAD), 1, fp);

		FILE_OF_SIZE* pszFile = new FILE_OF_SIZE[tHead.dwImageCount];

		fread(pszFile, tHead.dwImageCount*sizeof(FILE_OF_SIZE), 1, fp);

		DWORD dwImgFileBase = tHead.dwImageCount*sizeof(FILE_OF_SIZE) + sizeof(PGE_PAK_IMAGE_HEAD);

		pSprite = (CPGESurface**) new char[tHead.dwImageCount*sizeof(void*)];
		
		for(int i=0; i<tHead.dwImageCount; i++)
		{
			pSprite[i] = new CPGESurface(NULL);
			CreateSurfaceFormIndex(pSprite[i], fp, pszFile, i, dwImgFileBase);
		}
		m_iPicCount = tHead.dwImageCount;
		fclose(fp);
		fp = 0;
		SAFE_DELETE_ARY(pszFile);
	}
	
	ghThrd = CreateThread(NULL,0,RefScreen,NULL,0,&dwThid);
    retcode = DialogBox( g_hInst, MAKEINTRESOURCE(IDD_PALMTRAYAPP), NULL, (DLGPROC)MainDlgProc );
	GXCloseDisplay();
	
    return(retcode);
}

// === Main Window (dialog) Proc ==============================================
BOOL WINAPI MainDlgProc(
    HWND hDlg, 
    UINT Msg, 
    WPARAM wParam, 
    LPARAM lParam
    )
{
	BOOL bStart = TRUE;

    switch (Msg)
    {
	case WM_LBUTTONDOWN:
		{
			int xp = 0;
		}
		break;
    case WM_CLOSE:
        //Clean up on Close and remove tray icons
        TrayIconDelete(hDlg, ID_TRAY, LoadIcon( g_hInst, MAKEINTRESOURCE(APP_ICON) ), NULL);
        EndDialog(hDlg, TRUE);
        return(TRUE);

    case WM_INITDIALOG:
		{
			//On Pocket PC devices you normally create all Dialog's as fullscreen dialog's
			// with an OK button in the upper corner. 
			SHINITDLGINFO shidi;
			// Create a Done button and size it.
			shidi.dwMask = SHIDIM_FLAGS;
			shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
			shidi.hDlg = hDlg;
			//initialzes the dialog based on the dwFlags parameter
			SHInitDialog(&shidi);

			//Set Tray Icon
			TrayIconAdd(hDlg, ID_TRAY, LoadIcon(g_hInst, MAKEINTRESOURCE(APP_ICON)), NULL);
			SetForegroundWindow(hDlg);	// make us come to the front
			wchar_t caBuf[10];
			swprintf(caBuf, L"%d", giTimer);
			
			SetDlgItemText(hDlg, IDC_EDIT1, caBuf);
			return(TRUE);
		}
    case WM_COMMAND:
        switch (GET_WM_COMMAND_ID(wParam,lParam))
        {

        case IDCANCEL:
            g_bPalmTrayAppActive = FALSE;
            TrayIconDelete(hDlg, ID_TRAY, LoadIcon( g_hInst, MAKEINTRESOURCE(APP_ICON) ), NULL);
            EndDialog( hDlg, TRUE );
            return(TRUE);
            break;

        case IDOK:
            //Hide window 
            if (FALSE == g_bWinHide)
            {
                ShowWindow(hDlg, SW_HIDE);
                g_bWinHide = TRUE;
            }
            //Active state
            PostMessage(hDlg, WM_COMMAND, (WPARAM)WMO_PALMTRAYAPP, 0); 
            return(TRUE);               
            break;

		case IDC_BTNOK:
			{
				wchar_t caBuf[10];
				GetDlgItemText(hDlg, IDC_EDIT1, caBuf, 8);	
				int iBuf = 0;
				int iLen = wcslen(caBuf);
				for (int i=0;i<iLen;i++)
				{
					char buf = caBuf[i];
					int ic=1;
					for (int j=0;j<(iLen-i-1);j++)
					{
						ic *= 10;
					}
					iBuf = iBuf + (buf-48)*ic;
				}

				giTimer = iBuf;

				if (FALSE == g_bWinHide)
				{
					ShowWindow(hDlg, SW_HIDE);
					g_bWinHide = TRUE;
				}
				break;
			}
			
			
        }

	case WM_PAINT:
//		doChange();
		break;
    case TRAY_NOTIFYICON:
        switch (lParam)
        {
        case WM_LBUTTONDOWN:
            if (ID_TRAY == wParam)
            {
                g_bPalmTrayAppActive = FALSE;
                if (TRUE == g_bWinHide)
                {
                    ShowWindow(hDlg, SW_SHOW);
                    SetForegroundWindow(hDlg);	// make us come to the front
                    g_bWinHide = FALSE;
                } 
                else 
                {
                    g_bWinHide = TRUE;
                }
            }
            break;
        }

        break;
  
    }
    return( FALSE );
}

⌨️ 快捷键说明

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