📄 pctestbed.cpp
字号:
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 + -