15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как получить текст из List Control

Вопрос:
Как скопировать все данные List Control (в данном случае все они CStrings) в clipboard? В моём приложении необходимо, чтобы все данные из List Control можно было скопировать в clipboard, чтобы потом пользователь мог вставить их куда-нибудь ещё.

Ответ:
Следующий код делает то, что нужно:


	CString clipboard_data ;
	int		rows ;
	int		columns ;
	CString	item ;

	rows = m_ListControl.GetItemCount() ;
	columns = m_ListControl.GetHeaderCtrl()->GetItemCount() ;

	for (int j = 0 ; j < rows ; j++)
		{
		for (k = 0 ; k < columns ; k++)
			{
			if (k > 0)
				clipboard_data += "\t" ; // табуляция
			item = m_ListControl.GetItemText(j, k) ;
			clipboard_data += item ;
			}
		clipboard_data += "\r\n" ; // конец строки
		}


	// Теперь данные можно скопировать в буфер обмена
	if (OpenClipboard())
		{
		HGLOBAL		handle ;
		char		*pntr ;

		handle = ::GlobalAlloc(GHND, clipboard_data.GetLength() + 1) ;
		pntr = (char *)::GlobalLock(handle) ;
		strcpy(pntr, clipboard_data) ;
		::GlobalUnlock(handle) ;
		EmptyClipboard() ;
		SetClipboardData(CF_TEXT, handle);
		CloseClipboard();
		}