[ cocteau @ 16.02.2009. 17:10 ] @
imam cudan problem, i pomoglo bi mi cak da me mozda neko uputi na to kako da posmatram problem, ili gde jos da gledam.

dijalog je sastavljen iz liste (sa leve strane) i prostora na koji se dodaju child dijalozi (desna strana) (koji postoje sami za sebe), i to 4 od njih, u zavisnosti sta je kliknuto na listu

ovo je kako izgleda kad se otvori (dakle 'zalepljen' je 1. (child) dijalog):



i tako, zelim otici na poslednju opciju u listi (tj 4. tj to je 4. (child) dijalog) "Cables", i kad kliknem, dobijem sledece:



kada kliknem na 2. i 3. opciju sa liste, sve izgleda normalno, i to su obicni mali child dijalozi. Medjutim, ovaj poslednji je malo zeznut, jer on sam kao child, sadrzi jos jedan child u sebi, a taj opet, sadrzi child. to je zato sto se ti ostali childovi koriste za jos neke svrhe, i mora tako, da ne objasnjavam sad detalje.

i fora je, da, kad ja recimo odatle, kliknem da neki drugi otvoren prozor na kompu, lupam Firefox ili TCommander ili bilo sta drugo sta mi je trenutno otvoreno, i vratim se na moj dijalog, on izgleda..normalno:



i tako, to izgleda prilicno bezveze, ali radi. dakle sve sta tu zelim da radim (dodajem i editujem neke kablove) radi kako treba.

takodje, kad se vratim na onaj prvi dijalog, on izgleda maaalko drukcije (u donjemu uglu primeticete neku sivu boju):



i taj child dijalog takodje u sebi sadrzi child (samo je ovde "dubina" 1 a kod onog iznad, je 2)

bilo kakva ideja bi dobrodosla; mucim se ceo dan sa tim, gledala sam tekstove na Codeguru sajtu i tako malo cackala po netu, ali nista slicno nisam pronasla.

[ X Files @ 16.02.2009. 18:03 ] @
A šta je pitanje? Zašto se dogadjaju ti vizuelni efekti ili...?

Imaš li source code (ako imaš, u čemu je rađen kod), ili te zanima samo sa stanovišta korisnika?
[ cocteau @ 17.02.2009. 09:43 ] @
da, pitanje je zasto to tako..glupo..izgleda (a pritom radi). i naravno - zelim da resim to, jer znam da se korisnicima programa to nece svideti, vec su dovoljno razmazeni :D
kod smo radile koleginica i ja - tj postojao je stari dijalog, takodje funkcionalan, a onda sam ja menjala i dodala nesto, i napravila ovaj novi izgled kao sa slicica; u Microsoft Visual Studio 2005 C++
, pa evo, recimo taj 4. dijalog koji ima taj sivi pravougaonik preko, OnInit fja:

Code:
#include "stdafx.h"
#include "FdevEditCableDlg.h"
#include "ObjectMgrCommon.h"
#include "ObjectManagerDlg.h"
#include "CableEditDlg.h"
#include "CableDataEditDlg.h"
#include "Cable.h"
#include "TechInfoLabel.h"



// CFdevEditCableDlg dialog

IMPLEMENT_DYNAMIC(CFdevEditCableDlg, CTricDialog)

CFdevEditCableDlg::CFdevEditCableDlg(CWnd* pParent /*=NULL*/)
    : CTricDialog(CFdevEditCableDlg::IDD, pParent)
    , m_strMountLocation(_T(""))
    , m_bDeviceLabel(FALSE)
{
    bDlgCableActive = FALSE;
    nTechCount = 0;
    nCabCount = 0;
}
//--------------------------------------------------------------------------------------------------
CFdevEditCableDlg::~CFdevEditCableDlg()
{
}
//--------------------------------------------------------------------------------------------------
void CFdevEditCableDlg::DoDataExchange(CDataExchange* pDX)
{
    CTricDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_FDEV_EDIT_CABLE_CHILD, m_FdevCableChild);
    DDX_Text   (pDX, IDC_EDIT_MOUNT_LOCATION,   m_strMountLocation);
    DDX_Check  (pDX, IDC_CHECK_DEVLABEL,        m_bDeviceLabel);
    DDX_Control(pDX, IDC_CABLECLASS_CBO,        cboCableClass);

