PDA

View Full Version : [C++] Inserire icona "Salva" su bottone (MFC VisualC++)


Perseverance
15-04-2010, 17:26
Sto imparando a utilizzare le MFC che VisualStudio 6 mette a disposizione per fare le GUI. Non riesco a capire come mettere un'icona su un pulsante (voglio creare il pulsantino SALVA e APRI con le stesse icone di windows).

Dando un'occhiata ai file sorgente non riesco a trovare il file dove vengono dichiarati i bottoni e tutta la GUI, magari servono quelli non lo sò.

Come si fà?

cionci
15-04-2010, 20:48
Welcome to the strange world of MFC :muro: :muro: :muro:
http://www.codeproject.com/KB/buttons/iconbutton.aspx

Tutto questo codice per fare un pulsante con una icona, cose che gli altri framework ti offrono gratuitamente.

Perseverance
15-04-2010, 21:20
OOOHH, allora visto che ti indendi di code::blocks mi devi aiutare ad installarlo xkè io ci ho già provato 2 volte ma non ci riesco. A quanto pare devo usare le WxWidget (giusto?) xò mi blocco al punto della compilazione dei sorgenti di questo plugin, xkè mi dà errori strani e mi si ferma.

Cosa intendi per altri framework, io sono alle prime armi e ho fatto con ciò che avevo!

Mi aiuteresti?

cionci
16-04-2010, 00:08
Vuoi usare un framework diverso da MFC ? http://qt.nokia.com/downloads
Ci sono IDE e librerie.

theking0
16-04-2010, 07:20
Vuoi usare un framework diverso da MFC ? http://qt.nokia.com/downloads
Ci sono IDE e librerie.

Come dice cionci puoi usare le Qt di Nokia, sono multi piattaforma e hanno una curva di apprendimento abbastanza ripida (le impari in fretta).

se scarichi questo pacchetto (http://get.qt.nokia.com/qtsdk/qt-sdk-win-opensource-2010.02.1.exe) e lo installi ti ritrovi già tutto pronto per sviluppare: SDK e QtCreator (un ottimo IDE) il tutto già configurato.

Perseverance
16-04-2010, 11:15
Ti ringrazio molto, mi metterò a studiare questo Qt SDK. Intanto però ho perseverato nel cercare risposta sulle MFC e ho capito che devo ridefinire il metodo disegna_bottone, però sono davvero criptiche le MFC. Ho seguito questa guida http://www.codeguru.com/cpp/controls/buttonctrl/article.php/c5157

Ho installato l'SDK completo di quel programma che mi hai linkato, mi ha portato via mezz'ora per l'installazione ma mi pare un bel programmino per sviluppare in c++ GUI.

;)

theking0
16-04-2010, 11:28
Ti ringrazio molto, mi metterò a studiare questo Qt SDK. Intanto però ho perseverato nel cercare risposta sulle MFC e ho capito che devo ridefinire il metodo disegna_bottone, però sono davvero criptiche le MFC. Ho seguito questa guida http://www.codeguru.com/cpp/controls/buttonctrl/article.php/c5157

le MFC ormai sono più che deprecate, è un framework sviluppato quasi 20 anni fa e che nel tempo la sua struttura non è pressoché cambiata, quindi capirai anche tu che dopo tutti questi anni le tecnologia si evolvono e migliorano.

Quello che in MFC fai in una giornata di lavoro con le Qt lo fai in un decimo del tempo, senza contare poi che le MFC NON sono portabili, le Qt SI.


Ho installato l'SDK completo di quel programma che mi hai linkato, mi ha portato via mezz'ora per l'installazione ma mi pare un bel programmino per sviluppare in c++ GUI.
;)

Si, effettivamente ci mette un po a installare il tutto, ma una volta finito non devi configurare più nulla

cionci
16-04-2010, 11:37
Quello che in MFC fai in una giornata di lavoro con le Qt lo fai in un decimo del tempo
Forse meno. Con gli style sheet cambiare il colore dei controlli è immediato ad esempio.

cionci
16-04-2010, 11:43
Fai conto che quello che hai trovato scritto su quella pagina per cambiare il colore dello sfondo e del testo con le Qt si fa così:

ui->pushButton->setAutoFillBackground(true);
ui->pushButton->setStyleSheet("background-color: rgb(255, 0, 0); color: rgb(255, 255, 255)");

cionci
16-04-2010, 12:04
Per farti apprezzare ancora di più, crea un nuovo progetto con Qt, metti qualche pulsante.
Ora apri il main e modificalo così:

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyleSheet("QPushButton {"\
"background-color: red;"\
"border-style: outset;"\
"border-width: 2px;"\
"border-radius: 10px;"\
"border-color: beige;"\
"font: bold 14px;"\
"min-width: 10em;"\
"padding: 6px;"\
"};"\
"QPushButton:pressed {"\
"background-color: rgb(224, 0, 0);"\
"border-style: inset;"\
"};");
MainWindow w;
w.show();
return a.exec();
}

Il bello è che lo puoi anche cambiare a runtime ;)

Perseverance
16-04-2010, 14:00
UeeUee calma, devo ancora capire dove sono i bottoni per salvare e aprire i progetti :D E' un'interfaccia nuova e mi sento spaesato al momento. Gli ho dato un'occhiata e il programma mi piace. Peccato che impieghi 3 minuti a compilarmi un file banalissimo (sarà anche colpa del mio procio AMD Thunderbird a 800Mhz). Non c'è un compilatore più lesto?

cionci
16-04-2010, 14:18
3 minuti sono tantini. Mi sembra strano che ci metta così tanto. Prova a liberare un po' di memoria. Quanta ram hai ?

Perseverance
16-04-2010, 18:02
768 MB di ram, anche quando provai il WxDevC++ col mingw32 i tempi erano quelli. Cosa pensi che sia?

cionci
16-04-2010, 18:07
768 MB di ram, anche quando provai il WxDevC++ col mingw32 i tempi erano quelli. Cosa pensi che sia?
Forse ti swappa ? Mi sembrano veramente esagerati. Su Linux ci mette 10 secondi a compilare un progetto. Anche su Windows non mi sembrava che fossero così alti.

Perseverance
16-04-2010, 18:27
E' davvero strano, ho riavviato e creato un progetto Qt4 GUI, ora in 20 secondi lo compila e lo avvia. Probabilmente faceva così xkè non avevo riavviato il pc da anni. Cmq non ho swap, 768MB di RAM pura.

cionci
16-04-2010, 18:33
Cmq non ho swap, 768MB di RAM pura.
Fai molto male...è per quello che ti si rallentava. A lungo andare si verifica il fenomeno chiamato frammentazione della Ram. In pratica i programmi fanno fatica a trovare spazio contiguo per allocare memoria. Per fare questo si devo far girare complessi algoritmi di mappatura e spostamento.
Se attivi lo swap non hai di questi problemi, perché periodicamente i programmi vengono scaricati comunque su disco e la ram resta sempre molto più compattata.