Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI DATE] Jak spisac z Dialog'u (DATETIMEPICK_CLASS) date do DATE lub SYSTEMTIME

Ostatnio zmodyfikowano 2013-04-19 09:11
Autor Wiadomość
berkov
Temat założony przez niniejszego użytkownika
[WinAPI DATE] Jak spisac z Dialog'u (DATETIMEPICK_CLASS) date do DATE lub SYSTEMTIME
» 2013-04-16 14:08:15
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:
C/C++
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):
C/C++
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 );

// dla przykladu tak bede wpisywal dane z dialogu do „fvt” dla pol typu LPSTR:
Control2LPSTR( FVT_rodzaj, fvt->inv_type );
//gdzie Control2LPSTR wyglada nastepujaco:
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
.
P-80643
berkov
Temat założony przez niniejszego użytkownika
» 2013-04-17 08:25:17
Hey ho.

Widze ze nikt nie ma pomyslu, w razie czego kazdy hint jest mile widziany.
Moze sprobuje zadac pytanie inaczej, poprostu
Jak dostac sie do wartosci w DTP w dialogu (DATETIMEPICK_CLASS)?
P-80709
berkov
Temat założony przez niniejszego użytkownika
» 2013-04-19 09:11:32
Dziala.

prostsze niz myslalem. Trzeba bylo tylko porzadnie przetrzepac MSDN.

C/C++
bool Control2Date( HWND control, SYSTEMTIME * target ) {
    SendMessage( control, DTM_GETSYSTEMTIME, 0,( LPARAM ) target );
    return true;
   
}

berkov.
P-80819
« 1 »
  Strona 1 z 1