将CPen绑定到列表框

时间:2011-08-09 19:56:19

标签: c++ mfc

有谁知道如何将CPen对象绑定到VS2005 C ++中的列表框?

我可以通过某种转换将其作为ToString吗?

我正在创建一个不同笔的自定义列表供用户选择。

感谢。

    COLORREF  rgbRED = (255,0,0);
    CPen penRed(PS_SOLID,3,rgbRED);

    CDialog::OnInitDialog();
    ShowWindow(SW_SHOW);
    UpdateData();
    lbLineWeight.InsertString(penRed);

2 个答案:

答案 0 :(得分:2)

2个选项。

  • (简单)使用带有字符串作为项目的普通CListBox,并将字符串与实际CPen之间的链接保持为自由函数(或其他一些类的成员),并且您必须执行以下操作:当前所选项目(通常是索引号)与您拥有的CPen信息之间的一对一关联。

  • (有点复杂)从CListBox派生自己的类并在内部保留CPen数据,您仍然需要在该新类中保留有效CPen的列表,并进行一对一关联所选项目与实际CPen之间;作为奖励,你可以让你派生CListBox所有者绘制,而不是使用字符串,你可以在列表项中绘制每种笔的某种表示。

另一个尝试,你可以将CPen作为用户数据添加到每个CListBox项(CListBox :: SetItemData),以使项目和实际项目之间的链接更容易。

祝你好运。

最大

答案 1 :(得分:1)

假设我理解正确,您希望拥有一个CListBox,允许用户选择CPen以便在其他地方使用。

我可能会做一个小帮手课程:

struct PenHelper
{
   CString m_displayName;
   LOGPEN m_penProps;

   bool CreatePen(CPen* pPen)
   {
       return pPen->CreatePenIndirect(&m_penProps) == 1;
   }
};

您可以拥有一个像std::map多个PenHelper的容器,每个容器都有一个名为“Solid Red”的名称和一个具有与名称匹配的属性的相应LOGPEN结构。在CListBox中添加显示名称字符串。当他们选择一个时,您可以按名称查找并使用create函数实际生成相应的CPen

只有百万种猫皮肤中的一种。

修改快速备注。为了在您的消息地图中处理ON_LBN_SELCHANGE,当他们在CListBox中进行选择时,请确保您在LBS_NOTIFY来电中给它Create样式,否则就赢了t fire。