2013-05-11 120 views
2

我想在默认颜色的win32 - PS_DASH/PS_DASHDOT中使用自定义笔。但是,我想根据某些条件在程序主体中更改笔的颜色。根据我迄今阅读的示例 - 我还没有遇到自定义笔颜色更改的示例。Win32 - GDI - 更改自定义笔颜色

任何人都可以给我一个如何去做这个例子吗?

此外 - 任何人都可以澄清 - 如果有可能改变已经创建的自定义笔的宽度?除了缺省创建自定义笔之外,找不到任何此语法。

感谢

参考链接我发现: Change GDI pen colour

http://devmaster.net/forums/topic/13685-win32-setdcpencolor-problem/

HPEN dashPen = CreatePen(PS_DASH, 1, RGB(255, 255, 0)); 
HPEN dashDotPen = CreatePen(PS_DASHDOT, 1, RGB(255, 255, 0)); 

    // changing color works with DC_PEN but want something similar for custom pen 
    SelectObject(hdc, GetStockObject(DC_PEN)); 
    SetDCPenColor(hdc, RGB(250, 0, 0)); 
    MoveToEx(hdc, 100, 100, NULL); 
    LineTo(hdc, 200, 200); 


    // Changing of Pen color doesn't seem to work for the custom pen 
    SelectObject(hdc, dashPen); 
    SetDCPenColor(hdc, COLOR_BLUE); 
    MoveToEx(hdc, 150, 150, NULL); 
    LineTo(hdc, 250, 250); 

    SelectObject(hdc, dashDotPen); 
    SetDCPenColor(hdc, COLOR_GRAY); 
    MoveToEx(hdc, 175, 175, NULL); 
    LineTo(hdc, 275, 275); 

    DeleteObject(dashPen); 
    DeleteObject(dashDotPen); 
+1

只需制作一支新笔,轻松自在。 – 2013-05-11 13:51:57

+2

目前还不清楚什么智力模型让你认为'SetDCPenColor'改变了DC笔以外的任何其他颜色。 DC笔是唯一一个可以在创建后更改颜色的笔。 (因为它不是一支笔,而是一支虚拟笔。) – 2013-05-11 13:56:59

+1

感谢您的答复。我对这个win32编程相对来说比较陌生,并且有一种印象是自定义笔的颜色一旦创建就可以改变。它看起来像在GDI中 - 自定义笔的颜色和宽度都不能在创建后更改。会找到一种替代方法来处理这种情况。 – ejuser 2013-05-11 17:14:09

回答

0

设置DC画笔颜色改变DC笔的颜色,这不是非此即彼您的自定义笔。

如果要更改定制笔,请使用所需的参数创建一个新的,并调用SelectObject以将其放入DC中,然后调用旧的DestroyObject。

DC笔是一种特殊的笔,用于当您想要一个简单而坚固的笔,并且能够轻松更改颜色。像DC笔刷一样,这对于常见的情况很方便,而不是用于修改自定义GDI对象的通用工具。