ciao.
Ho creato un ocx con c++ e mfc.
E' possibile recuperare l'id del controllo "dall'interno" del controllo ereditato?
es:
class CProvaublic CButton
{
.
.
.
long returnid()
{
ritorna l'id del controllo
}
}
ciao.
Ho creato un ocx con c++ e mfc.
E' possibile recuperare l'id del controllo "dall'interno" del controllo ereditato?
es:
class CProvaublic CButton
{
.
.
.
long returnid()
{
ritorna l'id del controllo
}
}
Aggiungo le informazioni che mi hai dato via PVT:
.ho creato un activex com.
un controllo button esteso.
Il mio problema è che quando viene aggiunto ad un dialog mostra l'ID(identificativo unico ad es IID_COMMAND)ma in design time non riesco a fargli trovare quell ID che esiste nella property grid(la finestra delle proprieta)dall' interno.
Ti spiego un po perchè voglio trovare quell'id:
Ho un insieme di dialoghi con button static combo ecc... e li devo internazionalizzare.
Vorrei utilizzare activex per vari motivi che non sto qui a dirti , solo che gli activex non passano la caption dal file rc al controllo relativo,cosi' ho pensato di fare un pharsing del file rc e andare a sostituire le stringhe(caption) con un identificativo , ad es CMB_ok dove CMB è l'identificativo del commandbutton e yes è il valore "yes".
A questo punto vado ad inserire nella stringtable l'id CMB_yes e il valore "yes".
Ora,con gli activex in design time devo trovare quell'id e ho fatto in modo di fare un loadstring(CMB_yes) in modo da internazionalizzare il tutto,infatti basta cambiare la stringtable con una tradotta e loadstring(CMB_ok)diventa "oui" .
grazie.
Amaro C++, il gusto pieno dell'undefined behavior.
Comunque se vuoi solo ottenere l'ID del controllo ti basta invocare la sua funzione GetDlgCtrlID:
.codice:CProva mioPulsante; //... int IDcontrollo = mioPulsante.GetDlgCtrlID();
Amaro C++, il gusto pieno dell'undefined behavior.
il problema è che devo ottenere l'id da dentro il controllo activex,e provando dal controllo activex:
int IDcontrollo = this->GetDlgCtrlID();
mi restituisce sempre 0.
Perchè?
Ma quando hai effettuato questo test il controllo era effettivamente inserito in una finestra?
Amaro C++, il gusto pieno dell'undefined behavior.
si,pero' ero in design time,ho testato che runtime e dall'esterno del controllo(dal dialog)ritorna l'id giusto se setto una variabile del controllo,pero' in design time settando il focus cosi:
CString str;
CWnd* pWnd=GetFocus();
int id =pWnd->GetDlgCtrlID();
mi ritorna un int 67404 che non so cosa sia,forse l'id del dialog,In alternativa,si possono iterare i controlli nei dialog e recuperarne l'id dal file di risorse(binario , non il .rc)con un load qualchecosa , ad es loadresource o non so.
grazie
ho trovato questo ma funziona solo runtime:
CWnd* pWndCtl = GetNextDlgGroupItem( (CWnd*) NULL );
// GetNextDlgGroupItem wraps around, so we must watch
// for when the first control comes up again.
CWnd* pFirstCtl = pWndCtl;
do {
HWND hwnd = pWndCtl->GetSafeHwnd();
POSITION pos;
pWndCtl = GetNextDlgGroupItem( pWndCtl );
int ii=pWndCtl->GetDlgCtrlID();
} while (pWndCtl && (pWndCtl != pFirstCtl));
ho paura pero' che questo esempio vada solo runtime perchè ci sono i puntatori alle window.
come posso fare?io lo devo fare in design time!forse devo agire sulle proprietà dell'activex tipo getproperty(...
Controlli di questo genere fatti a design time non hanno senso (più in generale non riesco a concepire del codice C++ eseguito a "design-time": se viene eseguito è runtime... ma forse sono io che non conosco VS2005). Ma dall'interno del controllo a runtime l'ID ti viene restituito correttamente o no? Al limite prova, sempre dall'interno del controllo, in questa maniera:
.codice:int ctrlID = ::GetDlgCtrlID(m_hWnd);
Amaro C++, il gusto pieno dell'undefined behavior.
mi ritorna sempre 0 ma mi spieghi l'idea di fondo del cambiamento? e anche perchè per te è una stupidata e magari se non rompo troppo come faresti a passare l'id al controllo?.
gerazie 1000 cmq
Semplicemente si tratta della chiamata diretta alla API invece di quella "mediata" da MFC.Originariamente inviato da giuseppe500
mi ritorna sempre 0 ma mi spieghi l'idea di fondo del cambiamento?
Eh?e anche perchè per te è una stupidata e magari se non rompo troppo come faresti a passare l'id al controllo?.![]()
Amaro C++, il gusto pieno dell'undefined behavior.