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

📄 pctestbed.cpp

📁 JPEG解压软件,包含PC端的测试程序,程序结构比较清晰
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					DialogBox(hInst, (LPCTSTR)IDD_RESAMPLE, hWnd, (DLGPROC)ResampleDlgProc);
					OnFileOpen(hWnd);					
					break;

				case IDM_DECODE_ALL:
					if (hFind) {
						::FindClose(hFind);
						hFind = NULL;
					}
					bPaused = FALSE;
					DialogBox(hInst, (LPCTSTR)IDD_DIALOG_ALL, hWnd, (DLGPROC)AllFileDlgProc);
					//OnFileOpen(hWnd);					
					break;

				default:
				   return DefWindowProc(hWnd, message, wParam, lParam);
			}
			break;
		case WM_DROPFILES:
			{
				HDROP hDrop = (HDROP) wParam; 
				DragQueryFile(hDrop,0,szOpenFile,MAX_PATH);
				DragFinish( hDrop);
				OnFileOpen(hWnd);
			}
			break;
		case WM_PAINT:
			OnPaint(hWnd);			
			break;
		case WM_LBUTTONDOWN:
			nPreXpos = (int)LOWORD(lParam);
			nPreYpos = (int)HIWORD(lParam);
			bMouseDown = TRUE;
			break;
		case WM_LBUTTONUP:
			bMouseDown = FALSE;
			break;
		case WM_NCLBUTTONUP:
			bMouseDown = FALSE;
			break;
		case WM_MOUSEMOVE:
			if (bMouseDown)
				OnReDraw(hWnd, (int)LOWORD(lParam), (int)HIWORD(lParam));
			break;
		case WM_DESTROY:
			if ((HANDLE)(pUserData->hDib))
				::GlobalFree((HANDLE)(pUserData->hDib));
			if (pUserData)
				free(pUserData);
			if (hFind) {
				::FindClose(hFind);
				hFind = NULL;
			}
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

void OnFileOpen(HWND hWnd)
{
	CDraw draw;	
	if (szOpenFile[0]) {			
		nXOffset = 0;
		nYOffset = 0;

		if ((HANDLE)(pUserData->hDib))
			::GlobalFree((HANDLE)(pUserData->hDib));

		HDC hdc = ::GetDC(hWnd);	

		pUserData->hDib = (long)draw.DrawJPEG(szOpenFile, pUserData, &nTotalTime);
	//	if (!(HANDLE)(pUserData->hDib))
	//		::MessageBox(hWnd, "Failed to open JPEG file!", "Error", MB_OK);			
	
		::InvalidateRect(hWnd, NULL, TRUE);
		::UpdateWindow(hWnd);

		::ReleaseDC(hWnd, hdc);
	}
}

void OnSpace()
{
	if (bPaused) {
		bPaused = FALSE;
		OnFileOpen(ghWnd);
		::Sleep(nInterval);	
		GetAllFileInFolder(szFolder);		
	}
}

BOOL OnEscape()
{
	if (::GetAsyncKeyState(VK_ESCAPE)) {
		bPaused = TRUE;		
	}

	return bPaused;
}

void OnPaint(HWND hWnd)
{	
	PAINTSTRUCT ps;
	HDC hdc = BeginPaint(hWnd, &ps);
	RECT rt;
	GetClientRect(hWnd, &rt);

	TCHAR szFile[MAX_PATH+50];
	TCHAR szError[MAX_PATH];
	
	if ( *szOpenFile ) {
		sprintf(szFile, "Current file : \"%s\"", szOpenFile);
		::TextOut(hdc,10,5,szFile,strlen(szFile));
		if ( JpegError != 0 ) {
			switch ( JpegError ) {
			case READ_IMAGE_ERROR:
				sprintf(szError, "don't find this file.");
				break;
			case NO_ENOUGH_MEMORY:
				sprintf(szError, "no enough memory.");
				break;
			case UNKNOW_THIS_FORMAT_ERROR:
				sprintf(szError, "don't know this format.");
				break;
			case DECODE_JPEG_HUFFMAN_ERROR:
				sprintf(szError, "decode huffman error.");
				break;
			case INPUT_IMAGE_SIZE_ERROR:
				sprintf(szError, "can't resample to this size.");
				break;
			case IMAGE_BUFFER_TOO_SMALL:
				sprintf(szError, "image buffer is too small.");
				exit(0);
				break;
			default:
				sprintf(szError, "Don't know this error.");
				exit(0);
				break;
			}
			sprintf(szFile, "Error=%s ", szError );
			::TextOut(hdc,10,25,szFile,strlen(szFile));
		}
	}

	if ( *szOpennNextFile ) {
		sprintf(szFile,"%s\"%s\"","Next    file : ",szOpennNextFile);
		::TextOut(hdc,10,45,szFile,strlen(szFile));
	}

	if (pUserData && (HANDLE)(pUserData->hDib)) {
		LPBITMAPINFOHEADER pBi = (LPBITMAPINFOHEADER)::GlobalLock((HANDLE)(pUserData->hDib));
		LPBYTE pB = (LPBYTE)pBi + sizeof(BITMAPINFOHEADER);
		int nWidth = pBi->biWidth;
		int nHeight = pBi->biHeight;

		::SetDIBitsToDevice(hdc,nXOffset+10,nYOffset+65,nWidth,nHeight,0,0,0,nHeight,
							pB,(LPBITMAPINFO)pBi,DIB_RGB_COLORS);
		
		::GlobalUnlock((HANDLE)(pUserData->hDib));	
		if ( *szOpenFile ) {
			if (nTotalTime < 0 ) {
				nTotalTime	= 0 ;
			}
			sprintf(szFile, "W=%d, H=%d, Resample to W=%d, H=%d;  time=%dms.", RealWidth, RealHeight, nWidth, nHeight, nTotalTime );
			::TextOut(hdc,10,25,szFile,strlen(szFile));
			nTotalTime = -1;
		}

	}


	EndPaint(hWnd, &ps);
}

