³ª.MetaEnum

¿¹Á¦ ´Ù¿î·Îµå

¸ÞŸ ·¹Äڵ带 ¿­°ÅÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æ º¸¾Ò´Âµ¥ ÀÌ ÇÔ¼öµéÀ» ÀÀ¿ëÇÏ¸é ¸ÞŸ ÆÄÀÏÀÇ ±¸Á¶¸¦ »ó¼¼È÷ »ìÆìº¼ ¼ö ÀÖ´Â À¯Æ¿¸®Æ¼ Á¤µµ´Â ½±°Ô ¸¸µé ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¸ÞŸ ÆÄÀÏÀÇ ·¹Äڵ带 ¼ø¼­´ë·Î ¿­°ÅÇϸ鼭 Çϳª¾¿ Ãâ·ÂÇØ º¸ÀδÙ.

HWND hList;
int delay;
int count;
char arMetaRecord[][30]={"","Header", "PolyBezier","Polygon","PolyLine","PolyBezierTo",			// 0
	"PolyLineTo","PolyPolyLine","PolyPolygon","SetWindowExtEx","SetWindowOrgEx",				// 6
	"SetViewPortExtEx","SetViewportOrgEx","SetBrushOrgEx","EOF","SetPixelV",					// 11
	"SetMapperFlags","SetMapMode","SetBkMode","SetPolyFillMode","SetRop2",						// 16
	"SetStretchBltMode","SetTextAlign","SetColorAdjustment","SetTextColor","SetBkColor",		// 21
	"OffsetClipRgn","MoveToEx","SetMetaRgn","ExcldueClipRect","IntersectClipRect",				// 26
	"ScaleViewportExtEx","ScaleWindowExtEx","SaveDC","ResotreDC","SetWorldTransform",			// 31
	"ModifyWorldTransForm","SelectObject","CreatePen","CreateBrushIndirect","DeleteObject",		// 36
	"AngleArc","Ellipse","Rectangle","RoundRect","Arc",											// 41
	"Chord","Pie","SelectPalette","CreatePalette","SetPaletteEntries",							// 46
	"ResizePalette","RealizePalette","ExtFloodFill","LineTo","ArcTo",							// 51
	"PolyDraw","SetArcDirection","SetMiterLimit","BeginPath","EndPath",							// 56
	"CloseFigure","FillPath","StrokeAndFillPath","StrokePath","FlattenPath",					// 61
	"WidenPath","SelectClipPath","AboartPath","EMPTY","GdiComment",								// 66
	"FillRgn","FrameRgn","InvertRgn","PaintRgn","ExtSelectClipRgn",								// 71
	"BitBlt","StretchBlt","MaskBlt","PlgBlt","SetDibitsToDevice",								// 76
	"StretchDIBits","ExtCreateFontIndirectW","ExtTextOutA","ExtTextOutW","PolyBezier16",		// 81
	"Polygon16","PolyLine16","PolyBezierTo16","PolyLineTo16","PolyPolyLine16",					// 86
	"PolyPolygon16","PolyDraw16","CreateMonoBrush","CreateDINPatternBrushPt","ExtCreatePen",	// 91
	"PolyTextOutA","PolyTextOutW","SetICMMode","CreateColorSpace","SetColorSpace",				// 96
	"DeleteColorSpace","GLSRecord","GLSBoundedRecord","PixelFormat","DrawEscape",				// 101
	"ExtEscape","StartDoc","SmallTextOut","ForceUfiMapping","NamedEscape",						// 106
	"ColorCorrectPalette","SetICMProfileA","SetICMProfileW","AlphaBlend","AlphaDibBlend",		// 111
	"TransparentBlt","TransparentDIB","GradientFill","SetLinkedUfis","SetTextjustification"		// 116
};

