Я не говорю по-английски sh очень хорошо. надеюсь, вы понимаете.
Прочтите файл .emf и нарисуйте текст и изображения.
При необходимости нажмите кнопку и нарисуйте больше текста.
Но когда я нажимаю кнопку, изображение исчезает.
В результате тестирования рисунок исчезает из аргумента drawimage из -1943.
void CTest1Dlg::MakeMetaFile()
{
int numMeta = 0 ;
CMetaFileDC *metaDC;
metaDC = new CMetaFileDC[ 2 ];
metaFile = new HENHMETAFILE[ 2 ] ;
m_metaFileDrawArr = new HENHMETAFILE[10] ;
CFont font, fontLog;
font.CreateFont(46*CONSTANT, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, _T("맑은 고딕"));
fontLog.CreateFont(30*CONSTANT, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, _T("맑은 고딕"));
//CONSTANT 2
//PAGE_WIDTH 2100*CONSTANT
//PAGE_HEIGHT 2970*CONSTANT
metaDC[ numMeta ].CreateEnhanced(NULL, NULL, CRect(0, 0, PAGE_WIDTH*10, PAGE_HEIGHT*10), _T(""));
metaDC[ numMeta ].SetMapMode(MM_LOMETRIC);
metaDC[ numMeta ].SelectObject(&font);
metaDC[ numMeta ].SetBkMode(TRANSPARENT);
metaFile[ numMeta ] = ::GetEnhMetaFile( "C:\\a\\REPORT.emf" );
metaDC[ numMeta ].PlayMetaFile(metaFile[ numMeta ], CRect(0, 0, PAGE_WIDTH, -PAGE_HEIGHT));
DeleteEnhMetaFile(metaFile[ numMeta ]);
metaDC[ numMeta ].TextOut(GET_W_POS(VIEWER_W_POS_C1), GET_H_POS(VIEWER_H_POS_C1), "abc");
// draw image
CRect rectTRG;
LPWSTR lpszW = new WCHAR[255];
CString s1,s2,s3;
s1 = "C:\\a\\1.jpeg";
s2 = "C:\\a\\2.jpeg";
s3 = "C:\\a\\3.jpeg";
LPTSTR lpStr = s1.GetBuffer( s1.GetLength() );
int nLen = MultiByteToWideChar(CP_ACP, 0,lpStr, -1, NULL, NULL);
MultiByteToWideChar(CP_ACP, 0,lpStr, -1, lpszW, nLen);
Graphics *graphics;
graphics = Graphics::FromHDC(metaDC[ numMeta ].m_hDC);
Image image(lpszW);
//CONSTANT 2
//PAGE_WIDTH 2100*CONSTANT
//PAGE_HEIGHT 2970*CONSTANT
//PICTURE_HEIGHT (768 * 0.65 * CONSTANT)
//PICTURE_WIDTH (1024 * 0.65 * CONSTANT)
rectTRG.left = (LONG)(PAGE_WIDTH/2-PICTURE_WIDTH);
rectTRG.right = (LONG)(PAGE_WIDTH/2+PICTURE_WIDTH);
rectTRG.top = (LONG)(-(PAGE_HEIGHT/2.5));
rectTRG.bottom = (LONG)(-((PAGE_HEIGHT/1.5)+(PICTURE_HEIGHT*2)));
UINT width = image.GetWidth();
UINT height = image.GetHeight();
// graphics->DrawImage(&image, GDI_RECTF(rectTRG), 0, 0, width, height, UnitPixel);
0 до -1942 в порядке. -1943 ниже изображение исчезает.
graphics->DrawImage(&image, Rect(600,-1943,2869,-4000), 0, 0, width, height, UnitPixel);
// 2nd image
lpStr = s2.GetBuffer( s2.GetLength() );
nLen = MultiByteToWideChar(CP_ACP, 0,lpStr, -1, NULL, NULL);
MultiByteToWideChar(CP_ACP, 0,lpStr, -1, lpszW, nLen);
Image image2(lpszW);
rectTRG.left = (LONG)(PAGE_WIDTH/2-PICTURE_WIDTH);
rectTRG.right = (LONG)(PAGE_WIDTH/2+PICTURE_WIDTH);
rectTRG.top = (LONG)(-(PAGE_HEIGHT/3.1));
rectTRG.bottom = (LONG)(-((PAGE_HEIGHT/1.75)+(PICTURE_HEIGHT*2)));
graphics->DrawImage(&image2, GDI_RECTF(rectTRG), 0, 0, width, height, UnitPixel);
graphics->DrawImage(&image2, Rect(600,-1943,2869,-2000), 0, 0, width, height, UnitPixel);
m_metaFileDrawArr[ numMeta ] = metaDC[ numMeta ].CloseEnhanced();
нажата кнопка
//road metafile
metaDC[ numMeta ].CreateEnhanced(NULL, NULL, CRect(0, 0, PAGE_WIDTH*10, PAGE_HEIGHT*10), _T(""));
metaDC[ numMeta ].SetMapMode(MM_LOMETRIC);
metaDC[ numMeta ].SelectObject(&font);
metaDC[ numMeta ].SetBkMode(TRANSPARENT);
metaDC[ numMeta ].PlayMetaFile(m_metaFileDrawArr[ numMeta ], CRect(0, 0, PAGE_WIDTH, -PAGE_HEIGHT));
metaDC[ numMeta ].TextOut(GET_W_POS(VIEWER_W_POS_C5), GET_H_POS(VIEWER_H_POS_C2), "def");
m_metaFileDrawArr[ numMeta ] = metaDC[ numMeta ].CloseEnhanced();
// draw to picture control.
CRect rect ;
CDC *dc = GetDlgItem(IDC_STATIC) -> GetDC();
GetDlgItem(IDC_STATIC) -> GetClientRect(&rect) ;
dc -> PlayMetaFile(m_metaFileDrawArr[ numMeta ], &rect) ;
delete lpszW;
delete graphics;
}