//--------------------------------------------------------------------------------------------------
BEGIN_MESSAGE_MAP(CFdevEditCableDlg, CTricDialog)
    ON_BN_CLICKED(IDC_CHECK_DEVLABEL, &CFdevEditCableDlg::OnBnClickedCheckDeviceLabel)
    ON_CBN_SELCHANGE  (IDC_CABLECLASS_CBO,   OnCbnSelchangeCableclassCbo)
END_MESSAGE_MAP()

//--------------------------------------------------------------------------------------------------
BOOL CFdevEditCableDlg::OnInitDialog()
{
        CTricDialog::OnInitDialog ();
    bDlgCableActive = TRUE;

    m_strMountLocation = DwgBlock.data.strMountingLocation;
    m_bDeviceLabel     = DwgBlock.data.iCreateLabel;

    SelectCableClass (DwgBlock.data.iCableClass);
    if (! FillComboCableClasses()) {
        return FALSE;
    }

    dlgCable.dlgList.bIsChild = TRUE;
    DetachChildDialog (&dlgCable, &m_FdevCableChild);
    
    CDBObjArray<CBlockDevDataCable> arrCablesDataArray;
    editor.mode         = DWG_BLOCK;
    editor.strTableName = _T("PDBT_DevDataCable");
    arrCablesDataArray.RemoveAll ();
    dlgCable.SetObjectEditor (&editor);

    for (nTechCount = 0; nTechCount < DwgBlock.arrBlockInDrawingTechInfo.GetCount(); nTechCount++) {
        if (DwgBlock.arrBlockInDrawingTechInfo [nTechCount].arrAllCableData.GetCount() > 0) {
            arrCablesDataArray = DwgBlock.arrBlockInDrawingTechInfo[nTechCount].arrAllCableData;
            editor.pCableData->data.iDD_ID = DwgBlock.arrBlockInDrawingTechInfo[nTechCount].data.iDD_ID;
            break;
        }
    }
    /* won't be needed in this case, because user can add new cable if there is none 
    if (arrCablesDataArray.GetSize () == 0){
        TricMessageBox (GetString (IDS_WARN_NOCABLES));
        //sds_redraw (DwgBlock.GetHandle (), 4);
        return FALSE;
    }
    */
    dlgCable.ClearObjects();
    for (nCabCount = 0; nCabCount < arrCablesDataArray.GetSize (); nCabCount++) {
        dlgCable.AddObject (new CBlockDevDataCable (arrCablesDataArray [nCabCount]));
    }
    if (! (AttachChildDialog (&dlgCable, &m_FdevCableChild))) {
        TricErrorBox (IDS_ERR_FILL_DIALOG);
        EndDialog (IDCANCEL);
        return FALSE;
    }
    
    UpdateData(FALSE);
    
    return TRUE;
}


a ovo je deo glavnog dijaloga,
u OnInit fji te klase se puni lista, i postavlja sta treba.

