КО. Расскажу. Только несколько маленьких поправочек:
- в чем именно была трабла, так и неизвестно;
- гуляю не с дома, а с работы;
- и последнее, не рашил, а решила
а теперь, кусок кода, как это все стало выглядеть
LRESULT OnSaveGraph(WORD,WORD,HWND,BOOL&)
{
//окно сохранения файла
OPENFILENAME ofn; // common dialog box structure
char szFile[260]; // buffer for file name
strcpy(szFile," ");
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "Графические файлы(*.emf)\0*.emf\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(::GetSaveFileName(&ofn)!= TRUE)
return 0;
strcpy(szFile,ofn.lpstrFile);
strcat(szFile,".emf");
////////////////////////
HDC hdc = ::GetDC(0),hdc_meta;
int iWidthMM = ::GetDeviceCaps(hdc, HORZSIZE);
int iHeightMM = ::GetDeviceCaps(hdc, VERTSIZE);
int iWidthPels = ::GetDeviceCaps(hdc, HORZRES);
int iHeightPels = ::GetDeviceCaps(hdc, VERTRES);
RECT rect;
::GetClientRect(m_view1.m_hWnd, &rect);
rect.left = (rect.left * iWidthMM * 100)/iWidthPels;
rect.top = (rect.top * iHeightMM * 100)/iHeightPels;
rect.right = (rect.right * iWidthMM * 100)/iWidthPels;
rect.bottom = (rect.bottom * iHeightMM * 100)/iHeightPels;
hdc_meta = CreateEnhMetaFile(hdc, szFile, &rect, 0);
if(!hdc_meta)
::MessageBox(0,"couldn't save file!",0,0);
::ReleaseDC(0,hdc);
CDCHandle cdc(hdc_meta);
m_view1.SaveToEMF(cdc);
::DeleteEnhMetaFile(::CloseEnhMetaFile(hdc_meta));
return 0;
}
Вот так. А в функции m_view1.SaveToEMF(cdc) в эту DC-шку рисуется все, что мне надо. Может это и некрасивое решение, зато все отличненько работает!