PDA

View Full Version : [Visual C++] Finestra di dialogo laterale


Francoo
22-01-2007, 10:57
Salve a tutti..
sto sviluppando un'applicazione con visual C++ 2005, un progetto SDI.
Mi servirebbe di visualizzare una finestra di dialogo (tipo un pannello laterale) solo quando seleziono uno voce di menu. Mi spiego meglio... ho una vista.. quando seleziono la voce di Menu : "visuaizza dialogo", sulla sinistra mi appare la finestra di dialogo e la vista si ristringe.

Ho provato derivando la classe della finestra di dialogo da CDialog... Faccio partire la finestra in modo non modale (creata con attributo Child) e l'attacco alla finestra..
Il problema č che riesco a ridimensionarela finestra di vista.. ma se ridimensiono la finestra non si vede pių la finestra di dialogo e la finestra di vista torna a tutto schermo..
In pratica la finestra di dialogo resta sotto quella di vista...

Ecco il codice per richiamare la finestra:


int m_DialogID=IDD_ALLINEA_DLG;
m_Dialog=new CAllineaDlg();
m_Dialog->Create(m_DialogID,0);

CRect l_rectWnd;
CRect l_rectClient;
CSize sizeChange;

this->GetWindowRect(&l_rectClient);
m_Dialog->GetWindowRect(&l_rectWnd);
ScreenToClient(&l_rectWnd);
ScreenToClient(&l_rectClient);

//dimensioni da modificare
sizeChange.cy = l_rectClient.Height();
l_rectWnd.bottom = sizeChange.cy;
sizeChange.cx = l_rectWnd.Width();
l_rectClient.left += sizeChange.cx;

l_rectWnd.top += 82;
l_rectWnd.bottom += 37;
l_rectClient.top += 41;
l_rectClient.bottom += 40;

////aggiorno la finestra di dialogo
m_Dialog->MoveWindow(&l_rectWnd);
m_Dialog->ShowWindow(SW_SHOW);


////aggiorno la finestra di vista
this->MoveWindow(&l_rectClient);
this->ShowWindow(SW_SHOW);
this->RedrawWindow();


Dovrei aggiungere qualcosa nel metodo OnSize??
Oppure per fare una cosa del genere dovrei derivare la classe della finestra da CFormView e fare con splitterWindow?
Non si puo fare in questo modo? :mc: :mc:

Grazie in anticipo...

vizzz
22-01-2007, 13:18
Salve a tutti..
sto sviluppando un'applicazione con visual C++ 2005, un progetto SDI.
Mi servirebbe di visualizzare una finestra di dialogo (tipo un pannello laterale) solo quando seleziono uno voce di menu. Mi spiego meglio... ho una vista.. quando seleziono la voce di Menu : "visuaizza dialogo", sulla sinistra mi appare la finestra di dialogo e la vista si ristringe.

Ho provato derivando la classe della finestra di dialogo da CDialog... Faccio partire la finestra in modo non modale (creata con attributo Child) e l'attacco alla finestra..
Il problema č che riesco a ridimensionarela finestra di vista.. ma se ridimensiono la finestra non si vede pių la finestra di dialogo e la finestra di vista torna a tutto schermo..
In pratica la finestra di dialogo resta sotto quella di vista...

Ecco il codice per richiamare la finestra:


int m_DialogID=IDD_ALLINEA_DLG;
m_Dialog=new CAllineaDlg();
m_Dialog->Create(m_DialogID,0);

CRect l_rectWnd;
CRect l_rectClient;
CSize sizeChange;

this->GetWindowRect(&l_rectClient);
m_Dialog->GetWindowRect(&l_rectWnd);
ScreenToClient(&l_rectWnd);
ScreenToClient(&l_rectClient);

//dimensioni da modificare
sizeChange.cy = l_rectClient.Height();
l_rectWnd.bottom = sizeChange.cy;
sizeChange.cx = l_rectWnd.Width();
l_rectClient.left += sizeChange.cx;

l_rectWnd.top += 82;
l_rectWnd.bottom += 37;
l_rectClient.top += 41;
l_rectClient.bottom += 40;

////aggiorno la finestra di dialogo
m_Dialog->MoveWindow(&l_rectWnd);
m_Dialog->ShowWindow(SW_SHOW);


////aggiorno la finestra di vista
this->MoveWindow(&l_rectClient);
this->ShowWindow(SW_SHOW);
this->RedrawWindow();


Dovrei aggiungere qualcosa nel metodo OnSize??
Oppure per fare una cosa del genere dovrei derivare la classe della finestra da CFormView e fare con splitterWindow?
Non si puo fare in questo modo? :mc: :mc:

Grazie in anticipo...
io mi ricordo di averlo fatto con uno splitter, altri modi non li avevo trovati

Francoo
22-01-2007, 14:53
io mi ricordo di averlo fatto con uno splitter, altri modi non li avevo trovati

...mah.. ci sto provando...
ma compilo il file e non mi da errore.. appena faccio parti l'eseguibile va in crash...

In pratica...
Nel mainFrame ho aggiunto
nel .h:
CSplitterWnd m_wndSplitter;

Nel .cpp

ho fatto l'overRiding del metodo OnCreateClient ed ho aggiunto

VERIFY(m_wndSplitter.CreateStatic(this, 1, 2));
VERIFY(m_wndSplitter.CreateView(0, 0,
RUNTIME_CLASS(CAllineaDlg), CSize(280, 0), pContext)
);
VERIFY(m_wndSplitter.CreateView(0, 1,
pContext->m_pNewViewClass, CSize(0, 0), pContext)
);
return TRUE;



Con CreateStatic la finestra dovrebbe apparire appena apri l'applicazione...
ma il prog non parte...

Come posso fare?
La mia finestra dovrebbe apparire quando clicco su una voce di menu...

N-B. CAllineaDlgl'ho derivata da CFormView