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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 04:54   #1
Trust_357
Пользователь
 
Регистрация: 10.03.2011
Сообщений: 68
По умолчанию Иконки в ListView C++

В учебной программе нет ListView, приходиться разбератся самому. Вешаюсь, голова болит. Короче вот мой код
Всё действо проходит в Cls_OnCreate.

Код:
BOOL Cls_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
	static int count=0;
	if(!count)
	{
		g_hInstLib=LoadLibrary(L"CPLTest.cpl");
		if(!g_hInstLib)
		{
			int a=0;
			do
			{
				a=ErrorMessageBox(GetLastError());
				if(a==2)
					exit(0);
				else
				{
					if(a==1)
						g_hInstLib=LoadLibrary(L"CPLTest.cpl");
				}
			}while(a);
		}
		else
		{
			g_Apl=(CPlApplet)GetProcAddress((HMODULE)g_hInstLib,"CPlApplet");
			if(!g_Apl)
			{
				int a=0;
				do
				{
					a=ErrorMessageBox(GetLastError());
					if(a==2)
						exit(0);
					else
					{
						if(a==1)
							g_Apl=(CPlApplet)GetProcAddress((HMODULE)g_hInstLib,"CPlApplet");
					}
				}while(a);
			}
			//DWORD IDI_ICON1=Apl(hWnd,1,0,0);

			//HICON hIcon=LoadIcon(g_hInstLib,MAKEINTRESOURCE(101)/*L"icon1.ico"*/);
			//if(!g_hInstLib)
			//{
			//	int a=0;
			//	do
			//	{
			//		a=ErrorMessageBox(GetLastError());
			//		if(a==2)
			//			exit(0);
			//		else
			//		{
			//			if(a==1)
			//				hIcon=LoadIcon(g_hInstLib,MAKEINTRESOURCE(101));
			//		}
			//	}while(a);
			//}
		}
		RECT crect;
		GetClientRect(hWnd,&crect);
		/*std::wstringstream wss;
		wss<<crect.left;
		MessageBox(NULL,wss.str().c_str(),L"For_Me",MB_OK|MB_DEFBUTTON1);*/
		DWORD dwStyle=WS_EX_CONTROLPARENT|WS_EX_LTRREADING|WS_EX_LEFT|WS_EX_RIGHTSCROLLBAR;
		HWND hList=CreateWindowEx(WS_EX_CONTROLPARENT|WS_EX_LTRREADING|WS_EX_LEFT|WS_EX_RIGHTSCROLLBAR
		,L"SysListView32"/*WC_LISTVIEW*/,L"",WS_CHILDWINDOW|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,
		crect.left+10,crect.top+10,crect.right-20,crect.bottom-50,hWnd,(HMENU)IDC_LIST,lpCreateStruct->hInstance,NULL);
		if(!hList)
		{
			int a=0;
				do
				{
					a=ErrorMessageBox(GetLastError());
					if(a==2)
						exit(0);
					hList=CreateWindowEx(WS_EX_CONTROLPARENT|WS_EX_LTRREADING|WS_EX_LEFT|WS_EX_RIGHTSCROLLBAR
					,WC_LISTVIEW,L"",WS_CHILDWINDOW|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,
					crect.left+10,crect.top+10,crect.right-20,crect.bottom-50,hWnd,(HMENU)IDC_LIST,lpCreateStruct->hInstance,NULL);
				}while(a);
		}
		//SHGetFileInfo(
		//ListView_SetExtendedListViewStyle(GetDlgItem(hWnd,IDC_LIST),dwStyle);
		HIMAGELIST hSmall=ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_MASK|ILC_COLOR32,1/*g_Apl(hWnd,2,0,0)*/,1);
		HICON hIcon=LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(101)/*L"icon1.ico"*/);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		ImageList_AddIcon(hSmall,hIcon);
		//ImageList_AddIcon(hSmall,LoadIcon(g_hInstLib,MAKEINTRESOURCE(102)));
		ListView_SetImageList(hList,hSmall,LVSIL_SMALL);
		//ImageList_Destroy(hSmall);
		SetForegroundWindow(hWnd);
		SetActiveWindow(hWnd);
		count++;
	}
	return TRUE;
}
Короче программа для работы с cpl файлами, только начал писать, главное с ListView разобраться, а конкретно вставлять изображения
в айтем, это проект, а ещё есть куча тестовых, в которых и так и так долбался, не нашёл ни одного рабочего кода(

Последний раз редактировалось Trust_357; 15.02.2012 в 04:57.
Trust_357 вне форума Ответить с цитированием
Старый 15.02.2012, 19:56   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.02.2012, 03:50   #3
Trust_357
Пользователь
 
Регистрация: 10.03.2011
Сообщений: 68
Хорошо

Спасибо!) Проблему решил, оказуеться там обязательно нада было делать 2 списка.
Код:
BOOL Cls_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
	static int count=0;
	if(!count)
	{
		{
			std::wstring ws;
			ws.resize(_MAX_PATH);
			wchar_t buffer[_MAX_PATH];
			GetModuleFileName(NULL,(LPWSTR)ws.c_str(),ws.size());
			//GetCurrentDirectory(_MAX_PATH,(LPWSTR)ws.c_str());
			ws=ws.substr(0,ws.rfind(L'\\'));
			if(MessageBox(hWnd,ws.c_str(),L"This is the exe path",MB_OK|MB_DEFBUTTON1)==IDOK)
				exit(0);
		}
		g_hInstLib=LoadLibrary(L"E:\\Projects\\System_Programming\\My_CPL\\Debug\\CPLTest.cpl");
		/*if(ErrorMessageBox(GetLastError())==2)
			exit(0);*/
		if(!g_hInstLib)
		{
			int a=0;
			do
			{
				a=ErrorMessageBox(GetLastError());
				if(a==2)
					exit(0);
				else
				{
					if(a==1)
						g_hInstLib=LoadLibrary(L"CPLTest.cpl");
				}
			}while(a);
		}
		else
		{
			g_Apl=(CPlApplet)GetProcAddress((HMODULE)g_hInstLib,"CPlApplet");
			if(!g_Apl)
			{
				int a=0;
				do
				{
					a=ErrorMessageBox(GetLastError());
					if(a==2)
						exit(0);
					else
					{
						if(a==1)
							g_Apl=(CPlApplet)GetProcAddress((HMODULE)g_hInstLib,"CPlApplet");
					}
				}while(a);
			}
			//DWORD IDI_ICON1=Apl(hWnd,1,0,0);

			//HICON hIcon=LoadIcon(g_hInstLib,MAKEINTRESOURCE(101)/*L"icon1.ico"*/);
			//if(!g_hInstLib)
			//{
			//	int a=0;
			//	do
			//	{
			//		a=ErrorMessageBox(GetLastError());
			//		if(a==2)
			//			exit(0);
			//		else
			//		{
			//			if(a==1)
			//				hIcon=LoadIcon(g_hInstLib,MAKEINTRESOURCE(101));
			//		}
			//	}while(a);
			//}
		}
		RECT crect;
		GetClientRect(hWnd,&crect);
		DWORD dwStyle=WS_EX_CONTROLPARENT|WS_EX_LTRREADING|WS_EX_LEFT|WS_EX_RIGHTSCROLLBAR;
		HWND hList=CreateWindowEx(0L,/*L"SysListView32"*/WC_LISTVIEW,L"",WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_ICON | LVS_EDITLABELS,
			crect.left+10,crect.top+10,crect.right-20,crect.bottom-50,hWnd,(HMENU)IDC_LIST,lpCreateStruct->hInstance,NULL);
		if(!hList)
		{
			int a=0;
				do
				{
					a=ErrorMessageBox(GetLastError());
					if(a==2)
						exit(0);
					hList=CreateWindowEx(WS_EX_CONTROLPARENT|WS_EX_LTRREADING|WS_EX_LEFT|WS_EX_RIGHTSCROLLBAR
					,WC_LISTVIEW,L"",WS_CHILDWINDOW|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,
					crect.left+10,crect.top+10,crect.right-20,crect.bottom-50,hWnd,(HMENU)IDC_LIST,lpCreateStruct->hInstance,NULL);
				}while(a);
		}
		CPLINFO cplinfo,cplinfo_1;
		HICON hIcon,hIcon_1;
		g_Apl(hWnd,3,0,(LPARAM)&cplinfo);
		g_Apl(hWnd,3,1,(LPARAM)&cplinfo_1);
		hIcon=LoadIcon(g_hInstLib,MAKEINTRESOURCE(cplinfo.idIcon));
		hIcon_1=LoadIcon(g_hInstLib,MAKEINTRESOURCE(cplinfo_1.idIcon));
		HIMAGELIST hSmall=ImageList_Create(16,16,ILC_MASK,g_Apl(hWnd,2,0,0),1);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		HIMAGELIST hLarge=ImageList_Create(32,32,ILC_MASK,g_Apl(hWnd,2,0,0),1);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		ImageList_AddIcon(hSmall,hIcon);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		ImageList_AddIcon(hLarge,hIcon);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		ImageList_AddIcon(hSmall,hIcon_1);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		ImageList_AddIcon(hLarge,hIcon_1);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		ListView_SetImageList(hList,hSmall,LVSIL_SMALL);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		ListView_SetImageList(hList,hLarge,LVSIL_NORMAL);
		if(ErrorMessageBox(GetLastError())==2)
			exit(0);
		LVITEM lvi;
		wchar_t buffer[32],buffer_1[64];
		LoadString(g_hInstLib,cplinfo.idName,buffer,32);
		memset(&lvi,0,sizeof(lvi));
		lvi.mask=LVIF_IMAGE|LVIF_TEXT;
		lvi.pszText=buffer;
		lvi.iItem=0;
		lvi.iImage=0;
		ListView_InsertItem(hList,&lvi);
		LoadString(g_hInstLib,cplinfo_1.idName,buffer,32);
		memset(&lvi,0,sizeof(lvi));
		lvi.mask=LVIF_IMAGE|LVIF_TEXT;
		lvi.pszText=buffer;
		lvi.iItem=1;
		lvi.iImage=1;
		ListView_InsertItem(hList,&lvi);
		SetForegroundWindow(hWnd);
		SetActiveWindow(hWnd);
		count++;
	}
	return TRUE;
}
Жму весы!)
Trust_357 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. Casper-SC WPF, UWP, WinRT, XAML 2 12.08.2010 19:04
ListView и Иконки. Leo20 Общие вопросы Delphi 0 24.10.2009 18:07
ListView и Иконки. Leo20 Общие вопросы Delphi 2 24.10.2009 17:15
иконки MAcK Общие вопросы Delphi 1 17.11.2006 15:56