科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件托管C++中GDI 和GDI混合编程技术

托管C++中GDI 和GDI混合编程技术

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在托管C++中通过平台调用来实现GDI 和GDI的混合编程,不仅可以克服GDI 中的不足,如XOR的光栅操作,更主要的是可以借助MFC DLL来拓展GDI 的图形图像的开发能力。

作者:丁有和 来源:天极网 2007年11月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
4.调用MFC DLL封装的GDI

  通过平台调用可以在托管C++中使用GDI API,但代码有时比较繁琐。事实上,还可以使用MFC DLL[6]来封装GDI API,然后再通过平台调用,则显得比较简洁。例如,创建一个扩展MFC DLL应用程序MFCGDIDLL,在MFCGDIDLL.cpp文件的最后添加下列代码:

extern "C" __declspec(dllexport)
void DrawGDIXorSolidLine( HDC hDC, DWORD color, int nWidth, int x1, int y1, int x2, int y2 )
{
 HPEN pen = ::CreatePen( 0, nWidth, color );
 HPEN oldPen = (HPEN)::SelectObject( hDC, pen );
 int nOldDrawMode = ::SetROP2( hDC, R2_XORPEN );
 ::MoveToEx( hDC, x1, y1, NULL );
 ::LineTo( hDC, x2, y2 );
 ::SelectObject( hDC, oldPen );
 ::SetROP2( hDC, nOldDrawMode );
}

  然后将编译后的mfcgdidll.dll复制到前面实例中的项目文件夹中,并添加下列平台调用的函数代码:

namespace MFCGDI
{
 using namespace System;
 using namespace System::Runtime::InteropServices;
 typedef void* HDC;
 [DllImport("mfcgdidll", EntryPoint="DrawGDIXorSolidLine")]
 extern "C" void DrawGDIXorSolidLine( HDC hdc, unsigned long color,
 int nWidth, int x1, int y1, int x2, int y2);
}

  最后修改前面实例中的鼠标移动事件(MouseMove)处理方法中的代码:

private: System::Void On_MouseMove(System::Object * sender, System::Windows::Forms::MouseEventArgs * e)
{
 ……
 Graphics *g = this->panel1->CreateGraphics();
 // 创建与panel1控件相关联的Graphics
 IntPtr hdc = g->GetHdc();
 MFCGDI::DrawGDIXorSolidLine( (MFCGDI::HDC)hdc,
 0xA0A0A0, 1, pt.X, pt.Y, ptPrev.X, ptPrev.Y );
 ptPrev = Point( e->X, e->Y );
 MFCGDI::DrawGDIXorSolidLine( (MFCGDI::HDC)hdc,
 0xA0A0A0, 1, pt.X, pt.Y, ptPrev.X, ptPrev.Y );
 g->ReleaseHdc( hdc );
}

  5.结语

  Visual C++.NET中,虽然MFC和托管C++均可以使用.NET框架中的GDI+,但托管C++专为Visual C++程序员开发.NET框架应用程序而设计,它除了保留标准C++的全部功能,还可通过.NET Framework(.NET框架)来创建对象,实现自动化内存管理以及与其他.NET语言的互操作性。在托管C++中通过平台调用来实现GDI+和GDI的混合编程,不仅可以克服GDI+中的不足,更主要的是可以借助MFC DLL来拓展GDI+的图形图像的开发能力。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章