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;
}