Code:
BOOL CDwgBlockDlg::OnInitDialog ()
{
    //CWaitCursor cur;
    CTricDialog::OnInitDialog ();

    if (!DBConnection.CheckConnection ()) {
        TricErrorBox (IDS_ERR_CONECTION);
        EndDialog (IDCANCEL);
        return FALSE;
    }

    //list menu
        listFdevEdit.SetExtendedStyle (LVS_EX_FULLROWSELECT);
       listFdevEdit.InsertColumn (0, STR_NULL);

    if (!FillList() && !bFirstCall) {
        EndDialog (IDCANCEL);
        return FALSE;
    }

...



ovde sam stavila deo koda koji se tice kliktanja na tu listu sa leve strane,


Code:
BOOL CDwgBlockDlg::OnListSelection()
{
    // Get list items count
    int count = listFdevEdit.GetItemCount ();
    int Index = 0;
    
    for (int i = 0; i < count; i++) {
        if (listFdevEdit.GetItemState (i, LVIS_SELECTED) == LVIS_SELECTED) {
            // Get index of currently selected project
            Index = i;
            break;
        }
    }

        switch (Index) {
                case 0:
                        dlgInfolist.pCurrDrawing = pCurrDrawing;
                        dlgInfolist.DwgBlock = DwgBlock;
                        dlgInfolist.vdi = vdi;
                        dlgInfolist.IsDDC = IsDDC;
                        DetachChildDialog (&dlgInfolist, &m_FdevEditChild);
                        if (! (AttachChildDialog (&dlgInfolist, &m_FdevEditChild))) {
                                TricErrorBox(IDS_ERR_FILL_DIALOG);
                                return FALSE;
                                //EndDialog (IDCANCEL);
                        }
                                                
                        //dlgInfolist.FillDlgCtrl();
                        dlgInfolist.ShowWindow(TRUE);
                        break;
                    case 1:
                        
                        dlgDesc.DwgBlock = DwgBlock;
                        DetachChildDialog (&dlgDesc, &m_FdevEditChild);
                        if (! (AttachChildDialog (&dlgDesc, &m_FdevEditChild))) {
                                TricErrorBox (IDS_ERR_FILL_DIALOG);
                                return FALSE;
                                //EndDialog (IDCANCEL);
                        }              
                        //dlgDesc.FillCtrls();
                        dlgDesc.ShowWindow(TRUE);
                        break;
                    case 2:
                        
                        dlgProdSearch.bEditTechInfo = bEditTechInfo;
                        dlgProdSearch.DwgBlock = DwgBlock;
                        DetachChildDialog (&dlgProdSearch, &m_FdevEditChild);
                        
                        if (! (AttachChildDialog (&dlgProdSearch, &m_FdevEditChild))) {
                                TricErrorBox (IDS_ERR_FILL_DIALOG);
                                return FALSE;
                                //EndDialog (IDCANCEL);
                        }

                        //dlgProdSearch.FillCtrls();
                        dlgProdSearch.ShowWindow(TRUE);
                        break;
                    case 3:
                        
                        dlgCable.DwgBlock = DwgBlock;
                        DetachChildDialog (&dlgCable, &m_FdevEditChild);
                        if (! (AttachChildDialog (&dlgCable, &m_FdevEditChild))) {
                                TricErrorBox (IDS_ERR_FILL_DIALOG);
                                return FALSE;
                                //EndDialog (IDCANCEL);
                        }  
                        //dlgCable.FillComboCableClasses();
                        dlgCable.ShowWindow(TRUE);
                        break; 
                        
            } //end of switch
        
            GlobalIndex = Index;
            return true;
}


nadam se da ces moci da se snadjes. fakticki nema tu nesto u kodu sto se tice izgleda puno, kao sto vidis, vec su stvari koje se rade.
ako pogledas ovaj case 3, tu se prvo radi Detach dijaloga pa onda Attach, znam da izgleda malo cudno i zbunjivo, ali se kroz to radi ubijanje prethodno zakacenog dijaloga (koji moze biti bilo koji od ta 4) i onda se kaci taj koji treba. te fje smo pisali mi
[ deerbeer @ 17.02.2009. 11:17 ] @
Probaj u u debug-u sa funkcijom EnumChildWindows
http://msdn.microsoft.com/en-us/library/ms633494(VS.85).aspx
da enumerises sve prozore i child kontrole na jednom tabu tj. jedna stavka liste
Da proveravas pri svakom sledecem prelasku na drugu selekciju CDBObjArray niza kojeg si paremetrizovala .
i na osnovu te liste da ispitujes stanje prozora sa ASSERT(IsWindow())
Mozda je ti ostao neki child prozor koji nije unisten propisno sa DestroyWindow kao onaj zasivljeni pravougaonik
na dialogu koji je bio selektovan pre Cable stavke ili mozda ne hendlujes dobro neke OnPant metode tih child kontrola (ako ih imas)
na Cable -tabu.
Postavi breakpointe u odredjene destruktore ili hendlera za WM_DESTROY poruke (OnDestroy event)
ili iteratore od CDBObjArray kada se kreiraju ili unistavaju prozori i debaguj , pa vidi sta se desava .










[ cocteau @ 17.02.2009. 15:51 ] @
hvala, sad cu da vidim nesto sa tim EnumChildWindows
i ja sam mislila da mi je mozda ostao neki prozorcic neunisten, ali nemam nista sto je tog izlgeda/oblika (ili mozda nema veze?)

a ovo
Citat:
mozda ne hendlujes dobro neke OnPant metode tih child kontrola (ako ih imas)
na Cable -tabu.

na sta tacno mislis? u glavnom dijalogu imam fju gde "sakupljam" izmene za childova, pozivajuci neke fje iz tih childova.
[ cocteau @ 24.04.2009. 21:37 ] @
ovo je ostalo "pogledati posle novih/hitnih zadataka" kojih je bilo zaista puno, tako da sam skoro resila stvar (donekle) i zaboravila da napisem ovde.
da kazem samo u cemu je bila stvar, mozda nekom u buducnosti pomogne - citava zbrka je bila zbog samih osobina child dijaloga, konkretno jedne stavke "Visible", koja mi je dotle stajala na TRUE (sto je kranje logicno) a onda se ispostavilo da mora btii FALSE da bi to islo kako treba (dakle normalno lep dijalog bez ovog entiteta na sredini.

hvala jos jednom na ponudjenoj pomoci
[ cocteau @ 08.06.2009. 18:29 ] @
zdravo, opet ja. sa slicnim problemom, cak u istom delu dijaloga.
kao sto sam napisala u poruci iznad, problem sa pocetka ove teme je resen


taj prvi child dijalog, u sebi sadrzi jos jedan child - to je ta izdeljena listica koju vidite na prvoj slici, sa nekim podacima.
sad se desava "samo" sledece - gubitak dela dijaloga (tj tog childa unutar childa), kada se sa child dijaloga pozove sledeci dijalog, pa sa njega jos jedan, i vrati na taj pocetni. uradila sam slicice, da bude jasnije. svi ti dijalozi se "kace" na prethodni (imam fju AttachChildDlg) i prilikom izlaska sa njega, se "otkace" (fjom DetachChildDlg). kad prodjem kroz te fje - bude sve u redu. postavicu i delove koda ako neko ima ideje sta bi jos moglo biti..mozda je nesto u samim properties od dijaloga, ali nema sta nisam probala.

glavni dijalog, na kom je sa leve meni u vidu liste, a sa desne strane je taj child, "nakacen".



kad se kline na zaokruzeno, otvori se sledeci dijalog



i onda se opet markira nesto, i otvori i poslednji dijalog



vratim se kroz OK do prethodnog, pa opet OK do prvog i:







[Ovu poruku je menjao cocteau dana 08.06.2009. u 19:45 GMT+1]

[Ovu poruku je menjao cocteau dana 08.06.2009. u 20:26 GMT+1]
[ deerbeer @ 09.06.2009. 09:28 ] @
Meni nije jasno zasto ne koristis DoModal () od CDialog klase umesto ovih Attach Detach f-ja .
Code:

case 0:

  dlgInfolist.pCurrDrawing = pCurrDrawing;
  dlgInfolist.DwgBlock = DwgBlock;
  dlgInfolist.vdi = vdi;
  dlgInfolist.IsDDC = IsDDC;

//   DetachChildDialog (&dlgInfolist, &m_FdevEditChild);
//    if (! (AttachChildDialog (&dlgInfolist, &m_FdevEditChild))) {
   dlgInfolist.DoModal() ;



U konstruktoru svakog dijaloga imas parametar koji ce prozor da mu bude "parent"
Npr.
Code:
 
   //CFdevEditCableDlg::CFdevEditCableDlg(CWnd* pParent /*=NULL*/)
   
   CFdevEditCableDlg dlg(this) ; //this je pointer na tekuci prozor 
   dlg.DoModal() ; 



Ili imas potrebu da se otvaraju vise tih child dijaloga istovremeno ?

[ cocteau @ 09.06.2009. 17:46 ] @
Citat:
deerbeer: Meni nije jasno zasto ne koristis DoModal () od CDialog klase umesto ovih Attach Detach f-ja .
Code:

case 0:

  dlgInfolist.pCurrDrawing = pCurrDrawing;
  dlgInfolist.DwgBlock = DwgBlock;
  dlgInfolist.vdi = vdi;
  dlgInfolist.IsDDC = IsDDC;

//   DetachChildDialog (&dlgInfolist, &m_FdevEditChild);
//    if (! (AttachChildDialog (&dlgInfolist, &m_FdevEditChild))) {
   dlgInfolist.DoModal() ;



U konstruktoru svakog dijaloga imas parametar koji ce prozor da mu bude "parent"
Npr.
Code:
 
   //CFdevEditCableDlg::CFdevEditCableDlg(CWnd* pParent /*=NULL*/)
   
   CFdevEditCableDlg dlg(this) ; //this je pointer na tekuci prozor 
   dlg.DoModal() ; 



Ili imas potrebu da se otvaraju vise tih child dijaloga istovremeno ?


radili smo tako, sa attach/detach jer je to mesto gde je child u stvari picture control - da bismo mogli da naznacimo gde treba da bude taj child. tako je radjeno u programu u nekim drugim obicnim dijalozima, a i ne znam kako bih drukcije smestila taj child na odredjeno mesto? imas li ti ideju?

ovo
Code:
 
   //CFdevEditCableDlg::CFdevEditCableDlg(CWnd* pParent /*=NULL*/)
   
   CFdevEditCableDlg dlg(this) ; //this je pointer na tekuci prozor 
   dlg.DoModal() ; 


prijavljuje gresku, sto mi nije jasno zasto bi, kad je to - this.

znam za DoModal naravno (malo modifikovan smo mi napravili), to koristim obicno kad imam dijalog sa kog, pozovem neki drugi (kao sto je ovde slucaj na 2. i 3. slicici)

takodje, zaboravila sam da spomenem, da u stvari, to sta nestane sa childa unutar childa je lista na tom ugnjezdenom childu, a ne ceo on

[ deerbeer @ 10.06.2009. 08:33 ] @
Citat:

prijavljuje gresku, sto mi nije jasno zasto bi, kad je to - this.
..
malo modifikovan smo mi napravili),

Proveri ovo .. nemoj zaobilaziti tako standardne stvari koje bi trebale 100% da rade .

Citat:

takodje, zaboravila sam da spomenem, da u stvari, to sta nestane sa childa unutar childa je lista na tom ugnjezdenom childu, a ne ceo on

Verovatno si pri nekom DetachChildDialog ubila ilistview kontrolu .
Ovo je samo odokativno sto ti pricam na osnovu slicica i malko koda ,
moraces da ukljucis trace i debug i da vidis sta se desava ..

[ cocteau @ 12.06.2009. 16:12 ] @
tacno smo utvrdili da je problem u toj listi, jer npr ako pomerimo malo te pozvane dijaloge, tako da ne zaklanjaju listu, i vratimo se sa OK, bude dobro. ako ostanu delimicno preko - samo zaklonjen deo liste bude taman.

evo primera
http://i213.photobucket.com/albums/cc181/ves604/komp/a.jpg
http://i213.photobucket.com/albums/cc181/ves604/komp/b.jpg
i
http://i213.photobucket.com/albums/cc181/ves604/komp/c.jpg
http://i213.photobucket.com/albums/cc181/ves604/komp/d.jpg

e sad, ni u jednom trenutku janemam potrebu da ubijam tu listu, zar ne? niti ubijam taj dijalog an kom je lista



deo koda, koji bi ti mogao biti interesantan:
mesto u glavnom dijalogu gde se radi spajanje dijaloga:

Code:
case 0:
    dlgInfolist.pCurrDrawing = pCurrDrawing;
    dlgInfolist.pDwgBlock = pDwgBlock;
    dlgInfolist.vdi = vdi;
    dlgInfolist.IsDDC = IsDDC;
    if (pdialog) {
        DetachChildDialog (pdialog);
    }
    if (! (AttachChildDialog (&dlgInfolist, &m_FdevEditChild))) {
         TricErrorBox(IDS_ERR_FILL_DIALOG);
        return FALSE;
         //EndDialog (IDCANCEL);
    } else {
            pdialog = &dlgInfolist;
            }

    //dlgInfolist.FillDlgCtrl();
    dlgInfolist.ShowWindow(TRUE);
    break;



u tom prvom child dijalogu, OnInit fja

Code:
BOOL CFdevEditInfolist::OnInitDialog()
{
    CTricDialog::OnInitDialog ();
    bDlgInfolistActive = TRUE;

    dlgDDC_RA.bCheckAutoCalc = pDwgBlock->data.iGE_Status;
    //DetachChildDialog (&dlgDDC_RA, &m_DDC_RA);
        //if (! (AttachChildDialog (&dlgDDC_RA, &m_DDC_RA) && LoadData () && FillDlgCtrl ())) {

    if (GetProject ()->cInfoCalc.GetProInfoCalcData (GetProject ()->ID)) {
        if (GetProject ()->cInfoCalc.arrProjectInfoCalc.GetCount () > 0) {
            dlgDDC_RA.bAutoCalc = TRUE;
        }
    }

    if (! (AttachChildDialog (&dlgDDC_RA, &m_DDC_RA) && LoadData () )) {
        TricErrorBox (IDS_ERR_FILL_DIALOG);
        EndDialog (IDCANCEL);
        return FALSE;
    }
    

    FillDlgCtrl();

    return TRUE;
}


OnInit drugog child dijaloga na kom je ta lista

Code:
BOOL CFieldDevicePropsDlg::OnInitDialog ()
{
    CTricDialog::OnInitDialog ();

    if (!DBConnection.CheckConnection ()) {
        TricErrorBox (IDS_ERR_CONECTION);
        EndDialog (IDCANCEL);
        return FALSE;
    }

    ((CButton*) GetDlgItem (IDC_BTN_VISIBLE))->ShowWindow (bShowVisibleColumn);

    listProperties.SetExtendedStyle (LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

    if (bShowVisibleColumn) {
        m_staticImageList.Create (16, 16, ILC_MASK, 0, 1);
        m_staticImageList.Add (acedGetAcadWinApp ()->LoadIcon (IDI_OFF));
        m_staticImageList.Add (acedGetAcadWinApp ()->LoadIcon (IDI_ON));

        listProperties.SetImageList (&m_staticImageList, LVSIL_SMALL);
    }

    AddControl (IDC_TEXT_CAPTION,         sizeResize, sizeNone);
    AddControl (IDC_LIST_PROPERTIES,      sizeResize, sizeResize, TRUE,TRUE);
    AddControl (IDC_CHK_USEFUNCTIONTYPES, sizeResize, sizeRepos, TRUE, TRUE);
    AddControl (IDC_CHK_USEAUTOCALC,      sizeResize, sizeRepos, TRUE, TRUE);
    AddControl (IDC_BTN_EDIT,             sizeNone,   sizeRepos, FALSE);
    if (bShowVisibleColumn) {
        AddControl (IDC_BTN_VISIBLE,      sizeNone,   sizeRepos, FALSE);
    }
    AddControl (IDC_BTN_SELECTALL,        sizeRepos,  sizeRepos, FALSE);
    AddControl (IDC_BTN_DELESECTALL,      sizeRepos,  sizeRepos, FALSE);

    DisableControls ();
    return TRUE;
}  


kada se klikne na ono dugme Edit u tom dijalogu:

Code:
void CFieldDevicePropsDlg::OnEdit ()
{
    UpdateData ();

    // first find out which props are selected
    int iCount = listProperties.GetItemCount ();
    CTricArray<CFieldDeviceProps*> arrSelected;

    int i;
    for (i = 0; i < iCount; i++) {
        if (listProperties.GetItemState (i, LVIS_SELECTED) == LVIS_SELECTED) {
            arrSelected.Add (&arrProps [i]);
        }
    }

    // then edit all of them
    for (i = 0; i < arrSelected.GetSize (); i++) {
        // This runs the dialog "CDPFunctionSelectDlg()"
        SetNumberOfFunctions (*arrSelected [i]/*, _wtoi (strCont) */);
        if (arrSelected [i]->GetNumberOfFunctions () > 0) {
            arrSelected [i]->SetVisible (1);
        }
    }
    /*::InvalidateRect(listProperties.m_hWnd, NULL, TRUE);
    listProperties.UpdateWindow();*/
    
    FillList ();
    listProperties.SetFocus();
}  
[/QUOTE]

u fji SetNumberOfFunctions iz ove OnEdit se poziva prvi sledeci dijalog:



Code:
BOOL CFieldDevicePropsDlg::SetNumberOfFunctions (CFieldDeviceProps& property/*, int iNumberOfFunctions*/)
{
    CDBObjArray<CDPFunction>  arrFunctionsEmpty;
    if (property.GetCalculate()) {
        // We cannot change calculated values!
        return TRUE;
    }

    //the column has functions and are used
    if (property.GetVDICol ()->bHasFunctions && bUseFunctioncodes) {
        // function codes are used, get available functions for this property
        int iPropertyColID = property.GetVDICol ()->data.iVDI_Col_ID;

        // let user choose functions for the property
        CDPFunctionSelectDlg dlg;
        dlg.mode = mode;
        dlg.bReadonly = bReadonly;
        dlg.mode = mode;
        dlg.SetGroup     (group);
        dlg.SetColumn    (*property.GetVDICol ());
        if (!property.GetVisible()){
            property.SetFunctions(arrFunctionsEmpty);
        }
        dlg.SetFunctions (property.GetFunctions ());
        //dlg.SetNumberOfFunctions (iNumberOfFunctions);

        if (dlg.DoModal () != IDOK) {
            // user cancelled selection
            return FALSE;
        }

        // user has made selection
        property.SetNumberOfFunctions (dlg.GetNumberOfFunctions ());
        property.SetFunctions (dlg.GetFunctions ());
        //listProperties.Invalidate();
        
        return TRUE;
    }
    

    if (bReadonly) {
        return TRUE;
    }

    // get number of functions from user
    CString strCont = StringFromLong (property.GetNumberOfFunctions ());
    if (!UserInput (strCont,  GetString (IDS_LABEL_ENTERNOOFFUNCTIONS),
                      property.GetVDICol ()->data.strVDI_ColDesc
                    + _T(" ")
                    + property.GetVDICol ()->data.strVDI_ColShortDesc)) {

        return FALSE;
    }

    int iNumberOfFunctions = _wtoi (strCont);

    if (!property.GetVDICol ()->bHasFunctions) {
        // this column doesn't have functions
        property.SetNumberOfFunctions (iNumberOfFunctions);
        return TRUE;
    }

    // this column has functions but didn't use
    if (!bUseFunctioncodes) {
        // function codes are not used
        CDPFunction funcDefault;
        int iPropertyColID;

        iPropertyColID = property.GetVDICol ()->data.iVDI_Col_ID;
        funcDefault.data.iDPFun_ID = group.GetDefaultFunctionID (iPropertyColID);

        if (!funcDefault.Load ()) {
            // default function for this property not found!
            return FALSE;
        }

        // adjust functions
        CDBObjArray<CDPFunction> arrFunctions;
        while (arrFunctions.GetSize () < iNumberOfFunctions) {
            arrFunctions.Add (funcDefault);
        }

        // update property
        if (!property.SetFunctions (arrFunctions)) {
            return FALSE;
        }

        if (!property.SetNumberOfFunctions (iNumberOfFunctions)) {
            return FALSE;
        }

        return TRUE;
    }
    return FALSE;
}   // CFieldDevicePropsDlg::SetNumberOfFunctions


a kroz
Code:
if (dlg.DoModal () != IDOK) {
            // user cancelled selection
            return FALSE;

se poziva onaj poslednji dijalog..

verovatno sam ugusila sad sa ovim kodom :( postajemo bas ocajne nas dve

ostavila sam poruku na jos par foruma, na jednom nasem i na stranskim, codeguru, bilo je nekih ideja ali za ipak drukciji problem.
neko mi je rekao da probamo da sa Spy++ nadjemo sta se desava, ali se sa njim ne snalazimo tako dobro, i na kraju kad je koleginica shvatila sta se tu desava, opet nam je sam ponovilo to da je problem u listi, sto smo i same pronasle pre.
[ deerbeer @ 15.06.2009. 09:18 ] @
Citat:

tacno smo utvrdili da je problem u toj listi, jer npr ako pomerimo malo te pozvane dijaloge, tako da ne zaklanjaju listu, i vratimo se sa OK, bude dobro. ako ostanu delimicno preko - samo zaklonjen deo liste bude taman.

To sto se prikaze deo liste na ekranu polovicno .. ili se ceo ne prikaze ne mora da znaci da je prozor "ziv"
Sam prozor ili listview automatski dobije poruku WM_PAINT za njegovo ponovno osvezavanje kad se zatvori njegov child dijalog .
Veoma prosto resenje je da otkrijes da li je ziv je da pozoves na odredjenim mestima sa
ASSERT(::IsWindow(listProperties.m_hWnd)) za Listview kontrolu u debug rezimu, ili kada se prvi otvoreni dijalog zatvara.

Zasto si komentarisala ovaj kod na nekim mestima ?
Jel nema efekta ili assertuje debuger na Invalidate ili UpdateWindow ?
Code:
 
/*::InvalidateRect(listProperties.m_hWnd, NULL, TRUE);
    listProperties.UpdateWindow();*/

  //listProperties.Invalidate();



Druga metoda sa spomenutim Spy++ -om je da uhvatis handle od prozora sa f-jom
Code:

HWND hWnd = m_listProperties.GetSafeHwnd() ; 

dok program trci u debug-u pa iskopiraj tu vrednost iz Watch prozora
pa sa tim handlom u search dijalogu da ga pronadjes u listi prozora od Spy++



Postavis breakpointe na sumnjivim mestima stepujes kroz kod sa f5
i pratis stanje listview kontrole.



[ cocteau @ 21.07.2009. 14:18 ] @
resila sam problem, bilo je nesto zaista glupo u pitanju: ta picture control koja mi je sluzila da smestim child dlg na parent, je po defaultu stavljena kao "visible" u properties, te je palo na pamet da upravo to remeti funkcionisanje, i kako sam promenila na "not visible" - svi problemi su nestali.

u svakom slucaju, hvala na ponudjenoj pomoci. :)