Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

template CDialog

[es] :: C/C++ programiranje :: template CDialog

[ Pregleda: 2365 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MikeLDN
Marko Ivanovic
Beograd

Član broj: 61347
Poruke: 46
..AT.HighSpeedADSL.beotel.net.



Profil

icon template CDialog23.09.2006. u 12:46 - pre 214 meseci
Da li je moguce napraviti funkcionalnost:

template <typename T>
class CMyDialog: public CDialog
{
......
};
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: template CDialog23.09.2006. u 16:37 - pre 214 meseci
Ne vidim zasto nebi moglo.
 
Odgovor na temu

djalfirevic

Član broj: 76932
Poruke: 497
*.dynamic.sbb.co.yu.



Profil

icon Re: template CDialog23.09.2006. u 18:07 - pre 214 meseci
Apsolutno.
 
Odgovor na temu

MikeLDN
Marko Ivanovic
Beograd

Član broj: 61347
Poruke: 46
..AT.HighSpeedADSL.beotel.net.



Profil

icon Re: template CDialog24.09.2006. u 00:01 - pre 214 meseci
problem sa makroima BEGIN_MESSAGE_MAP

kako ih formulisati i gde staviti?
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.fibertel.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: template CDialog24.09.2006. u 00:44 - pre 214 meseci
Nece to tako moci. Microsoft je tako dizajnirao te MFC klase da je templatizacija prakticno neizvodiva ako se koriste message mape i sl.

Sta fali klasicnom nasledjivanju?


Tko leti vrijedi
 
Odgovor na temu

MikeLDN
Marko Ivanovic
Beograd

Član broj: 61347
Poruke: 46
..AT.HighSpeedADSL.beotel.net.



Profil

icon Re: template CDialog24.09.2006. u 09:17 - pre 214 meseci
imam ceo niz templatizovanih algoritama i treba da prosledim tip u dijalog, ili mozda neki factory?
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.fibertel.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: template CDialog24.09.2006. u 15:15 - pre 214 meseci
Ajde malo to bolje objasni sa nekim pseudo kodom. Sta tacno zelis da uradis?

Tko leti vrijedi
 
Odgovor na temu

MikeLDN
Marko Ivanovic
Beograd

Član broj: 61347
Poruke: 46
..AT.HighSpeedADSL.beotel.net.



Profil

icon Re: template CDialog24.09.2006. u 15:38 - pre 214 meseci
OK.

Dakle neka je dialog npr dijalog za proracun i prikaz rezultata nekakvih objekata.
Objekti su slicni i koriste zajednicke template f-je koje se staraju da urade obradu kako treba (gde je bilo potrebno uradjena je specijalizacija). Rezultat je da npr:

template <typename T>
void ProracunajNesto(T element) {...}

radi kako treba za ProracunajNesto<klasa1> i za ProracunajNesto<klasa2> ..itd.

Najintuitivnije bi bilo da u trenutku kad se kreira dijalog i kad znam za koj tip objekta je pozvan pozovem:

CMyDialog<klasa1> dlg; dlg.DoModal(); ali ovo ne moze zbog MFC makroa vezanih za CDialog.

Sledece sam probao sa Loki typelist-ama TYPELIST_n<klasa1,klasa2...>
i to radi ok ako ti treba instanca preko konstantnog indexa

ProracunajNesto<TYPELIST.TypeAt(1)>
(sintaksa za indexirani pristup je malo drugacija ali to je ideja...)
medjutim nece raditi sa promenljivim tipa

CMyDialog.n_indexTipaZaKojiJePozvanOvajDijalog

Izguglao sam neke varijante sa pravljenjem svog BEGIN_MESSAGE_MAP makroa
( http://www.codeguru.com/cpp/cp...c/templates/article.php/c4099/ ) ali to mi nesto ne mirise...

Any idea?
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.fibertel.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: template CDialog24.09.2006. u 19:17 - pre 214 meseci
Najbolje onda da imas neku vrstu template proxy klase iz koje ces puniti i pozivati dijalog. Nesto kao ovo:
Code:
#pragma once

///Najbolje je definisati te objekte da imaju neki abstraktni interfejs
class baseType {
public:
    baseType() {}
    virtual void TransferTo(CEdit &ctrl) {}
    virtual void TransferTo(CListBox &ctrl) {}
    ///Dodati druge po zelji
    virtual CString ToString(void) {return CString();}
};

class tip1 : public baseType {
public:
    tip1() {}
    virtual void TransferTo(CEdit &ctrl) {ctrl.SetWindowText(m_string);}
    virtual void TransferTo(CListBox &ctrl) {ctrl.AddString(m_string);}
    virtual void TransferTo(CListCtrl &ctrl) {///itd.}
    virtual CString ToString(void) {return m_string;}
    ///Dodaj ovde ostale metode specificne za klasu
private:
    CString m_string;
};

template <class T, class dialogType>
class proxyCaller {
public:
    proxyCaller()  {} 
    ~proxyCaller() {}
    int DoShowModal(void) {
        ///Ovde treba implementirati punjenje dijaloga
        ///Dakle sve kontrole treba da budu u DoDataExchange
        ///Sve klase (tip T) koje ces da koristis
        ///je pozeljno da imaju iste metode za transfer podataka
        ///u zeljenu kontrolu
        Proracunajnesto(obj1);
        ProracunajNesto(obj2);

        dialogType dlg;
        //vrednosti mozes da postavljas ovako
        dlg.m_editbox1.SetWindowText(obj1.ToString());
        dlg.m_editbox2.SetWindowText(obj2.ToString());
        ///ili ovako
        obj1.TransferTo(dlg.m_editbox1);
        obj2.TransferTo(dlg.m_editbox2);
        return dlg.DoModal();
    }
private:
    T obj1;
    T obj2;
};

class MyDialog : public CDialog {
public:
    MyDialog(CWnd* pParent = NULL): 
      CDialog(IDD_MYDIALOG, pParent) { }
      enum {IDD_MYDIALOG}
      CEdit m_editbox1;
      CEdit m_editbox2;
protected:
    virtual void DoDataExchange(CDataExchange* pDX){
        CDialog::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_EDIT1, m_editbox1);
        DDX_Control(pDX, IDC_EDIT1, m_editbox2);
    }
    DECLARE_MESSAGE_MAP()
};

Tko leti vrijedi
 
Odgovor na temu

MikeLDN
Marko Ivanovic
Beograd

Član broj: 61347
Poruke: 46
..AT.HighSpeedADSL.beotel.net.



Profil

icon Re: template CDialog24.09.2006. u 20:52 - pre 214 meseci
thnx,
mislim da ce moci tako, jedino sto cu sav dzumbus sa kontrolama spakovati u neki objekat pa cu njega da vozim kroz kod
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.hsd1.ma.comcast.net.



+6 Profil

icon Re: template CDialog24.09.2006. u 22:19 - pre 214 meseci
Pogledaj ovo:

http://www.lenholgate.com/archives/000554.html
 
Odgovor na temu

nikoladsp
nikola radovanovic
trenutno-developer
novi sad

Član broj: 5455
Poruke: 193
*.ns.ac.yu.



Profil

icon Re: template CDialog29.09.2006. u 08:21 - pre 213 meseci
dali bi ti odgovarao WTL?on se ponasa po svojoj prirodi kao sablon?moze i ATL, ali je WTL zgodan wrapper oko ATL i ima sve moje simpatije:brz je, jednostavan,kod je solidno brz,a nije zamuljan i bagovit kao MFC
ja sam panker sa diplomom kod moje mame...
 
Odgovor na temu

[es] :: C/C++ programiranje :: template CDialog

[ Pregleda: 2365 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.