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

📄 disp.c

📁 JPEG基本系统的解码器
💻 C
字号:
#include <windows.h>          

////////////////////////////////////////////////////////////////

#define SCROLL_RATIO    50

//---------------------------------------------------------------------

void FitNewSize (HWND hWnd);

void SizeProc (HWND hWnd);

void ScrollProc (HWND hWnd, int message, WORD wPos, WORD wScrollType);

void DisProc(HWND hWnd,HGLOBAL hbi);

//---------------------------------------------------------------------

extern int imgheight,imgwidth;

extern BOOL HSCROLL,VSCROLL;

//---------------------------------------------------------------------

void FitNewSize (HWND hWnd)

{

	RECT DeskRect,rect;

	int  NewX,NewY,NewWidth,NewHeight;

	int  HBorder,VBorder;

	POINT pt;

	int  cxWindow,cyWindow,cxRange,cyRange;



	GetWindowRect(GetDesktopWindow(), &DeskRect);

	

	HBorder=GetSystemMetrics (SM_CXBORDER)/2;

	VBorder=GetSystemMetrics (SM_CYBORDER)/2+GetSystemMetrics (SM_CYMENU)+GetSystemMetrics (SM_CYCAPTION);

	

	if((imgwidth+HBorder)<(DeskRect.right-DeskRect.left))

		{

		NewWidth=imgwidth+HBorder;

		NewX=( (DeskRect.right-DeskRect.left) - (imgwidth+HBorder) ) /2;

		HSCROLL=FALSE;

		}

	else

		{

		NewX=(DeskRect.right-DeskRect.left)/10;

		NewWidth=NewX*8;

		HSCROLL=TRUE;

		}

		

	if((imgheight+VBorder)<(DeskRect.bottom-DeskRect.top))

		{

		NewHeight=imgheight+VBorder;

		NewY=( (DeskRect.bottom-DeskRect.top) - (imgheight+VBorder) ) /2;

		VSCROLL=FALSE;

		}

	else

		{

		NewY=(DeskRect.bottom-DeskRect.top)/10;

		NewHeight=NewY*8;

		VSCROLL=TRUE;

		}

	

	if(HSCROLL)

		{

		NewHeight+= GetSystemMetrics (SM_CYHSCROLL);

		NewY-=GetSystemMetrics (SM_CYHSCROLL)/2;

		}



	if(VSCROLL)

		{

		NewWidth+= GetSystemMetrics (SM_CXVSCROLL);

		NewX-=GetSystemMetrics (SM_CXVSCROLL)/2;

		}

	

	SendMessage(GetDesktopWindow(),WM_PAINT,0,0);

	

	GetWindowRect(hWnd,(LPRECT)&DeskRect);

	pt.x=DeskRect.left-1;

	pt.y=DeskRect.top-1;

	MoveWindow(hWnd,NewX,NewY,NewWidth,NewHeight,TRUE);

	SendMessage(WindowFromPoint(pt),WM_PAINT,0,0);



	GetClientRect(hWnd,(LPRECT)&rect);

	   	

   	cxWindow = rect.right - rect.left;

   	cyWindow = rect.bottom - rect.top;



  	cxRange =  imgwidth - cxWindow - 1;

  	cyRange =  imgheight - cyWindow - 1;

  	

	if(HSCROLL)

		{

		SetScrollRange (hWnd, SB_HORZ, 0, cxRange, FALSE);

		SetScrollPos(hWnd,SB_HORZ,0,TRUE);

		}

	else

		SetScrollRange (hWnd, SB_HORZ, 0, 0, FALSE);



	if(VSCROLL)

		{

		SetScrollRange (hWnd, SB_VERT, 0, cyRange, FALSE);

		SetScrollPos(hWnd,SB_VERT,0,TRUE);

		}

	else

		SetScrollRange (hWnd, SB_VERT, 0, 0, FALSE);

}

////////////////////////////////////////////////////////////////////////

/*

void SizeProc(HWND hWnd)

{

	RECT ClientRect;

	BOOL scrolled=FALSE;

	

	GetClientRect (hWnd, (LPRECT)&ClientRect);

	

	if(imgwidth<=(ClientRect.right-ClientRect.left))

		SetScrollRange (hWnd, SB_HORZ, 0, 0, TRUE);		

	else

		{

		SetScrollRange (hWnd, SB_HORZ, 0, 100, TRUE);

		scrolled=TRUE;

		}

		

	if(imgheight<=(ClientRect.bottom-ClientRect.top))

		SetScrollRange (hWnd, SB_VERT, 0, 0, TRUE);			

	else

		{

		SetScrollRange (hWnd, SB_VERT, 0, 100, TRUE);

		scrolled=TRUE;

		}

	if(scrolled)

		{

		InvalidateRect(hWnd,NULL,FALSE);

		UpdateWindow(hWnd);

		}

}

*/

///////////////////////////////////////////////////////////////////////////

void ScrollProc (HWND hWnd, int message, WORD wPos, WORD wScrollType)