int CALLBACK EnhMetaFileProc(HDC hDC, HANDLETABLE *lpHTable, CONST ENHMETARECORD *lpEMFR, int nObj, LPARAM lpData)
{
	char str[255], sParm[128];
	POINT pt;
	int idx, i;

	// ¸ÞŸ ·¹ÄÚµå Ãâ·Â
	wsprintf(str,"%d-%s(%d), Àμö=",
		count,arMetaRecord[lpEMFR->iType], lpEMFR->nSize);

	// Àμö¸¦ Á¶»çÇ쵂 ÃÖ´ë 6°³±îÁö¸¸ Á¶»çÇÑ´Ù.
	// nSize°¡ DWORD ´ÜÀ§À̹ǷΠ4·Î ³ª´©¾î ÁÖ¾ú°í iType,nSizeÀÇ ±æÀ̵µ Æ÷ÇԵǹǷΠ2¸¦ »©ÁÖ¾ú´Ù.
	for (i=0;i<int(lpEMFR->nSize)/4-2;i++) {
		if (i == 6)
			break;
		wsprintf(sParm,"%d,",lpEMFR->dParm[i]);
		strcat(str,sParm);
	}
	str[lstrlen(str)-1]=0;

	// ¸®½ºÆ® ¹Ú½º¿¡ ¸ÞŸ ·¹ÄÚµå Ãâ·Â
	idx=SendMessage(hList,LB_ADDSTRING,0,(LPARAM)str);
	SendMessage(hList,LB_SETCURSEL,idx,0);
	UpdateWindow(hList);
	count++;

	// ¸ÞŸ ·¹ÄÚµå Àç»ý
	PlayEnhMetaFileRecord(hDC,lpHTable,lpEMFR,nObj);
	Sleep(delay);

	// Ä¿¼­°¡ 0,0À¸·Î À̵¿Çϸé ÁßÁöÇÑ´Ù.
	GetCursorPos(&pt);
	if (pt.x==0 && pt.y==0) {
		if (MessageBox(hWndMain,"¸ÞŸ ÆÄÀÏ ¿­°Å¸¦ ÁßÁöÇϽðڽÀ´Ï±î?","Áú¹®",MB_YESNO) == IDYES) {
			return 0;
		} else {
			return 1;
		}
	} else {
		return 1;
	}
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	OPENFILENAME ofn;
	TCHAR szFileName[MAX_PATH];
	HENHMETAFILE hEnh;
	RECT rt;

	switch(iMessage) {
	case WM_CREATE:
		hList=CreateWindow("listbox",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | 
			LBS_NOTIFY | WS_VSCROLL,10,50,400,600,hWnd,(HMENU)0,g_hInst,NULL);
		CreateWindow("button","ÆÄÀÏ ¿­±â",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			20,10,100,25,hWnd,(HMENU)1,g_hInst,NULL);
		CreateWindow("static","Áö¿¬½Ã°£",WS_CHILD | WS_VISIBLE,
			140,13,100,25,hWnd,(HMENU)-1,g_hInst,NULL);
		CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER,
			220,10,100,25,hWnd,(HMENU)2,g_hInst,NULL);
		SetDlgItemInt(hWnd,2,1,FALSE);
		return 0;
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case 1:
			hdc=GetDC(hWnd);
			// Ãâ·ÂÇϰíÀÚ ÇÏ´Â ¸ÞŸ ÆÄÀÏÀÇ ÇÚµéÀ» ±¸ÇÑ´Ù.
			szFileName[0]=0;
			memset(&ofn, 0, sizeof(OPENFILENAME));
			ofn.lStructSize=sizeof(OPENFILENAME);
			ofn.hwndOwner=hWnd;
			ofn.lpstrFilter="Meta File\0*.?MF\0";
			ofn.nFilterIndex=1;
			ofn.lpstrFile=szFileName;
			ofn.nMaxFile=MAX_PATH;

			if (GetOpenFileName(&ofn) != 0) {
				// 32ºñÆ® ¸ÞŸ ÆÄÀÏÀÇ ÇÚµéÀ» ±¸ÇØ Àç»ýÇÑ´Ù.
				hEnh=ReadMeta(szFileName);
				if (hEnh==NULL)
					return 0;
				GetClientRect(hWnd, &rt);
				rt.left += 420;
				SendMessage(hList,LB_RESETCONTENT,0,0);
				count=1;
				delay=GetDlgItemInt(hWnd,2,NULL,FALSE);
				InvalidateRect(hWnd,NULL,TRUE);
				UpdateWindow(hWnd);
				//PlayEnhMetaFile(hdc, hEnh, &rt);
				EnumEnhMetaFile(hdc,hEnh,EnhMetaFileProc,NULL,&rt);
				DeleteEnhMetaFile(hEnh);
			}
			ReleaseDC(hWnd, hdc);
			break;
		}
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

 

