有谁知道如何将CPen对象绑定到VS2005 C ++中的列表框?
我可以通过某种转换将其作为ToString吗?
我正在创建一个不同笔的自定义列表供用户选择。
感谢。
COLORREF rgbRED = (255,0,0);
CPen penRed(PS_SOLID,3,rgbRED);
CDialog::OnInitDialog();
ShowWindow(SW_SHOW);
UpdateData();
lbLineWeight.InsertString(penRed);
答案 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。