我在组件里面创建元文件,在客户程序中根据传递出来的元文件句柄显示该元文件。
在元文件中,我画的是一些公式,有字符(选择不同的字体画),有根号(用直线
画),还有括号(我用贝塞尔曲线画的,用刷子填充出来的),等等一些符号。
现在我想要反显该元文件,在组件程序中我想通过调用SetRop2(R2_Not)来反显,也就
是字符和直线都变成白色,底色变成黑色,但是没有实现该效果。不知道为啥不行呢?请大虾指点呀??
我用来显示元文件的的代码如下:
::EnumEnhMetaFile(dc.m_hDC,hEmf,
EnhMetaFileProc, //回调函数
&nDispMode,
&rct);
int CALLBACK EnhMetaFileProc(HDC hdc,HANDLETABLE FAR* lpHTable,const ENHMETARECORD FAR* lpEMFR, int nObj,LPARAM lpData)
{
::SetBkMode(hdc,TRANSPARENT);
//反显标志
SetROP2(hdc,R2_NOT);
::SetTextColor(hdc,RGB(255,255,255));
::PlayEnhMetaFileRecord(hdc,lpHTable,lpEMFR,nObj);
return 1;
}
我自己分析,我做了一个小的测试程序,也用这段话调用元文件,可以反显该元文件,但是我一调用我的这个程序就是不能反显,
下面是我创建元文件的代码:
HENHMETAFILE CFormulaView::GetMetaFile()
{
static HENHMETAFILE hemf=NULL;
if (hemf!=NULL)
{
::DeleteEnhMetaFile(hemf);
::DeleteObject(hemf);
} CMetaFileDC mDC;
//创建MetaFile设备
if(mDC.CreateEnhanced(NULL,NULL,NULL,_T("TEST"))==FALSE)
{
char ErrChar[100];
sprintf(ErrChar,"无法建立METAFILE,错误号为% d",
::GetLastError());
AfxMessageBox(ErrChar);
return NULL;
}
HDC hDC =::GetDC(NULL);
mDC.SetAttribDC(hDC);
mDC.SetMapMode(MM_TEXT);
for(int i=0;i<m_totalLine;i++)//在设备上画公式
DrawExpression(m_EditLine[i].expRoot,&mDC);
hemf=mDC.CloseEnhanced();
return hemf;
}
我估计是我在创建元文件的时候,是不是有些什么GDI对像是不能使用的,比方说
字体,刷子,画笔等等有什么限制,但是具体我没有找到资料弄明白到底是什么原因?
也就是我的DrawExpression函数中绘制的图形有什么限制么??
在元文件中,我画的是一些公式,有字符(选择不同的字体画),有根号(用直线
画),还有括号(我用贝塞尔曲线画的,用刷子填充出来的),等等一些符号。
现在我想要反显该元文件,在组件程序中我想通过调用SetRop2(R2_Not)来反显,也就
是字符和直线都变成白色,底色变成黑色,但是没有实现该效果。不知道为啥不行呢?请大虾指点呀??
我用来显示元文件的的代码如下:
::EnumEnhMetaFile(dc.m_hDC,hEmf,
EnhMetaFileProc, //回调函数
&nDispMode,
&rct);
int CALLBACK EnhMetaFileProc(HDC hdc,HANDLETABLE FAR* lpHTable,const ENHMETARECORD FAR* lpEMFR, int nObj,LPARAM lpData)
{
::SetBkMode(hdc,TRANSPARENT);
//反显标志
SetROP2(hdc,R2_NOT);
::SetTextColor(hdc,RGB(255,255,255));
::PlayEnhMetaFileRecord(hdc,lpHTable,lpEMFR,nObj);
return 1;
}
我自己分析,我做了一个小的测试程序,也用这段话调用元文件,可以反显该元文件,但是我一调用我的这个程序就是不能反显,
下面是我创建元文件的代码:
HENHMETAFILE CFormulaView::GetMetaFile()
{
static HENHMETAFILE hemf=NULL;
if (hemf!=NULL)
{
::DeleteEnhMetaFile(hemf);
::DeleteObject(hemf);
} CMetaFileDC mDC;
//创建MetaFile设备
if(mDC.CreateEnhanced(NULL,NULL,NULL,_T("TEST"))==FALSE)
{
char ErrChar[100];
sprintf(ErrChar,"无法建立METAFILE,错误号为% d",
::GetLastError());
AfxMessageBox(ErrChar);
return NULL;
}
HDC hDC =::GetDC(NULL);
mDC.SetAttribDC(hDC);
mDC.SetMapMode(MM_TEXT);
for(int i=0;i<m_totalLine;i++)//在设备上画公式
DrawExpression(m_EditLine[i].expRoot,&mDC);
hemf=mDC.CloseEnhanced();
return hemf;
}
我估计是我在创建元文件的时候,是不是有些什么GDI对像是不能使用的,比方说
字体,刷子,画笔等等有什么限制,但是具体我没有找到资料弄明白到底是什么原因?
也就是我的DrawExpression函数中绘制的图形有什么限制么??
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货