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

📄 winutil.c

📁 傅立叶变换和小波变换是图像压缩的重要工具。该代大戏是利用小波变换进行图像压缩。
💻 C
字号:

#include "winutil.h"
#include <time.h>
#include <string.h>
#include <stdio.h>

void ShowLastError(char *prefix)
{
char string[1024];
int plen;
DWORD err;

	err = GetLastError();

	sprintf(string,"%s : %d = %08X : \0",prefix,err,err);
	plen = strlen(string);

	FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM , NULL, err, 0, string+plen, sizeof(string)-plen, NULL);

	MessageBox(NULL,string,"win32 error", MB_OK|MB_SETFOREGROUND );
}

HBRUSH createBrush(int style,ulong color)
{
	if ( style == HS_SOLID ) {
		return CreateSolidBrush(color);
	} else {
		return CreateHatchBrush(style,color);
	}
}

void frameRect(HDC hdc,RECT *rect,HPEN pen)
{
HGDIOBJ obj;
obj = SelectObject(hdc,pen);
moveTo(hdc,rect->left ,rect->top);
lineTo(hdc,rect->right,rect->top);
lineTo(hdc,rect->right,rect->bottom);
lineTo(hdc,rect->left ,rect->bottom);
lineTo(hdc,rect->left ,rect->top);
SelectObject(hdc,obj);
}

void drawLineClipped(HDC hdc,int fmx,int fmy,int tox,int toy,RECT *r)
{
if (	( tox <= r->left && fmx <= r->left ) ||
		( tox >= r->right && fmx >= r->right ) ||
		( toy <= r->top && fmy <= r->top ) ||
		( toy >= r->bottom && fmy >= r->bottom ) ) return;

fmx = max(fmx,r->left);
tox = max(tox,r->left);
fmx = min(fmx,r->right);
tox = min(tox,r->right);
fmy = max(fmy,r->top);
toy = max(toy,r->top);
fmy = min(fmy,r->bottom);
toy = min(toy,r->bottom);

drawLine(hdc,fmx,fmy,tox,toy);
}

void changeDlgInt(HWND dlg,int control,int val,bool sign)
{
int old;
BOOL ok;
old = GetDlgItemInt(dlg,control,&ok,sign);
if ( !ok || old != val )
	SetDlgItemInt(dlg,control,val,sign);
}

void SetTextBkColor(HDC hdc,ulong fore,ulong back)
{
SetTextColor(hdc,fore);
SetBkColor(hdc,back);
}

void dialogScrollRange(HWND dlg,int control,int range)
{
SCROLLINFO sri;
HWND wnd = GetDlgItem(dlg,control);

sri.cbSize = sizeof(SCROLLINFO);

sri.fMask = SIF_RANGE;
sri.nMin = 0;
sri.nMax = range;
	SetScrollInfo( wnd, SB_CTL, &sri, FALSE);
sri.fMask = SIF_PAGE;
sri.nPage = 1;
	SetScrollInfo( wnd, SB_CTL, &sri, FALSE);
}

void dialogScrollSetPos(HWND dlg,int control,int pos)
{
SCROLLINFO sri;
HWND wnd = GetDlgItem(dlg,control);

sri.cbSize = sizeof(SCROLLINFO);
sri.fMask = SIF_POS;
sri.nPos = pos;
	SetScrollInfo( wnd, SB_CTL, &sri, TRUE);
}

int dialogScrollGetPos(HWND dlg,int control)
{
return	GetScrollPos( GetDlgItem(dlg,control), SB_CTL);
}

void dialogListClear(HWND dlg,int control)
{
SendDlgItemMessage( dlg, control, LB_RESETCONTENT,0, 0 );
}

void dialogListAdd(HWND dlg,int control,char *str)
{
SendDlgItemMessage( dlg, control, LB_ADDSTRING, 0, (DWORD)(LPSTR) str );
}

int dialogListGetSel(HWND dlg,int control)
{
return SendDlgItemMessage( dlg, control, LB_GETCURSEL, 0, 0);
}

void dialogListSetSel(HWND dlg,int control,int sel)
{
SendDlgItemMessage( dlg, control, LB_SETCURSEL, sel, 0);
}


bool intersectRect(RECT *a,RECT *b)
{
RECT t;
return IntersectRect(&t,a,b);
}


void cutTailSpaces(char *str)
{
char *estr;
estr = str + strlen(str);
while(estr >= str)
	{
	switch(*estr)
		{
		case 0:
		case ' ':
		case '\t':
		case '\r':
		case '\n':
			*estr-- = 0;
			break;
		default:
			return;
		}
	}
}

