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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2010, 19:05   #1
DeFace
Пользователь
 
Аватар для DeFace
 
Регистрация: 27.09.2008
Сообщений: 60
По умолчанию Даже не знаю в чем проблема

Люди добрые помогите. Пишу программу, в голове уже каша)
В программе есть TabControl с двумя вкладками. На в кладках по ListBox'у.
В ЛистБокс выводятся данные из файла. Проблема в том, что при первом запуске
сразу активирована 1-я вкладка, после чего перехожу на 2-ую (появляется текст в 4 колонки),
потом перехожу на 1-ую вкладку и снова на 2-ую, В итоге в ЛистБоксе тот же текст
только в двух экземплярах. Остальные попытки смены вкладок текст больше не добавляют.
Привожу исходники основных функций. Компилятор MS Visual 2008.

Код:
void InitControl(HWND hWnd, HINSTANCE hInstance, int idpage)
{
	DWORD buffer;
	wchar_t lpBuffer[100]={0};

	hFile = CreateFile (L"rasxod.txt", GENERIC_READ, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	
	if(idpage==0)
	{
		ListView = CreateWindow(WC_LISTVIEW, L"LISTVIEW",WS_VISIBLE|WS_CHILD|WS_BORDER|LVS_REPORT|LVS_EDITLABELS|
		WS_VSCROLL|WS_BORDER|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,rect.left, rect.top, x, 
							y-y/4,hWnd1, (HMENU)ID_LISTVIEW, hInstance, 0);

		AddColumnToListView(ListView, L"№",1,40);
		AddColumnToListView(ListView, L"Наименование",2,300);
		AddColumnToListView(ListView, L"Кол-во",3,100);
		AddColumnToListView(ListView, L"Цена",4,100);	

		int size = GetFileSize( hFile, 0 );
		
		ReadFile(hFile, lpBuffer, size, &buffer, NULL);

		EditBuffer(lpBuffer);

		CloseHandle(hFile);	
	}

	if(idpage==1)
	{
		ListView1 = CreateWindow(WC_LISTVIEW, L"LISTVIEW",WS_VISIBLE|WS_CHILD|WS_BORDER|LVS_REPORT|LVS_EDITLABELS|
		WS_VSCROLL|WS_BORDER|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,rect.left, rect.top, x, 
							y-y/4,hWnd2, (HMENU)ID_LISTVIEW1, hInstance, 0);
		
		AddColumnToListView(ListView1, L"№",1,40);
		AddColumnToListView(ListView1, L"Наименование",2,300);
		AddColumnToListView(ListView1, L"Кол-во",3,100);
		AddColumnToListView(ListView1, L"Цена",4,100);

		int size = GetFileSize( hFile, 0 );
		
		ReadFile(hFile, lpBuffer, size, &buffer, NULL);

		EditBuffer(lpBuffer);

		CloseHandle(hFile);
	}
}
Код:
void EditBuffer(wchar_t lpBuffer[100])
{
	int count = 0;
	int count1 = 0;
	int temp = 0;

	for(int i = 0; i < 100; i++)
	{
		lpBuffer[i] = lpBuffer[i+1];

		//if(lpBuffer[i] == TAB2)			// #define TAB2 L'013'
			//MessageBox(0, L"1", L"", MB_OK);

	}
	for(int i = 0; i < 100; i++)
	{
		if(count == 0 && lpBuffer[i]==TAB1)		// #define TAB1 L'\n'
		{
			for(int n = 0; n < i-temp-1; n++)
			{
			//MessageBox(0, L"1", L"", MB_OK);
				numberBuffer[n] = lpBuffer[n+temp];
			}
			temp = i+1;  //3
			count++;
			i = i+1;  //3
		}

		if(count == 1 && lpBuffer[i]==TAB1)
		{
			for(int n = 0; n < i-temp-1; n++)
			{
				nameBuffer[n] = lpBuffer[n+temp];
			}
			temp = i+1;  //10
			count++;
			i = i+1;  //10
		}

		if(count == 2)
		{
			AddItemToListView(ListView1, numberBuffer, count1, 0);
			AddItemToListView(ListView1, nameBuffer, count1, 1);
			AddItemToListView(ListView1, amountBuffer, count1, 2);
			AddItemToListView(ListView1, priceBuffer, count1, 3);
			count = 0;
			count1++;
			memset(&numberBuffer, NULL, 100);
			memset(&nameBuffer, NULL, 100);
			memset(&amountBuffer, NULL, 100);
			memset(&priceBuffer, NULL, 100);
		}
	}
}
Код:
LRESULT __stdcall WndProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
	HDC hDC;
	PAINTSTRUCT ps;

	switch(msg)
	{
	case WM_NOTIFY:
		{
			NMHDR *ptab = (LPNMHDR) lparam;
			LPTOOLTIPTEXT lpToolTipText;

			switch(ptab->code)
			{
			case TTN_NEEDTEXT:
				lpToolTipText = (LPTOOLTIPTEXT) lparam;
				break;

			case TCN_SELCHANGE:
				{
					idpage = TabCtrl_GetCurSel(ptab->hwndFrom);
					
					ShowWindow(hWnd1, SW_HIDE);
					ShowWindow(hWnd2, SW_HIDE);

					switch(idpage)
					{
					case 0:
						//MessageBox(0,L"0",L"",MB_OK);
						InitControl(hWnd, hInstance, 0);
						ShowWindow(hWnd1, SW_SHOW);
						break;

					case 1:
						//MessageBox(0,L"1",L"",MB_OK);
						InitControl(hWnd, hInstance, 1);
						ShowWindow(hWnd2, SW_SHOW);
						break;
					}
				}
				break;
			}
		}

	case WM_PAINT:
		hDC=BeginPaint(hWnd, &ps);
		InvalidateRect(tab, 0, true);
		EndPaint(hWnd, &ps);//освоб. контекст устройства
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	default:
		return DefWindowProc(hWnd, msg, wparam, lparam);
	}

	return 0;
}
Еще InitControl() вызывается 1 раз в WinMain перед ShowWindow().

Последний раз редактировалось DeFace; 21.08.2010 в 19:08.
DeFace вне форума Ответить с цитированием
Старый 25.08.2010, 15:54   #2
VerhoLom
Пользователь
 
Регистрация: 25.08.2010
Сообщений: 12
По умолчанию

Они-то может и меняются, но только у Вас выходит стопка перекрывающихся списков. Уничтожайте все списки при переходе на вкладку, а потом создавайте нужный.
VerhoLom вне форума Ответить с цитированием
Старый 04.09.2010, 20:44   #3
DeFace
Пользователь
 
Аватар для DeFace
 
Регистрация: 27.09.2008
Сообщений: 60
По умолчанию

Спасибо огромное!!!
DeFace вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
даже не знаю с чего начать прогу на С dma Общие вопросы C/C++ 2 07.03.2010 17:16
Даже не знаю в какую тему писать ryton Фриланс 12 06.06.2008 13:30
Не не знаю в чем проблема с IdUDPServer D@rk M@k Работа с сетью в Delphi 2 28.12.2007 15:46