[WinAPI DATE] Jak spisac z Dialog'u (DATETIMEPICK_CLASS) date do DATE lub SYSTEMTIME
Witam,
Mam nastepujacy dialog (resources.rc):
LANGUAGE 0, SUBLANG_NEUTRAL
IDD_FVT DIALOGEX 0, 0, 319, 200
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Verdana"
{
PUSHBUTTON "Zapisz/Dalej", IDD_FVT_dalej, 176, 160, 60, 14, WS_TABSTOP
PUSHBUTTON "Anuluj", IDD_FVT_anuluj, 35, 160, 60, 14, WS_TABSTOP
DEFPUSHBUTTON "Zapisz", IDD_FVT_zapisz, 242, 160, 60, 14, WS_TABSTOP
LTEXT "Rodzaj", IDC_STATIC, 28, 28, 62, 8, SS_LEFT | WS_TABSTOP
LTEXT "Typ", IDC_STATIC, 28, 42, 62, 8, SS_LEFT | WS_TABSTOP
LTEXT "Numer", IDC_STATIC, 27, 56, 62, 8, SS_LEFT | WS_TABSTOP
LTEXT "Firma", IDC_STATIC, 27, 70, 62, 8, SS_LEFT | WS_TABSTOP
LTEXT "Data Wystawienia", IDC_STATIC, 153, 28, 62, 8, SS_LEFT | WS_TABSTOP
LTEXT "Termin Platnosci", IDC_STATIC, 152, 42, 62, 8, SS_LEFT | WS_TABSTOP
LTEXT "Netto", IDC_STATIC, 183, 75, 21, 8, SS_LEFT | WS_TABSTOP
LTEXT "Brutto", IDC_STATIC, 182, 87, 21, 8, SS_LEFT | WS_TABSTOP
LTEXT "Uwagi", IDC_STATIC, 52, 110, 21, 8, SS_LEFT | WS_TABSTOP
COMBOBOX IDC_FVT_rodzaj, 65, 28, 72, 14, CBS_DROPDOWN | CBS_HASSTRINGS | WS_TABSTOP
COMBOBOX IDC_FVT_typ, 65, 41, 72, 14, CBS_DROPDOWN | CBS_HASSTRINGS | WS_TABSTOP
EDITTEXT IDC_FVT_numer, 65, 54, 72, 14, ES_AUTOHSCROLL | WS_TABSTOP
COMBOBOX IDC_FVT_firma, 65, 68, 72, 14, CBS_DROPDOWN | CBS_HASSTRINGS | WS_TABSTOP
EDITTEXT IDC_FVT_netto, 214, 73, 55, 14, ES_AUTOHSCROLL | WS_TABSTOP
EDITTEXT IDC_FVT_brutto, 214, 87, 55, 14, ES_AUTOHSCROLL | WS_TABSTOP
EDITTEXT IDC_FVT_uwagi, 24, 123, 266, 25, ES_AUTOHSCROLL | WS_TABSTOP
LTEXT "Wprowadz dane dokumentu:", IDC_STATIC, 34, 7, 92, 8, SS_LEFT | WS_TABSTOP
CONTROL "", IDC_FVT_dwst, DATETIMEPICK_CLASS, WS_TABSTOP | DTS_RIGHTALIGN, 219, 25, 55, 13
CONTROL "", IDC_FVT_dpla, DATETIMEPICK_CLASS, WS_TABSTOP | DTS_RIGHTALIGN, 219, 39, 55, 13
}
Oraz klase o danej strukturze:
class INVOICES
{
public:
unsigned long inv_transcode;
DATE inv_enterdate;
LPSTR inv_type;
LPSTR inv_extnumber;
LPSTR inv_company;
DATE inv_issuedate;
DATE inv_paydate;
double inv_netval;
double inv_grosval;
DATE inv_payeddate;
LPSTR inv_comment;
unsigned long inv_fvt_key;
};
Chcialbym wypelnic klase „fvt” (INVOICES * fvt) danymi z dialogu (IDD_FVT).
Dane sa jak widac typu DATE lub LPSTR oraz double.
Tak wiec po wcisnieciu guzika „Zapisz” (IDD_FVT_zapisz,), wywolywany jest nestujacy kod („hwnd” – uchwyt do IDD_FVT dialogu):
INVOICES * fvt = new INVOICES;
ZeroMemory( fvt, sizeof( INVOICES ) );
HWND FVT_rodzaj = GetDlgItem( hwnd, IDC_FVT_rodzaj );
HWND FVT_typ = GetDlgItem( hwnd, IDC_FVT_typ );
HWND FVT_numer = GetDlgItem( hwnd, IDC_FVT_numer );
HWND FVT_firma = GetDlgItem( hwnd, IDC_FVT_firma );
HWND FVT_netto = GetDlgItem( hwnd, IDC_FVT_netto );
HWND FVT_brutto = GetDlgItem( hwnd, IDC_FVT_brutto );
HWND FVT_uwagi = GetDlgItem( hwnd, IDC_FVT_uwagi );
HWND FVT_dwst = GetDlgItem( hwnd, IDC_FVT_dwst );
HWND FVT_dpla = GetDlgItem( hwnd, IDC_FVT_dpla );
Control2LPSTR( FVT_rodzaj, fvt->inv_type );
bool Control2LPSTR( HWND control, char *& target ) {
DWORD dlugosc = GetWindowTextLength( control );
target = new char[ dlugosc + 1 ];
GetWindowText( control, target, dlugosc + 1 );
return true;
}
Utowrzylem rowniez funkcje Control2double ale nie potrafie sie nauczyc operacji na datach (/czasie)
Pytania wiec brzmia:
- Jak powinna wygladac funkcja “Control2Date” bym mogl spisac date wybrana na dialogu dzieki DATETIMEPICK_CLASS i zapisac ja w np fvt->inv_enterdate?
- Co to wogole jest to DATE bo nie znalazlem nic na googlu o tej klasie, za to znalazlem o TIMEFILE (czyli liczonym w nanosec od 1601 r) albo SYSTEMTIME (czyli to co moglo by mnie interesowac).
Wydaje mi sie ze powinienem w klasie INVOICES uzywac SYSTEMTIME bo pozniej z klasy bede musial wpisywac dane do Accessa przez COM (ADO) a Access ma tylko jeden typ dla daty - Date/Time (czyli razem z czasem).
Jak zwykle bede wdzieczny za pomoc, na internecie jest strasznie duzo materialow o SYSTEMTIME i TIMEFILE i o DATETIMEPICK’erze (zarwalem kilka nocy czytajac) ale nic co by konkretnie mozna uzyc w celu wypelnienia mojej klasy.
Z gory dzieki za czas!
berkov
.