08. 06. 2009. | #1 |
novi član
Datum učlanjenja: 08.06.2009
Poruke: 5
Hvala: 0
0 "Hvala" u 0 poruka
|
problem sa dijalozima u C++u
zdravo svima :]
prijatelj me je uputio na ovaj sajt, gde bih mogla naci odgovor ili pomoc nekog iskusnijeg sa C++em. problem je sledeci. uradila sam slicice da bih lakse objasnila, davacu koordinaciju. napravljen je dijalog, koji se sastoji iz jednog, da tak okazem, fiksnog dela (lista sa leve strane), i desnog dela na kom se nalazi "child" dijalog. (ne znam kako bih drukcije rekla na nasem jeziku) taj child dijalog je napravljen sam za sebe, i da bi bio u funkciji, mora se nakaciti na taj glavni, pomocu fje AttachChildDlg, koju smo mi pravili. u toj listi, stoje 4 stavke, i na kliktanje bilo koje, taj child dijalog se menja u zeljeni, pritom, se taj koji je bio prethodno, "otkaci" (fjom DetachChildDlg), a novi, izabrani, nakaci i radi na njemu. dakle tako to funckionise desava se sledece, gubitak dela dijaloga, kada se sa child dijaloga pozove sledeci dijalog, pa sa njega jos jedan, i vrati na taj pocetni. svi ovi dijalozi koje sad pominjem se "kace" na prethodni i prilikom izlaska sa njega, se "otkace". kad prodjem kroz gorepomenute fje, i one iz kojih ih zovem, dakle kompletno kroz taj deo koda - bude sve u redu. ne znam sta bih mogla da uradim..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". ilustracija: 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: eto tako..pa ako neko ima i najmanju ideju, molim da napise |
08. 06. 2009. | #2 |
novi član
Datum učlanjenja: 08.06.2009
Poruke: 5
Hvala: 0
0 "Hvala" u 0 poruka
|
ne vidim opciju da izmenim nesto u svojoj poruci, pa samo da naglasim ono sta sam zaboravila a veoma je bitno:
taj prvi child dijalog, u sebi sadrzi jos jedan child - to je ta izdeljena listica koja posle nestane tj bude tamna. dakle, child dijalog na child dijalogu, sa kog se poziva jedan dijalog, pa iz njega drugi, i onda vraca na pocetni. |
08. 06. 2009. | #3 |
dinosaurus
Master
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
|
Šta koristiš za te dijaloge? Borland? Ili MFC, Qt, nešto drugo?
|
08. 06. 2009. | #4 |
novi član
Datum učlanjenja: 08.06.2009
Poruke: 5
Hvala: 0
0 "Hvala" u 0 poruka
|
ups izvinjavam se, i to zaboravih reci.
visual studio 2005, c++ za dijaloge, da, MFC - Dialog editor, standardno sta opcije iz VS nude, dugmice, edit boxove, liste, picture control (to koristim upravo za child dijaloge) itd. (nadam se da sam dala odgvor na pitanje) |
09. 06. 2009. | #5 |
dinosaurus
Master
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
|
Mogu samo da nagađam ovako bez koda, ali da li ti je ta "nestajuća" list kontrola deklarisana kao lista u resource editoru ili se dodaje dinamički na dijalog?
Takođe, nije mi jasno čemu ta picture control ako ne prikazuješ slike. U stvari, kladim se da je taj "prazan" prostor koji se vidi kad zatvoriš dijaloge baš ta kontrola. |
09. 06. 2009. | #6 | |
novi član
Datum učlanjenja: 08.06.2009
Poruke: 5
Hvala: 0
0 "Hvala" u 0 poruka
|
Citat:
ta lista jeste list control na jednom child dijalogu, koji se jos negde drugde koristi, a taj sam child je istovremeno child od onog koji se nalazi na ovom parent dijalogu. -> vidi sliku sad, cemu taj picture control, on mi sluzi kao mesto na kom dolazi child dijalog. kako inace da osiguram gde, tj na kojoj poziciji u tom parentu, ce se zakaciti child? tako je radjeno pre u programu u nekim jednostavnijim slucajevima. nisam znala sta drugo da radim deo koda, koji bi ti mogao biti interesantan: mesto u glavnom dijalogu gde se radi spajanje dijaloga: Kôd:
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 Kôd:
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; } Kôd:
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; } Kôd:
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(); } |
|
09. 06. 2009. | #7 |
dinosaurus
Master
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
|
Pojma nemam
Šta kaže Spy++? Prati poruke koje stižu toj kontroli i vidi da li će da se pojavi nešto kao WM_DESTROY. |
12. 06. 2009. | #8 |
novi član
Datum učlanjenja: 08.06.2009
Poruke: 5
Hvala: 0
0 "Hvala" u 0 poruka
|
uopste se ne snalazim sa tim Spy++em
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/c...604/komp/a.jpg http://i213.photobucket.com/albums/c...604/komp/b.jpg i http://i213.photobucket.com/albums/c...604/komp/c.jpg http://i213.photobucket.com/albums/c...604/komp/d.jpg ni u jednom trenutku janemam potrebu da ubijam tu listu, zar ne? |
24. 10. 2009. | #9 |
Bez naziva
Certified
Datum učlanjenja: 22.12.2006
Lokacija: BG
Poruke: 61
Hvala: 1
0 "Hvala" u 0 poruka
|
Pa to zvuci kao problem sa iscrtavanjem.
Malo se teze snaci sa svim ovim sto si napisala pa samo nagadjam, probaj ovaj deo code-a izbaciti iz komentara: Kôd:
/*::InvalidateRect(listProperties.m_hWnd, NULL, TRUE); listProperties.UpdateWindow();*/ |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Double float problem - resen, ali ima dodatni problem :0 | ljtruba | (X)HTML, JavaScript, DHTML, XML, CSS | 34 | 23. 08. 2008. 03:28 |