继承了listCtrl 后 汉字只能显示一个 如果单元格显示2个或以上的汉字就会在后面 添加乱码
void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 添加您的代码以绘制指定项
TCHAR lpBuffer[256];
LV_ITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iItem = lpDrawItemStruct->itemID;
lvi.iSubItem = 0;
lvi.pszText = lpBuffer;
lvi.cchTextMax = sizeof(lpBuffer);
VERIFY(GetItem(&lvi));
LV_COLUMN lvc, lvcprev;
::ZeroMemory(&lvc, sizeof(lvc));
::ZeroMemory(&lvcprev, sizeof(lvcprev));
lvc.mask = LVCF_WIDTH | LVCF_FMT;
lvcprev.mask = LVCF_WIDTH | LVCF_FMT;
CDC* pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rtClient;
GetClientRect(&rtClient);
for (int nCol = 0; GetColumn(nCol, &lvc); nCol++)
{
if (nCol > 0)
{
// Get Previous Column Width in order to move the next display item
GetColumn(nCol - 1, &lvcprev);
lpDrawItemStruct->rcItem.left += lvcprev.cx;
lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left;
}
CRect rcItem;
if (!GetSubItemRect(lpDrawItemStruct->itemID, nCol, LVIR_LABEL, rcItem))
continue;
::ZeroMemory(&lvi, sizeof(lvi));
lvi.iItem = lpDrawItemStruct->itemID;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iSubItem = nCol;
lvi.pszText = lpBuffer;
lvi.cchTextMax = sizeof(lpBuffer);
VERIFY(GetItem(&lvi));
CRect rcTemp;
rcTemp = rcItem;
if (nCol == 0)
{
rcTemp.left -= 2;
}
if (lpDrawItemStruct->itemState & ODS_SELECTED)
{
pDC->FillSolidRect(&rcTemp, GetSysColor(COLOR_HIGHLIGHT));
pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT));
}
else
{
COLORREF color;
color = GetBkColor();
pDC->FillSolidRect(rcTemp, color);
if (FindColColor(nCol, color))
{
pDC->FillSolidRect(rcTemp, color);
}
if (FindItemColor(nCol, lpDrawItemStruct->itemID, color))
{
pDC->FillSolidRect(rcTemp, color);
}
//pDC->SetTextColor(m_color);
}
pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
UINT uFormat = DT_CENTER;
if (m_Header.m_Format[nCol] == '0')
{
uFormat = DT_LEFT;
}
else if (m_Header.m_Format[nCol] == '1')
{
uFormat = DT_CENTER;
}
else if (m_Header.m_Format[nCol] == '2')
{
uFormat = DT_RIGHT;
}
TEXTMETRIC metric;
pDC->GetTextMetrics(&metric);
int ofst;
ofst = rcItem.Height() - metric.tmHeight;
rcItem.OffsetRect(0, ofst / 2);
pDC->SetTextColor(m_color);
COLORREF color;
if (FindColTextColor(nCol, color))
{
pDC->SetTextColor(color);
}
if (FindItemTextColor(nCol, lpDrawItemStruct->itemID, color))
{
pDC->SetTextColor(color);
}
CFont nFont, *nOldFont;
nFont.CreateFont(m_fontHeight, m_fontWith, 0, 0, 0, FALSE, FALSE, 0, 0, 0, 0, 0, 0, _TEXT("宋体"));//创建字体
nOldFont = pDC->SelectObject(&nFont);
CString strTarger;
strTarger = lpBuffer;
int nLength = strTarger.GetLength();
LPTSTR lpBuffer1 = strTarger.GetBuffer(nLength);
nLength = WideCharToMultiByte(CP_ACP, 0, lpBuffer1, -1, NULL, 0, NULL, NULL);//14,多字符长度 长度
strTarger.ReleaseBuffer();
DrawText(lpDrawItemStruct->hDC, lpBuffer, nLength,
&rcItem, uFormat);
pDC->SelectStockObject(SYSTEM_FONT);//strlen(ConvertLPWSTRToLPSTR(lpBuffer))
}
}
这是转换代码 不知问题出在哪里?