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));
}
|