void niceCapitals(char *str)
{

	while(*str) {
		if ( isalpha(*str) ) {
			*str++ = toupper(*str);
			while ( isalpha(*str) ) {
				*str++ = tolower(*str);
			}
		} else {
			str++;
		}
	}

}


/**** tsc waiter ; better than micro-second accuracy *****/

#define TSC_PER_SEC ( ((ulong)200000000) >> 8 )

ulong tsc(void)
{
ulong hi,lo;

/** <> no tsc on 6x86 !! **/

#define tscasm __asm _emit 0x0F __asm _emit 0x31
 
__asm {
	tscasm
	mov hi,edx
	mov lo,eax
	}

lo >>= 8;
lo += (hi&0xFF) << 24;

return(lo);
}

void await(int millisecs)
{
ulong start;
ulong waitfor;

#if 1
	start = (ulong) clock();
	waitfor = (CLOCKS_PER_SEC*millisecs/1000);
	while ( ((ulong)clock() - start) < waitfor );
#else
	start = (ulong) tsc();
	waitfor = (TSC_PER_SEC*millisecs/1000);
	while ( ((ulong)tsc() - start) < waitfor );
#endif

}


HPEN grayPen,ltgrayPen,dkgrayPen;

void winUtilDispose()
{
	DeleteObject(grayPen);
	DeleteObject(ltgrayPen);
	DeleteObject(dkgrayPen);
}

void winUtilInit()
{

/* <> GetSysColor(COLOR_ACTIVEBORDER); */

	  grayPen = CreatePen(PS_SOLID,0,0xA0A0A0);
	ltgrayPen = CreatePen(PS_SOLID,0,0xE0E0E0);
	dkgrayPen = CreatePen(PS_SOLID,0,0x707070);
}

void bevelRectI(HDC hdc,RECT * r)
{
SelectObject( hdc, dkgrayPen );
MoveToEx(hdc,r->right,r->top,NULL);
LineTo(hdc,r->left,r->top);
LineTo(hdc,r->left,r->bottom);
SelectObject( hdc, ltgrayPen );
LineTo(hdc,r->right,r->bottom);
LineTo(hdc,r->right,r->top);
}
void bevelRect(HDC hdc,RECT * r)
{
SelectObject( hdc, ltgrayPen );
MoveToEx(hdc,r->right,r->top,NULL);
LineTo(hdc,r->left,r->top);
LineTo(hdc,r->left,r->bottom);
SelectObject( hdc, dkgrayPen );
LineTo(hdc,r->right,r->bottom);
LineTo(hdc,r->right,r->top);
}


void bevelLineX(HDC hdc,int fmx,int tox,int y)
{
SelectObject( hdc, ltgrayPen );
moveTo(hdc,fmx,y+1);
LineTo(hdc,tox,y+1);
SelectObject( hdc, grayPen );
moveTo(hdc,fmx,y);
LineTo(hdc,tox,y);
SelectObject( hdc, dkgrayPen );
moveTo(hdc,fmx,y-1);
LineTo(hdc,tox,y-1);
}

void fancyBevelRect(HDC hdc,RECT * r)
{
bevelRect(hdc,r);
r->top  +=2; r->bottom -=2;
r->left +=2; r->right  -=2;
bevelRectI(hdc,r);
r->top  -=2; r->bottom +=2;
r->left -=2; r->right  +=2;
}
void fancyBevelRectOut(HDC hdc,RECT * r)
{
r->top  -=2; r->bottom +=2;
r->left -=2; r->right  +=2;
bevelRect(hdc,r);
r->top  +=2; r->bottom -=2;
r->left +=2; r->right  -=2;
bevelRectI(hdc,r);
}

void fancyBevelRectI(HDC hdc,RECT * r)
{
bevelRectI(hdc,r);
r->top  +=2; r->bottom -=2;
r->left +=2; r->right  -=2;
bevelRect(hdc,r);
r->top  -=2; r->bottom +=2;
r->left -=2; r->right  +=2;
}

void fancyBevelRectIOut(HDC hdc,RECT * r)
{
r->top  -=2; r->bottom +=2;
r->left -=2; r->right  +=2;
bevelRectI(hdc,r);
r->top  +=2; r->bottom -=2;
r->left +=2; r->right  -=2;
bevelRect(hdc,r);
}

⌨️ 快捷键说明

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