none
如何使用c#创建一个CClientDC 对象。 RRS feed

  • 问题

  • 在c++中可以使用CClientDC dc(this);创建一个cdc对象,在C++中如何创建一个cdc对象,需要添加什么库吗?
    2017年6月6日 1:43

答案

  • MFC中是CClientDC ,C#.NET中是Graphics类型


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    • 已标记为答案 xia-s-xian 2017年6月7日 0:15
    2017年6月6日 10:07
  • Hi,

    感谢你的反馈。

    字体轮廓信息并不正确,不太清楚是什么现象,是字体不一样吗?

    如果你使用graphics去绘制字体,微软提供一份详细的操作文档,你可以查看一下。

    https://msdn.microsoft.com/en-us/library/a3a2bads(v=vs.110).aspx

    关于写text文档,你可以看一下How to: Draw Text at a Specified Location

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 xia-s-xian 2017年6月7日 0:15
    2017年6月6日 7:23
    版主

全部回复

  • Hi,

    感谢你在MSDN论坛发帖。

    C++只是一种语言,它是没有这个CClientDC对象的,所以你需要借助其他事情,比如你选择MFC工程,就会有这个CClientDC 对象,当然MFC是用C++语言来开发程序的。

    下面就是MFC的代码:

    void CDCView::DrawInClientDC(CDC* pDC)
    {
       UNREFERENCED_PARAMETER(pDC);
    
       CClientDC clientDC(this);
    
       clientDC.TextOut(10, 10, CString(_T("I used a client DC!")));
    }

    如果你不想使用MFC工程,你也可以选择GDI来得到clientDC, 我给你找了一个demo,你可以进行测试。

    如果你想使用C#语言来开发,你可以建立一个winform的工程,在winform中你需要借助GDI或者GDI+来解决DC的问题。

    Best Regards,

    Hart

    根据MSDN 的政策,如果你的问题解决了,请及时标记有用的回复作为答案,这样会帮助遇到相同问题的人

     

    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2017年6月6日 2:24
    版主
  • 你好

    非常感谢你的回答.

    我主要目的是想得到字符的轮廓信息,我有用c++实现的相关历程,但现在用c#写的,所以在c++中

    CClientDC dc(this);

    是创建了一个dc对象。

    但我不知道如何在c#中创建dc对象.

    我用 Graphics g = Graphics.FromHwnd(IntPtr.Zero);这句话是创建的graphic对象,

    下面是我写的得到字符轮廓信息的程序

                Graphics g = Graphics.FromHwnd(IntPtr.Zero);  //用graphic创建对象
                IntPtr hdc = g.GetHdc();  //获得环境句柄

                //将字体选入场景
                IntPtr fontPtr = font.ToHfont();  
                GdiNativeMethods.SelectObject(hdc, fontPtr); //择一个对象到指定的设备上下文

                TEXTMETRIC mer = new TEXTMETRIC();      //存放轮廓信息的变量
                flag=GdiNativeMethods.GetTextMetrics(hdc, out mer);  //将制定字体信息放到存放轮廓信息的变量中。

    通过调试发现,获得的字体轮廓信息并不正确,因为有c++写的获得字体轮廓信息的程序,所以我比较了下,用c#写的程序是有问题的。

    所以我怀疑是我创建对象有问题,不知道还是其他问题引起的。

    2017年6月6日 6:56
  • 不好意思,由于刚学,所以有些描述不是很专业。如果有哪个不清楚的,可以指出来我会详细说下,谢谢。
    2017年6月6日 7:06
  • Hi,

    感谢你的反馈。

    字体轮廓信息并不正确,不太清楚是什么现象,是字体不一样吗?

    如果你使用graphics去绘制字体,微软提供一份详细的操作文档,你可以查看一下。

    https://msdn.microsoft.com/en-us/library/a3a2bads(v=vs.110).aspx

    关于写text文档,你可以看一下How to: Draw Text at a Specified Location

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 xia-s-xian 2017年6月7日 0:15
    2017年6月6日 7:23
    版主
  • 你好

    在你的第一回答中提到在MFC中有CClientDC 对象,所以使用c++编写程序可以这样写

    CClientDC dc(this);得到一个dc对象,而我是用c#写的程序,所以要创建一个dc对象应该怎么写。如果c#无法调用

    MFC工程,而用GDI,那应该如何写程序才能创建一个dc对象。

    谢谢!!!!!

    2017年6月6日 9:07
  • MFC中是CClientDC ,C#.NET中是Graphics类型


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    • 已标记为答案 xia-s-xian 2017年6月7日 0:15
    2017年6月6日 10:07
  • 非常感谢两位的专业回答
    2017年6月7日 0:15