首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么wxBLACK_PEN是wxPen*?

为什么wxBLACK_PEN是wxPen*?
EN

Stack Overflow用户
提问于 2014-08-21 09:51:41
回答 2查看 325关注 0票数 0

这是相当丑陋的:

代码语言:javascript
复制
wxPaintDC dc(this);
dc.SetPen(*wxBLACK_PEN);
dc.SetBrush(*wxBLACK_BRUSH);

这是因为dc.SetPen需要一个const wxPen& --正如您所期望的那样。我通常在堆栈上创建笔,为什么这个宏扩展为指针?(我预计会有一个const wxPen&)

宏扩展到:

代码语言:javascript
复制
wxStockGDI::GetPen(wxStockGDI::PEN_BLACK)

这是工厂吗?它的名字是“得到”而不是“制造”..。

我应该删除这支笔吗?这会使它的使用更加混乱!

支持“工厂”假说的不是const wxPen*。我可以改变它!

为什么它返回一个指针?我应该删除它吗?

只是为了让我看起来不傻:

我认为我应该删除它的理由是,它不是康斯特,如果我改变这支笔,我不想改变黑笔本身!所以它一定是一份副本!

我刚试过(我不喜欢这样的实验),删除这支笔不是个好主意!(坠机)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-21 09:58:38

我搜索并找到了GetPen的代码。

代码语言:javascript
复制
const wxPen* wxStockGDI::GetPen(Item item)
{
    wxPen* pen = static_cast<wxPen*>(ms_stockObject[item]);
    if (pen == NULL)
    {
        switch (item)
        {
        case PEN_BLACK:
            pen = new wxPen(*GetColour(COLOUR_BLACK), 1, wxPENSTYLE_SOLID);
            break;
        case PEN_BLACKDASHED:
            pen = new wxPen(*GetColour(COLOUR_BLACK), 1, wxPENSTYLE_SHORT_DASH);
            break;
        case PEN_BLUE:
            pen = new wxPen(*GetColour(COLOUR_BLUE), 1, wxPENSTYLE_SOLID);
            break;
        case PEN_CYAN:
            pen = new wxPen(*GetColour(COLOUR_CYAN), 1, wxPENSTYLE_SOLID);
            break;
        case PEN_GREEN:
            pen = new wxPen(*GetColour(COLOUR_GREEN), 1, wxPENSTYLE_SOLID);
            break;
        case PEN_YELLOW:
            pen = new wxPen(*GetColour(COLOUR_YELLOW), 1, wxPENSTYLE_SOLID);
            break;
        case PEN_GREY:
            pen = new wxPen(wxColour(wxT("GREY")), 1, wxPENSTYLE_SOLID);
            break;
        case PEN_LIGHTGREY:
            pen = new wxPen(*GetColour(COLOUR_LIGHTGREY), 1, wxPENSTYLE_SOLID);
            break;
        case PEN_MEDIUMGREY:
            pen = new wxPen(wxColour(wxT("MEDIUM GREY")), 1, wxPENSTYLE_SOLID);
            break;
        case PEN_RED:
            pen = new wxPen(*GetColour(COLOUR_RED), 1, wxPENSTYLE_SOLID);
            break;
        case PEN_TRANSPARENT:
            pen = new wxPen(*GetColour(COLOUR_BLACK), 1, wxPENSTYLE_TRANSPARENT);
            break;
        case PEN_WHITE:
            pen = new wxPen(*GetColour(COLOUR_WHITE), 1, wxPENSTYLE_SOLID);
            break;
        default:
            wxFAIL;
        }
        ms_stockObject[item] = pen;
    }
    return pen;
}

(来自这里)

我想这是为了向调用方报告new失败。在古代,new返回了NULL。(如您所知,现在如果分配失败,new会抛出std::bad_alloc。)

..and它的返回类型是const wxPen*。你没看错吗?

票数 1
EN

Stack Overflow用户

发布于 2014-08-21 22:37:57

因为兼容性原因,它是一个指针。不是很漂亮,但使用wxBLACK_PEN打破数百万行现有代码将更加丑陋。

它不能被删除,因为任何股票对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25423273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档