¾Õ¿¡¼­ ÀÛ¼ºÇÑ ReadMeta ÇÔ¼ö¿Í Æ÷¸Ë º¯°æ ÇÔ¼öµéÀÌ Æ÷ÇԵǾî ÀÖÀ¸¸ç arMetaRecord ¹è¿­¿¡´Â ¸ÞŸ ·¹ÄÚµåÀÇ ¸ñ·ÏÀ» ¹®ÀÚ¿­·Î ÀÛ¼ºÇØ ³õ¾Ò´Ù. WndProc¿¡¼­´Â ¸ÞŸ ¿­°Å¿¡ ÇÊ¿äÇÑ ÄÁÆ®·ÑÀ» »ý¼ºÇÏ°í ÆÄÀÏ ¿­±â ¹öưÀ» ´­·¶À» ¶§ ¸ÞŸ ÆÄÀÏÀ» ¿­¾î ¿­°Å¸¦ ½ÃÀÛÇÑ´Ù. À̶§ ¸ÞŸ ·¹Äڵ带 Ãâ·ÂÇÒ ¿µ¿ªÀº ¸®½ºÆ® ¹Ú½ºÀÇ ¿À¸¥ÂÊ ¿µ¿ªÀ¸·Î ÁöÁ¤ÇÏ¿´´Ù.
Äݹé ÇÔ¼ö¿¡¼­´Â ¸ÞŸ ·¹Äڵ带 ºÐ¼®ÇÏ¿© ¹®ÀÚ¿­ ÇüÅ·Π¹Ù²Û ÈÄ ±× Àμö¿Í ÇÔ²² ¸®½ºÆ® ¹Ú½º·Î Ãâ·ÂÇØ ÁØ´Ù. ´Ü, ÀμöÀÇ ¼ö°¡ ¹«ÇÑÁ¤ ¸¹À» ¼ö ÀÖÀ¸¹Ç·Î Àμö´Â ÃÖ´ë 6°³±îÁö¸¸ Á¶»çÇÑ´Ù. ±×¸®°í PlayEnhMetaRecord ÇÔ¼ö·Î ¹æ±Ý ÀÐÀº ¸ÞŸ ·¹Äڵ带 Ãâ·ÂÇ쵂 Sleep¹®À¸·Î Àû´çÈ÷ ½Ã°£À» ²ø¾î °³º° ·¹Äڵ尡 Ãâ·ÂµÇ´Â ¸ð¾çÀ» õõÈ÷ »ìÆìº¼ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù. ½ÇÇàÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù.



Ưº°È÷ ¾î·Á¿î ±â¼úÀÌ Æ÷ÇÔµÈ ¿¹Á¦´Â ¾Æ´Ï¹Ç·Î ºÐ¼®Çϰųª ÀÀ¿ëÇϱ⿡ Å« ¹«¸®´Â ¾øÀ» °ÍÀÌ´Ù. ¸ÞŸ ·¹ÄÚµå Àç»ýÁß¿¡ ·¹ÄÚµåÀÇ »çº»À» ¸¸µé¾î »ì¦ º¯°æÇÑ ÈÄ Ãâ·ÂÇѴٰųª ƯÁ¤ÇÑ Å¸ÀÔÀÇ ·¹Äڵ常 Á¦¿ÜÇÏ´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù. ±×·¯³ª ÀÌ ¿¹Á¦´Â ±×·± ¿ëµµº¸´Ù´Â ´Ü¼øÈ÷ ¸ÞŸ ÆÄÀÏÀÇ ±¸Á¶¸¦ Á» ´õ ºñÁÖ¾óÇÏ°Ô »ìÆìº¼ ¼ö ÀÖ´Ù´Â µ¥ Àǹ̰¡ ÀÖ´Â °Í °°´Ù. ¸ÞŸ ÆÄÀÏÀÇ ±¸Á¶¸¦ Á» ´õ »ó¼¼ÇÏ°Ô º¸°í ½Í´Ù¸é ÀÏ·¯½ºÆ®·¹ÀÌÅͰ°Àº Àü¹® ±×·¡ÇÈ ÅøÀÇ µµ¿òÀ» ¹ÞÀ» ¼öµµ ÀÖ´Ù.


¸ñ·Ï º¸±â  ´ÙÀ½ °­Á            written by http://www.winapi.co.kr