PDA

View Full Version : [C++] Visual Studio 2005. Principiante


Barbalbero
31-07-2008, 11:28
Io arrivo dalla programmazione in Java e in particolar modo dall'ambiente Netbeans.
Sto sperimentando problemi nella semplice creazione di una applicazione MFC con Visual Studio.
Mi servirebbero dei chiarimenti...
Creo il progetto "prova" come applicazione di dialogo MFC.
E fin qui nessun problema.
Ora esisteranno
prova.cpp
provaDlg.cpp
prova.rc

Io apro prova.rc e IDD_PROVA_DIALOG che è il form che visual studio mi crea di default. A destra ho la mia casella degli strumenti.
E fin qua tutto tranquillo, come in java.
Inserisco ad esempio uno Static Text che chiamerò TESTOESEMPIO.
Ora ho il form con dentro l'etichetta TESTOESEMPIO.
Creo un tasto che chiamerò TASTO, faccio doppio click e definisco la funzione che voglio eseguire quando clicco su TASTO.

Voglio che quando clicco il tasto TESTOESEMPIO.Caption = "FUNZIONA!

In Java avrei fatto TESTOESEMPIO.Caption = "FUNZIONA!"
ma qui la storia è diversa. Innanzitutto TESTOESEMPIO è un oggetto che non riesco a capire in che file sia dichiarato. Sapere questo risolverebbe il 50% dei miei problemi.
Insomma...è solo una riga di codice che devo scrivere, ma non so come inventarla....
mi date una mano per favore?

Barbalbero
31-07-2008, 12:52
Devo convertire una Cstring in const char *

Ho provato così:

const char * tmp = (LPCSTR)path;


ma mi da questo errore

error C2440: 'cast di tipo': impossibile convertire da 'CString' a 'LPCSTR'
Nessun operatore di conversione definito dall'utente è disponibile o è impossibile chiamare l'operatore

Ho provato così:

const char * tmp = _T(path);

ma da questo errore:

error C2065: 'Lpath': identificatore non dichiarato


Ho provato ad usare questo

const char * tmp = path.GetBuffer(path.GetLength);

ma mi da questo errore:

error C3867: '&ATL::CSimpleStringT<BaseType,t_bMFCDLL>::GetLength': chiamata di funzione senza elenco di argomenti; utilizzare 'ATL::CSimpleStringT<BaseType,t_bMFCDLL>::GetLength' per creare un puntatore al membro
with
[
BaseType=wchar_t,
t_bMFCDLL=true
]

Come faccio?

tomminno
31-07-2008, 13:14
usare il metodo GetString()?

Barbalbero
31-07-2008, 13:17
usare il metodo GetString()?

const char * tmp = path.GetString();

Errore:
error C2440: 'inizializzazione': impossibile convertire da 'const wchar_t *' a 'const char *'

tomminno
31-07-2008, 13:31
Io arrivo dalla programmazione in Java e in particolar modo dall'ambiente Netbeans.
Sto sperimentando problemi nella semplice creazione di una applicazione MFC con Visual Studio.
Mi servirebbero dei chiarimenti...
Creo il progetto "prova" come applicazione di dialogo MFC.
E fin qui nessun problema.
Ora esisteranno
prova.cpp
provaDlg.cpp
prova.rc


Complimenti per... la pessima scelta.
Penso che di tutte le librerie grafiche disponibili per il C++ le MFC siano le peggiori.


Io apro prova.rc e IDD_PROVA_DIALOG che è il form che visual studio mi crea di default. A destra ho la mia casella degli strumenti.
E fin qua tutto tranquillo, come in java.
Inserisco ad esempio uno Static Text che chiamerò TESTOESEMPIO.
Ora ho il form con dentro l'etichetta TESTOESEMPIO.
Creo un tasto che chiamerò TASTO, faccio doppio click e definisco la funzione che voglio eseguire quando clicco su TASTO.

