经常使用vc++进行窗口类设计的程序员经常会用到设备上下文dc来做一些画图的工作,但是设备上下文到底是什么呢?
<wbr><wbr>当我们在屏幕上显示一些图形时,会调用底层显示芯片的一些绘图函数,如果每次我们做画线这样的工作都要调用显示芯片的提供的函数或类进行工作的时候,显然不太现实。而且这样也影响了程序的可移植性。因为各种显示芯片设计的绘图函数是不尽相同的。所以在vc++的编程过程中,我们把这个工作交给系统来做。设备上下文hdc就是用来完成这个任务的。同一应用程序可以在不同类型的显卡,显示器上运行而不必重写整个程序。<br><wbr><wbr>那么如何获得设备上下文的句柄呢?我们可以用GetDc();这个函数,如下所示:</wbr></wbr></wbr></wbr>
<wbr><wbr>当我们在屏幕上显示一些图形时,会调用底层显示芯片的一些绘图函数,如果每次我们做画线这样的工作都要调用显示芯片的提供的函数或类进行工作的时候,显然不太现实。而且这样也影响了程序的可移植性。因为各种显示芯片设计的绘图函数是不尽相同的。所以在vc++的编程过程中,我们把这个工作交给系统来做。设备上下文hdc就是用来完成这个任务的。同一应用程序可以在不同类型的显卡,显示器上运行而不必重写整个程序。<br><wbr><wbr>那么如何获得设备上下文的句柄呢?我们可以用GetDc();这个函数,如下所示:</wbr></wbr></wbr></wbr>
HDC hdc;
hdc=::GetDC(NULL);//获得桌面设备环境
::Rectangle(100,100,500,500);
::ReleaseDC(hdc);
<wbr><wbr><span style="font-size:14px"><wbr>用GetDc我们获得了设配上下文的句柄。这里需要注意一点,每当我们用GetDc获得了一个上下文句柄以后,我们都要用ReleaseDc();来释放它,一遍其他的程序能再次申请。所以这两个函数在我们的程序中应该是成对出现的。<br><wbr><wbr><wbr><span style="font-size:18px">用MFC给我们提供的CDC类我们可以隐含的获得dc的调用。</span><br></wbr></wbr></wbr></wbr></span><span style="font-size:18px"><wbr><wbr>首先我们创建一个dc的客户端类CDC name(*classpoint)。<br>
参数*classpoint是要使用dc类的父类(parentclass)的类指针,我们可以传this指针。<br><wbr><wbr>CDC中有许多实用画图方法。这里我们画一条直线。<br><pre name="code" class="cpp">CDC m_dc(this);
dc.MoveTO(int x1,int y1);
dc.LineTo(int x2,int y2);
</pre>这样一条从坐标(x1,y1)到(x2,y2)的直线就画好了。</wbr></wbr></wbr></wbr></span></wbr></wbr>