C++ 填充颜色和背景颜色之间的差异

C++ 填充颜色和背景颜色之间的差异,c++,objective-c,macos,cocoa,winapi,C++,Objective C,Macos,Cocoa,Winapi,我正在将一个应用程序从Windows移植到Mac OS X。在这里,我对不同术语的使用感到困惑 在Windows上,我们使用SetBkColor设置设备上下文的背景色 在Mac OS X上,有设置填充颜色的setFill Windows的背景色和Mac OS X的填充色有什么区别吗 对于通过setStroke清除笔划,我认为在Windows上,通过CreatePen对线条和SetTextColor对文本实现相同的效果。这个概念行吗?本机Windows开发和iOS/Mac OS上的核心图形都使用所

我正在将一个应用程序从Windows移植到Mac OS X。在这里,我对不同术语的使用感到困惑

在Windows上,我们使用SetBkColor设置设备上下文的背景色

在Mac OS X上,有设置填充颜色的setFill

Windows的背景色和Mac OS X的填充色有什么区别吗


对于通过setStroke清除笔划,我认为在Windows上,通过CreatePen对线条和SetTextColor对文本实现相同的效果。这个概念行吗?

本机Windows开发和iOS/Mac OS上的核心图形都使用所谓的“画师模型”绘图。就像真实的绘画一样,你为你的钢笔或画笔选择一种颜色,你所画的一切,填充,从那一点起直到你改变它,你所拥有的一切都将使用这种颜色。在Mac上,更具体地说,您可以为文本和边框等设置笔划,并为填充的方法设置填充。您必须分别设置它们,因为它们各自完成不同的任务

SetBkColor会有所不同,因为它会填充到背景中。在Mac或iOS上,您可以改为设置填充颜色,然后使用绘图方法填充rect,通常这都是通过覆盖视图的drawRect方法来完成的。例如,这里有一种方法:

- (void)drawRect:(NSRect)rect
{
    CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];

   // ********** Your drawing code here **********
   CGContextSetRGBFillColor (myContext, 1, 0, 0, 1);  // set my 'brush color'
   CGContextFillRect (myContext, CGRectMake (0, 0, 200, 100 ));  // fill it

   CGContextSetRGBFillColor (myContext, 0, 0, 1, .5);  // set my brush color
   CGContextFillRect (myContext, CGRectMake (0, 0, 100, 200));  //fill it
}
绘图是从后到前进行的,因此,如果您想将背景设置为某种颜色,只需将其作为第一个操作,并使用您喜欢的任何颜色填充整个窗口/视图矩形

有关更多示例,请参阅Quartz 2D绘图指南。如果您来自Windows,您会发现Quartz/Core Graphics具有非常类似的绘图功能,而且在我看来更丰富。以上示例来自本指南