制表位在 MFC CCheckListBox 中工作吗?
Do tabstops work in a MFC CCheckListBox?
我有一个 MFC CCheckListBox 控件工作正常,但 Tab 停止位似乎不起作用。当我为控件提供包含制表符 ASCII 9 的文本字符串时,文本仍然没有任何 space 用于制表符。
有谁知道您是否可以在 CCheckListBox 中使用制表位?我尝试了很多不同的方法,当我 google 时,我发现了同样的问题,但没有解决方案。我在 ListBox 资源属性中选中了 "Use Tabstops" 框。我还有 Has Strings: True 和 Owner Draw: is Fixed(如果有帮助的话)。这是我正在使用的初始化代码:
BOOL CDlgQuotePOReceive::OnInitDialog()
{
CDialog::OnInitDialog();
VERIFY(((CCheckListBox *) this->GetDlgItem(IDC_LB_PO_DETAIL))->SetTabStops(10));
// Then code to fill the listbox with string data that
// is working fine to get the data into the control.
return TRUE;
}
简单的答案是否定的!
原因:CCheckListBox 只是一个所有者绘制的列表框。你可以在mfc中找到源代码。绘制文本时,该函数仅使用 ExtTextOut 并且不关心制表位。
在 VC\atlmfc\src\mfc\winctrl3.cpp
中查看 CCheckListBox::DrawItem 的实现
因此,您的解决方案也很简单。编写您自己的 class 派生自 CCheckedListBox 并使用您自己的 DrawItem 函数。你也有当前DrawItem函数的源代码,你可以很容易地使用另一个文本输出函数。
我有一个 MFC CCheckListBox 控件工作正常,但 Tab 停止位似乎不起作用。当我为控件提供包含制表符 ASCII 9 的文本字符串时,文本仍然没有任何 space 用于制表符。
有谁知道您是否可以在 CCheckListBox 中使用制表位?我尝试了很多不同的方法,当我 google 时,我发现了同样的问题,但没有解决方案。我在 ListBox 资源属性中选中了 "Use Tabstops" 框。我还有 Has Strings: True 和 Owner Draw: is Fixed(如果有帮助的话)。这是我正在使用的初始化代码:
BOOL CDlgQuotePOReceive::OnInitDialog()
{
CDialog::OnInitDialog();
VERIFY(((CCheckListBox *) this->GetDlgItem(IDC_LB_PO_DETAIL))->SetTabStops(10));
// Then code to fill the listbox with string data that
// is working fine to get the data into the control.
return TRUE;
}
简单的答案是否定的!
原因:CCheckListBox 只是一个所有者绘制的列表框。你可以在mfc中找到源代码。绘制文本时,该函数仅使用 ExtTextOut 并且不关心制表位。
在 VC\atlmfc\src\mfc\winctrl3.cpp
中查看 CCheckListBox::DrawItem 的实现因此,您的解决方案也很简单。编写您自己的 class 派生自 CCheckedListBox 并使用您自己的 DrawItem 函数。你也有当前DrawItem函数的源代码,你可以很容易地使用另一个文本输出函数。