Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2020, 17:07   #11
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Не используйте char, используйте wchar_t.
Не используйте strcmp, используйте wcscmp и так далее.
Ясно, спасибо.
Я в соответствии с этим изменил мой код:

Код:
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;
	wchar_t  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)
		wcscpy(s1,L"");
	else
	{
		wcscpy(s,(wchar_t*)pzText);
		wcsncpy(s1,s,3);    s1[3] = '\0';
	}
	switch (pLVCustomDraw->nmcd.dwDrawStage)
	{
	case CDDS_PREPAINT:
		*pResult |= CDRF_NOTIFYITEMDRAW;
		break;
	case CDDS_ITEMPREPAINT:
		if ((wcscmp(s1,L"Дат")==0)||(wcscmp(s1,L"НИП")==0)||(wcscmp(s1,L"---")==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();
}
На одной машине, не которой стоит Visual Studio 2010, у меня нормально всё работает--текст в строках, где текст начинается с "Дат", "НИП" или "---", отображается жирным шрифтом (во всех остальных строках он отображается обычным шрифтом).
Но когда я перенёс этот код на другую машину, где стоит Visual Studio 2012, то текст соотвествующих строках отображается обычным шрифтом. Я полез в отладчик, а там в функции CMyListCtrl::OnCustomDraw значение row равно, допустим, 0 (нулю), а значение column (то есть значение pLVCustomDraw->iSubItem ) равно какому-то бессмысленному значению (например, 2348579345 ). И из-за этого у меня шрифт в нужных строках не меняется на жирный.

В чём может быть причина этого? Как сделать так, чтобы на втором компьютере, где стоит Visual Studio 2012, работало бы преобразование шрифта?
erslgoeirjh вне форума Ответить с цитированием
Старый 16.06.2020, 13:52   #12
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

erslgoeirjh, а для чего вся эта чисто СИшная дикость с s[80], s1[5] , когда можно было бы просто:

Код:
if (mystr==L"Дат" || mystr==L"НИП" || mystr==L"---")
{

Последний раз редактировалось Алексей1153; 16.06.2020 в 13:59.
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текст в клетках таблицы не отображается по центру erslgoeirjh Visual C++ 3 07.03.2019 12:48
Как сделать заголовок из двух строк в таблице (CListCtrl) ? erslgoeirjh Visual C++ 0 26.02.2019 16:05
Вопрос по столбцам в таблице (CListCtrl) erslgoeirjh Visual C++ 1 12.02.2019 17:38
Как изменить высоту строки в таблице (CListCtrl) erslgoeirjh Visual C++ 1 15.05.2018 19:41
Как выделить в таблице (CListCtrl) всю строку, но только одну? erslgoeirjh Visual C++ 1 15.11.2016 16:02