Voglio che quando clicco il tasto TESTOESEMPIO.Caption = "FUNZIONA!

In Java avrei fatto TESTOESEMPIO.Caption = "FUNZIONA!"
ma qui la storia è diversa. Innanzitutto TESTOESEMPIO è un oggetto che non riesco a capire in che file sia dichiarato. Sapere questo risolverebbe il 50% dei miei problemi.
Insomma...è solo una riga di codice che devo scrivere, ma non so come inventarla....
mi date una mano per favore?

Per prima cosa ti conviene associare una variabile al controllo che disegni con l'editor (altrimenti devi andare di GetDlgItem), lo fai con il tasto destro e "Add Variable", poi per impostare il testo usi il metodo SetWindowText.

tomminno
31-07-2008, 13:33
const char * tmp = path.GetString();

Errore:
error C2440: 'inizializzazione': impossibile convertire da 'const wchar_t *' a 'const char *'

Perchè hai un progetto con caratteri unicode.
Se vai tra le proprietà del progetto alla voce General troverai il campo Character Set, devi impostarlo su not set.
Altrimenti usi wchar_t e la macro _T per convertire le strighe costanti.

Barbalbero
31-07-2008, 13:49
Ho messo not set e ora oltre agli errori di prima mi da questi due warning

warning C4651: '/D_UNICODE' specificato per l'intestazione precompilata ma non per la compilazione corrente
warning C4651: '/DUNICODE' specificato per l'intestazione precompilata ma non per la compilazione corrente

Forse devo impostare not set anche altrove...


Complimenti per... la pessima scelta.
Penso che di tutte le librerie grafiche disponibili per il C++ le MFC siano le peggiori.


Beh guarda...non è stata proprio una scelta. Io devo usare le libererie openCV e il primo "ambiente" (non so come si definisce visual studio in termine tecnico e non voglio rischiare di essere aggredito dai "saccenti" come spesso accade) che mi è capitato sotto mano, l'ho usato.
Se hai consigli migliori, ben venga, visto che per ora non sono riuscito ancora a combinare niente (a parte due o tre righe copiate e incollate) e ho ancora un mese e mezzo di tempo

Barbalbero
31-07-2008, 14:04
OOH! Ho cambiato. Ho dismesso MFC e ho fatto un' "applicazione windows".

Ora il form è in un file.h e la presentazione grafica modifica direttamente il file.h esattamente come avviene con Java.

tomminno
31-07-2008, 14:05
Ho messo not set e ora oltre agli errori di prima mi da questi due warning

warning C4651: '/D_UNICODE' specificato per l'intestazione precompilata ma non per la compilazione corrente
warning C4651: '/DUNICODE' specificato per l'intestazione precompilata ma non per la compilazione corrente

Forse devo impostare not set anche altrove...


Ricompila l'intero progetto.


Beh guarda...non è stata proprio una scelta. Io devo usare le libererie openCV e il primo "ambiente" (non so come si definisce visual studio in termine tecnico e non voglio rischiare di essere aggredito dai "saccenti" come spesso accade) che mi è capitato sotto mano, l'ho usato.
Se hai consigli migliori, ben venga, visto che per ora non sono riuscito ancora a combinare niente (a parte due o tre righe copiate e incollate) e ho ancora un mese e mezzo di tempo

La vedo dura in un mese e mezzo prendere confidenza con delle librerie grafiche e un ambiente del tutto sconosciuto.
Io ho usato le OpenCV con le wxWidgets, ma visto la ristrettezza dei tempi che hai a questo punto puoi pure continuare con le MFC.
Cosa devi fare di preciso?

Barbalbero
31-07-2008, 14:08
Devo creare un'applicazione che partendo da un face detector già fatto (utilizzerò quello d'esempio con le openCV), estragga le caratteristiche quali occhi e bocca e riconosca l'espressione facciale. La teoria me la sono già assorbita tutta, ora devo metterlo in pratica.