Problem z ListView C++

0

To znowu ja :P... Otóż mam problem z kontrolką Listview... Jakby system jej "nie odświeżał, odmalowywał"... W moim programie jest coś takiego:

W menu głównym programu włączamy pewien przycisk, po czym wyskakuje okno dialogowe, posiadające kontrolkę ListView... Kontrolka ta, odczytuje wszystkie dane ze struktury, po naciśnięciu buttona dodaj, wyświetla się następne okno dialogowe z polami edycji, gdy je wypełnimy naciskamy button OK... (cały czas pierwsze okno dialogowe było pod spodem drugiego)... po naciśnięciu OK, program niszczy drugie okno... Więc zostaje tylko pierwsze... widzimy że do listy został dodany nasz element, jednak gdy chcemy go zaznaczyć to jakby nie istniał, jakby w ogóle go tam nie było, tak samo jeśli dodamy do listy pełno elementów i po prawej stronie wyświetli się pasek przewijania, on także jakby nie istnieje, również jest cały widoczny, ale gdy go klikamy, nic......... Teraz najdziwniejsze: Jeśli wyłączymy to okno dialogowe i włączymy z powrotem, wszystko jest cacy, ,każdy element widzimy i możemy klikać i zaznaczać...

I tu moje pytanie, o co chodzi?... Czy system nie odświeża tej kontrolki?... A może kod opdowiedzialny za tworzenie kontrolki, kolumn i dodawaniu pól obsługuję w złej procedurze?... Próbowałem w WM_PAINT, WM_ACTIVATE, WM_SETFOCUS, WM_NOTIFY... I tyle... Proszę o pomoc :(

Pozdrawiam Dawid R.

0

Przepraszam za nieobecność, oto kod:
Nie będę wstawiał całego bo zajmie to Ci zbyt dużo czasu aby cały przeanalizować, a i tak nic błędnego tam nie ma, więc:

DPrace to struktura przechowująca dane, a funkcje DodajKolumny itp, itd, są przeze mnie napisane, zawierają w sobie funkcje obsługujące ListViewa...

IDC to EditBoxy
IDD to dialogi

//Procedura głównego okna
LRESULT CALLBACK ProceduraOkna(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	case WM_COMMAND:
		{
		unsigned id = LOWORD(wParam);
		unsigned kod = HIWORD(wParam);

		if(id == ID_ADMINISTRACJA_PRACE)
			DialogBox(GetModuleHandle(0), (LPCTSTR)IDD_DIALOG_PRACE, hWnd, ProceduraDialogPrace);
		}return 0;
	
	case WM_DESTROY:
	   PostQuitMessage(0);
	   return 0;

	}
	return DefWindowProc(hWnd, message, wParam, lParam);
}

Jest tu tylko tworzenie dialogu nr 1...

Procedura dialogu nr 1 gdzie jest listview, tym razem przetwarzam WM_ACTIVATE, ale próbowałem inne i nic nie daje

BOOL CALLBACK ProceduraDialogPrace(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	uchwytDialogPrace = hDlg;
	switch(message)
	{
	case WM_ACTIVATE:
		{
			int LiczbaElementowWStrukturze = sizeof(dPrace);
			LiczbaElementowWStrukturze++;
			HWND uchwytListy = CreateWindowEx(0, WC_LISTVIEW, "ListView", WS_CHILD | LVS_REPORT | WS_VISIBLE, 10, 10, 450, 240, hDlg, 0, uchwytAplikacji, 0); 
				
			ListView_SetExtendedListViewStyle(uchwytListy, LVS_EX_FULLROWSELECT  | LVS_EX_GRIDLINES);
			
			char *tablica[4] = {"Kod", "Opis", "Stawka dla firmy", "Jednostka miary"};
			DodajKolumny(uchwytListy, tablica, 4);
			ZmienRozmiarKolumny(uchwytListy, 0, 112);
			ZmienRozmiarKolumny(uchwytListy, 1, 112);
			ZmienRozmiarKolumny(uchwytListy, 2, 112);
			ZmienRozmiarKolumny(uchwytListy, 3, 112);

			for(int i = 0; i < liczbaElementowWStrukturze; i++)
			{
				DodajElement(uchwytListy, (LPSTR)dPrace[i].kod, 0, i);
				DodajElement(uchwytListy, (LPSTR)dPrace[i].opis, 1, i);
				DodajElement(uchwytListy, (LPSTR)dPrace[i].stawka, 2, i);
				DodajElement(uchwytListy, (LPSTR)dPrace[i].jednostka, 3, i);
			}


		}return TRUE;

	case WM_COMMAND:
		{
			unsigned id = LOWORD(wParam);
			unsigned kod = HIWORD(wParam);

			if(id == IDC_ZAMKNIJ)
				SendMessage(hDlg, WM_CLOSE, 0, 0);

			if(id == IDC_DODAJ)
				DialogBox(GetModuleHandle(0), (LPCTSTR)IDD_DIALOG_NOWA_PRACA, hDlg, ProceduraDialogNowaPraca);
	
		}return TRUE;

	case WM_CLOSE:
		{
			EndDialog(hDlg, 0);
		}return TRUE;
	

	}return FALSE;
}

Procedura dialogu nr 2, to po jego wyłączeniu listview nie zaskakuje ostatnio dodanych elementów...

BOOL CALLBACK ProceduraDialogNowaPraca(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{

	case WM_COMMAND:
		{
			unsigned id = LOWORD(wParam);
			unsigned kod = HIWORD(wParam);

			if(id == IDC_OK)
			{
				if(TRUE == DodajDaneDoStruktury(dPrace, liczbaElementowWStrukturze, hDlg, IDC_POLE_KOD, IDC_POLE_OPIS, IDC_POLE_STAWKA, IDC_POLE_JEDNOSTKA))
				{
					liczbaElementowWStrukturze++;
					EndDialog(hDlg, 0);
				}
				EndDialog(uchwytDialogPrace, 0);
				DialogBox(uchwytAplikacji, (LPCTSTR)IDD_DIALOG_PRACE, g_uchwytOkna, ProceduraDialogPrace);
			}

			if(id == IDC_ANULUJ)
				SendMessage(hDlg, WM_CLOSE, 0, 0);

		}return TRUE;

	case WM_CLOSE:
		{
			EndDialog(hDlg, 0);
		}return TRUE;
	
	}return FALSE;
}
0

ListView1->Refresh();

1 użytkowników online, w tym zalogowanych: 0, gości: 1