Сообщение Re[4]: Как сделать текст в некоторых клетках в таблице (CLis от 13.06.2020 10:17
Изменено 13.06.2020 10:25 RussianFellow
Re[4]: Как сделать текст в некоторых клетках в таблице (CListCtrl) жирным?
Я написал:
Внутри функции OnCustomDraw считывается текст из клетки таблицы в переменную mystr, потом текст из переменной mystr благополучно преобразуется в переменную pzText, но потом в результате выполнения функции WideCharToMultiByte у меня в строке s вместо нормального текста получается какая-то абракадабра. То есть у меня было
Как мне исправить эту ошибку? Как сделать так, чтобы преобразование в строку s стало правильным?
BEGIN_MESSAGE_MAP(CMyListCtrl4, CListCtrlEx2)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
END_MESSAGE_MAP()
void CMyListCtrl4::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
int length, row, column;
LPCTSTR pzText;
LVITEM *pItem;
bool getItemRes;
char s[80], s1[5];
CString mystr;
NMLVCUSTOMDRAW* pLVCustomDraw = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
NMCUSTOMDRAW pLV = (NMCUSTOMDRAW)pLVCustomDraw->nmcd;
*pResult = CDRF_DODEFAULT;
row = pLVCustomDraw->nmcd.dwItemSpec;
column = pLVCustomDraw->iSubItem;
mystr = GetItemText(row,column);
mystr = mystr.Trim();
length = mystr.GetLength();
pzText = mystr.GetBuffer();
if (length==0)
strcpy(s1,"");
else
{
length = WideCharToMultiByte(CP_UTF8,0,pzText,-1,0,0,0,0);
WideCharToMultiByte(CP_UTF8,0,pzText,-1,s,length,0,0);
strncpy(s1,s,3); s1[3] = '\0';
}
switch (pLVCustomDraw->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult |= CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
if ((strcmp(s1,"Дат")==0)||(strcmp(s1,"НИП")==0)||(strcmp(s1,"---")==0))
{
SelectObject(pLVCustomDraw->nmcd.hdc,m_FontBold);
}
break;
}
}
void CMyListCtrl4::PreSubclassWindow()
{
LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
lf.lfHeight = 13;
lf.lfWeight = FW_BOLD;
wcscpy(lf.lfFaceName,L"MS Sans Serif");
m_FontBold.CreateFontIndirect(&lf);
CListCtrl::PreSubclassWindow();
}
Внутри функции OnCustomDraw считывается текст из клетки таблицы в переменную mystr, потом текст из переменной mystr благополучно преобразуется в переменную pzText, но потом в результате выполнения функции WideCharToMultiByte у меня в строке s вместо нормального текста получается какая-то абракадабра. То есть у меня было
, а стало2021.07.10
.Дата: 2021.07.10
Как мне исправить эту ошибку? Как сделать так, чтобы преобразование в строку s стало правильным?
Re[4]: Как сделать текст в некоторых клетках в таблице (CLis
Я написал:
Внутри функции OnCustomDraw считывается текст из клетки таблицы в переменную mystr, потом текст из переменной mystr благополучно преобразуется в переменную pzText, но потом в результате выполнения функции WideCharToMultiByte у меня в строке s вместо нормального текста получается какая-то абракадабра. То есть у меня было
Как мне исправить эту ошибку? Как сделать так, чтобы преобразование в строку s стало правильным?
BEGIN_MESSAGE_MAP(CMyListCtrl4, CListCtrlEx2)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
END_MESSAGE_MAP()
void CMyListCtrl4::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
int length, row, column;
LPCTSTR pzText;
LVITEM *pItem;
bool getItemRes;
char s[80], s1[5];
CString mystr;
NMLVCUSTOMDRAW* pLVCustomDraw = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
NMCUSTOMDRAW pLV = (NMCUSTOMDRAW)pLVCustomDraw->nmcd;
*pResult = CDRF_DODEFAULT;
row = pLVCustomDraw->nmcd.dwItemSpec;
column = pLVCustomDraw->iSubItem;
mystr = GetItemText(row,column);
mystr = mystr.Trim();
length = mystr.GetLength();
pzText = mystr.GetBuffer();
if (length==0)
strcpy(s1,"");
else
{
length = WideCharToMultiByte(CP_UTF8,0,pzText,-1,0,0,0,0);
WideCharToMultiByte(CP_UTF8,0,pzText,-1,s,length,0,0);
strncpy(s1,s,3); s1[3] = '\0';
}
switch (pLVCustomDraw->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult |= CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
if ((strcmp(s1,"Дат")==0)||(strcmp(s1,"НИП")==0)||(strcmp(s1,"---")==0))
{
SelectObject(pLVCustomDraw->nmcd.hdc,m_FontBold);
}
break;
}
}
void CMyListCtrl4::PreSubclassWindow()
{
LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
lf.lfHeight = 13;
lf.lfWeight = FW_BOLD;
wcscpy(lf.lfFaceName,L"MS Sans Serif");
m_FontBold.CreateFontIndirect(&lf);
CListCtrl::PreSubclassWindow();
}
Внутри функции OnCustomDraw считывается текст из клетки таблицы в переменную mystr, потом текст из переменной mystr благополучно преобразуется в переменную pzText, но потом в результате выполнения функции WideCharToMultiByte у меня в строке s вместо нормального текста получается какая-то абракадабра. То есть у меня было
, а сталоДата: 2021.07.10
.Дата: 2021.07.10
Как мне исправить эту ошибку? Как сделать так, чтобы преобразование в строку s стало правильным?