void OnReDraw(HWND hWnd, int nXpos, int nYpos) 
{
	RECT rt;
	GetClientRect(hWnd, &rt);
	if (nXpos>=rt.right || nYpos>=(rt.bottom-10)) {
		bMouseDown = FALSE;
		return;
	}

	if (pUserData && (HANDLE)(pUserData->hDib)) {
		LPBITMAPINFOHEADER pBi = (LPBITMAPINFOHEADER)::GlobalLock((HANDLE)(pUserData->hDib));
		LPBYTE pB = (LPBYTE)pBi + sizeof(BITMAPINFOHEADER);
		int nWidth = pBi->biWidth;
		int nHeight = pBi->biHeight;				
		::GlobalUnlock((HANDLE)(pUserData->hDib));	
		
		if ((rt.right-rt.left)<nWidth || (rt.bottom-rt.top)<nHeight) {
			if (nXpos<rt.right && nYpos<(rt.bottom-10)) {
				nXOffset += nXpos-nPreXpos;
				nYOffset += nYpos-nPreYpos;
				nPreXpos = nXpos;
				nPreYpos = nYpos;

				::InvalidateRect(hWnd, NULL, TRUE);
			}
		}
	}
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
				return TRUE;

		case WM_COMMAND:
			if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
			{
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			break;
	}
    return FALSE;
}

LRESULT CALLBACK	ResampleDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
				return TRUE;

		case WM_COMMAND:
			if(LOWORD(wParam) == IDOK)
			{
				CHAR szWidth[MAX_PATH]= "";
				CHAR szHeight[MAX_PATH]= "";
				GetDlgItemText(hDlg,IDC_WIDTH,szWidth,MAX_PATH);
				gnResampleWidth = atoi( szWidth );
				if((gnResampleWidth < 0) ||(gnResampleWidth>5000))
					gnResampleWidth = 800;
				GetDlgItemText(hDlg,IDC_HEIGHT,szHeight,MAX_PATH);
				gnResampleHeight = atoi( szHeight );
				if((gnResampleHeight < 0) ||(gnResampleHeight>5000))
					gnResampleHeight = 600;				
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;

			}
			if (LOWORD(wParam) == IDCANCEL) 
			{				
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			break;
	}
    return FALSE;
}

// Mesage handler for about box.
LRESULT CALLBACK AllFileDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
				return TRUE;

		case WM_COMMAND:
			if (LOWORD(wParam) == IDOK) {
				GetDlgItemText(hDlg,IDC_EDIT_ALL_FILE,szFolder,MAX_PATH);
				
				// added by Yong Sun for convenience
				if (strcmp(szFolder, "") == 0) {
					strcpy(szFolder, "F:\\jpeg_Pictures");
				}
				// end

				EndDialog(hDlg, LOWORD(wParam));
				GetAllFileInFolder(szFolder);
				return TRUE;
			}
			if (LOWORD(wParam) == IDCANCEL) {				
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			break;
	}
    return FALSE;
}


BOOL GetAllFileInFolder(LPCSTR strFolder)
{    
	BOOL ret;
	char szFileName[MAX_PATH];

	if (!hFind) {
		sprintf(szFileName,"%s\\%s",strFolder,"*.jp*");		
		if ((hFind = ::FindFirstFile(szFileName, &fd)) == INVALID_HANDLE_VALUE)
			return FALSE;
	}

	do {

		sprintf(szOpenFile,"%s\\%s",strFolder,(LPCTSTR) &fd.cFileName);		
		ret = ::FindNextFile (hFind, &fd);
		if (ret)
			sprintf(szOpennNextFile,"%s\\%s",strFolder,(LPCTSTR) &fd.cFileName);

		if (OnEscape())
			break;

		OnFileOpen(ghWnd);
		::Sleep(nInterval);	

	 } while (ret); 
		
	if (!ret) {
		::FindClose(hFind);
		hFind = NULL;
	}

	return TRUE;
}

⌨️ 快捷键说明

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