{

	int  xBar;

   	int  nMin;

   	int  nMax;

   	int  dx;

   	int  nOneUnit;

   	int  cxClient;

   	int  nHorzOrVert;

   	RECT rect;

    

   	GetClientRect (hWnd, &rect);



   	if (message == WM_HSCROLL)

    	{

      	nHorzOrVert = SB_HORZ;

      	cxClient    = rect.right - rect.left;

      	}

   	else

    	{

      	nHorzOrVert = SB_VERT;

      	cxClient    = rect.bottom - rect.top;

      	}



   	nOneUnit = cxClient / SCROLL_RATIO;

   	if (!nOneUnit)

    	nOneUnit = 1;



   	xBar = GetScrollPos (hWnd, nHorzOrVert);

   	GetScrollRange (hWnd, nHorzOrVert, &nMin, &nMax);   	



   	switch (wScrollType)

    	{

      	case SB_LINEDOWN:             // One line right.

        	dx = nOneUnit;

         	break;



      	case SB_LINEUP:               // One line left.

         	dx = -nOneUnit;

         	break;



      	case SB_PAGEDOWN:             // One page right.

        	dx = cxClient/4;

         	break;



      	case SB_PAGEUP:               // One page left.

        	dx = -cxClient/4;

         	break;



      	case SB_THUMBPOSITION:        // Absolute position.     

         	dx = wPos - xBar;

         	break;



      	default:                      // No change.

        	dx = 0;

         	break;

      	}



	if (dx)

    	{

      	xBar += dx;



      	if (xBar < nMin)

        	{

         	dx  -= xBar-nMin;

         	xBar = nMin;

         	}



      	if (xBar > nMax)

        	{

         	dx  -= xBar - nMax;

         	xBar = nMax;

         	}



      	if (dx)

        	{

         	SetScrollPos (hWnd, nHorzOrVert, xBar, TRUE);



         	if (nHorzOrVert == SB_HORZ)

            	ScrollWindow (hWnd, -dx, 0, NULL, NULL);

         	else

            	ScrollWindow (hWnd, 0, -dx , NULL, NULL);

            

         	UpdateWindow (hWnd);

         	}

      	}

}

//---------------------------------------------------------------------

void DisProc(HWND hWnd,HGLOBAL hbi)

{

	HDC         hDC;

   	PAINTSTRUCT ps;

   	int         xScroll, yScroll;

   	int         dx,dy;

   	RECT        rectClient, rc;

    LPSTR       lpDIBHdr, lpDIBBits;   	



   	if (!hbi)

    	return;



  	hDC      = BeginPaint (hWnd, &ps);

   

   	xScroll  = GetScrollPos  (hWnd, SB_HORZ);

   	yScroll  = GetScrollPos  (hWnd, SB_VERT);



   	GetClientRect (hWnd, &rectClient);



   	rc.left   = xScroll;

   	rc.top    = yScroll;

   	rc.right  = xScroll + rectClient.right - rectClient.left;

   	rc.bottom = yScroll + rectClient.bottom - rectClient.top;

   	

    if (rc.right > imgwidth)

      	{

	    dx = imgwidth - rc.right;

       	rc.right += dx;

       	rectClient.right+=dx;

       	}



   	if (rc.bottom > imgheight)

      	{

       	dy = imgheight - rc.bottom;

      	rc.bottom += dy;

       	rectClient.bottom+=dy;

      	}



	lpDIBHdr  = GlobalLock (hbi);

    lpDIBBits = lpDIBHdr+sizeof(BITMAPINFOHEADER);

	

	SetStretchBltMode (hDC, COLORONCOLOR);

 

    SetDIBitsToDevice (hDC,

    				   rectClient.left,

    				   rectClient.top,

    				   rectClient.right-rectClient.left,

    				   rectClient.bottom-rectClient.top,

    				   rc.left,

    				   imgheight-rc.bottom,

    				   0,

    				   imgheight,

                       (char far *)lpDIBBits,

                       (LPBITMAPINFO) lpDIBHdr,

                       DIB_RGB_COLORS);

	GlobalUnlock (hbi);

   	EndPaint (hWnd, &ps);

/*

	HDC         hDC;

   	PAINTSTRUCT ps;

   	int         xScroll, yScroll;

   	RECT        rectClient, rc;

    LPSTR       lpDIBHdr, lpDIBBits;

    int         rectw,recth;



   	if (!hbi)

    	return;

    	

	xScroll=yScroll=0;

	GetClientRect (hWnd, &rectClient);

	rectw=rectClient.right-rectClient.left;

	recth=rectClient.bottom-rectClient.top;



  	hDC      = BeginPaint (hWnd, &ps);

   

   	if(HSCROLL)

   		{

   		xScroll  = GetScrollPos  (hWnd, SB_HORZ);

   		}

   		

   	if(VSCROLL)

   		{

   		yScroll  = GetScrollPos  (hWnd, SB_VERT);

   		}



   	rc.right  =  rc.left+rectw;

   	rc.bottom =  rc.top+recth;



	lpDIBHdr  = GlobalLock (hbi);

    lpDIBBits = lpDIBHdr+sizeof(BITMAPINFOHEADER);

	

	SetStretchBltMode (hDC, COLORONCOLOR);

 

    SetDIBitsToDevice (hDC,

    				   rectClient.left,

    				   rectClient.top,

    				   rectClient.right-rectClient.left,

    				   rectClient.bottom-rectClient.top,

    				   rc.left,

    				   imgheight-rc.bottom,

    				   0,

    				   imgheight,

                       (char far *)lpDIBBits,

                       (LPBITMAPINFO) lpDIBHdr,

                       DIB_RGB_COLORS);

	GlobalUnlock (hbi);

   	EndPaint (hWnd, &ps);

*/   	

}

⌨️ 快捷键说明

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