这很丑陋:

wxPaintDC dc(this);
dc.SetPen(*wxBLACK_PEN);
dc.SetBrush(*wxBLACK_BRUSH);


这是因为dc.SetPen需要一个const wxPen&-如您所愿。我通常在堆栈上创建笔,为什么此宏扩展为指针? (我希望有一个const wxPen&)

宏扩展为:

wxStockGDI::GetPen(wxStockGDI::PEN_BLACK)


这是工厂吗?它被命名为“获取”而不是“制造”。

我应该删除笔吗?那将使它的使用更加混乱!

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

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

只是为了让我看起来并不傻:
我认为应该删除它的原因是它不是const,如果我更换了这支笔,我不想更换黑笔!因此它必须是副本!

我刚刚尝试过(我不喜欢这样的实验),删除笔不是一个好主意! (崩溃)

最佳答案

我已经在Google上搜索并找到GetPen的代码。

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;
}


(来自here

我想是为了向呼叫者报告new失败。在远古时代,new返回NULL。 (如您所知,如果分配失败,现在new会抛出std::bad_alloc。)

..,其返回类型为const wxPen*。你没看错吗

关于c++ - 为什么wxBLACK_PEN是wxPen *?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25423273/

10-09 04:52