Avatar billede dennism Nybegynder
26. maj 2005 - 17:43 Der er 37 kommentarer og
1 løsning

Cpp: GUI-prorgammering

Jeg er vant til at kode til consol, men vil gerne kunne lave GUI-programmer. Jeg bruger Dev-c++ compileren til mine consol-programmer.

Jeg ved, at man kan starte lige på og hårdt og lære Win32 API, men man kan også hente nogle biblioteker med nogle forud-difinerede classer, som gør det nemmere og hurtigere at arbejde med GUI. Er det ik korrekt forstået?

Jeg har prøvet at hente wxWidgets (http://www.wxwindows.org/) til min Dev-c++ compiler, men synes ik rigtigt jeg kan finde nogle gode toturials til hvordan man bruger dette.

Hvad anbefaler i at jeg bruger? Det behøver nødvendigvis ikke at være til Dev-c++.
Avatar billede Slater Ekspert
26. maj 2005 - 17:49 #1
Jeg vil anbefale dig at bruge FLTK (Fast, Light ToolKit), som også fås som DevPak til Dev-C++.
Der følger ganske god dokumentation med pakken.

http://www.fltk.org
Avatar billede Slater Ekspert
26. maj 2005 - 17:51 #2
Avatar billede dennism Nybegynder
26. maj 2005 - 17:55 #3
Jeg får at vide under installationen, at jeg mangler en pakke der hedder "libpthread". Hvor kan jeg hente den?
Avatar billede Slater Ekspert
26. maj 2005 - 17:58 #4
Avatar billede bertelbrander Novice
26. maj 2005 - 19:56 #5
Jeg er ikke så vild med fltk:
1: Applikationerne ligner ikke andre windows applikationer, det betyder også at når man vil åbne en fil kommer der en hjemmelavet dialog-box med begrænsede features, og ikke windows standard. Der er heller ikke support for XP themes.
2: Koden er rodet.

Der er også smartwin: http://smartwin.sourceforge.net/
Avatar billede dennism Nybegynder
26. maj 2005 - 22:00 #6
bertelbrander >>

bruger du selv smartwin, og har du gode erfaringer med det?
Avatar billede bertelbrander Novice
26. maj 2005 - 22:06 #7
Jeg har leget lidt med smartwin, og lavet en enkelt applikation:
http://home20.inet.tele.dk/midgaard/sample.html#smartwindraw

Smartwin er designet rigtigt. Men der er ret nyt, så der findes ikke så meget dokumentation til det.

Jeg ville vælge wxWindow.

Du skal nok acceptere at det tager nogen til at lære at lave windows applikationer i C++, uanset hvilket GUI-lib du bruger.
Avatar billede arne_v Ekspert
26. maj 2005 - 22:12 #8
en anden vigtig pointe er at spørgsmålet ikke er "hvilket GUI lib skal du bruge"
men "hvilket GUI lib skal du lære først"

hvis man vil noget med C++ kommer man til at lære meget forskelligt gennem årene

så vælg et eller andet, gå igang med det og lær en masse, og om et halvt år
kigger du på noget andet - det er ikke et valg som du ikke kan gøre om
Avatar billede dennism Nybegynder
27. maj 2005 - 07:27 #9
Hvad kan jeg så læse, for at lære wvWindow?
Avatar billede arne_v Ekspert
27. maj 2005 - 07:50 #10
der er masser af links på http://www.wxwindows.org/docs.htm
Avatar billede dennism Nybegynder
28. maj 2005 - 13:42 #11
Jeg synes simpelthen det er nogle dårlige artikler..kan ik få det til at virke.

Jeg har hentet denne artikel:
http://users.skynet.be/saw/wxWindows.htm

Men uanset hvilken af koderne i artiklen jeg kopierer ind i min compiler (Dev-C++), så kommer der konstant en fejl.

Jeg sidder f.eks. med kapitel 3.1 (Creating a frame). Jeg kopierer eksempel 5-8 ind i min compile, og gemmer hvert eksempel som det navn der er angivet. Men når jeg så trykker F9 for at compilere og køre, så kommer den ALTID med en fejl!

Hvad er der galt?
Avatar billede arne_v Ekspert
28. maj 2005 - 13:44 #12
har du fået sat dev-cpp op til at linke mod alle de rigtige libs ?
Avatar billede dennism Nybegynder
28. maj 2005 - 13:50 #13
Jah, xw er installeret. Kan godt compilere og køre:
http://www.wxwindows.org/hello.htm
Avatar billede arne_v Ekspert
28. maj 2005 - 13:52 #14
hvilke fejl får du ?
Avatar billede dennism Nybegynder
28. maj 2005 - 14:07 #15
Der kommer en fejl i TextFrame.cpp, ved linien:
#include "TextFrame.h"
Avatar billede arne_v Ekspert
28. maj 2005 - 14:15 #16
Har du lavet en TextFrame.h i dit projekt ?

(TextFrame.h er en du skal lave ikke en det kommer med wx !)
Avatar billede dennism Nybegynder
28. maj 2005 - 14:35 #17
Dvs., at det er en jeg skal ligge i include mappen? Troede den skulle ligge i samme mappe som projektet!?
Avatar billede dennism Nybegynder
28. maj 2005 - 14:36 #18
Skal jeg ligge dem i:
C:\Dev-Cpp\include\ eller C:\Dev-Cpp\include\wx?
Avatar billede bertelbrander Novice
28. maj 2005 - 14:40 #19
Du bør ligge dem i samme mappe som .cpp filen.
Avatar billede bertelbrander Novice
28. maj 2005 - 15:01 #20
I textframe.h manglede der en * foran title i denne linie:

TextFrame(const wxChar *title, int xpos, int ypos, int width, int height);
Avatar billede dennism Nybegynder
28. maj 2005 - 15:19 #21
bertelbrander >>

Det hjalp :) Hvordan kan det være, at der er en fejl i artiklen? Er det den eneste fejl?
Avatar billede bertelbrander Novice
28. maj 2005 - 17:20 #22
Jeg har ikke læst hele artiklen.

På siden står der:
"Nobody is perfect. So when you find errors, please report them to me. Remarks, updates and additions for this tutorial are also appreciated."
Så du skulle måske sende ham en mail.
Avatar billede dennism Nybegynder
29. maj 2005 - 13:44 #23
Finder der ik en god artikel, hvor der ikke er fejl i?
Avatar billede dennism Nybegynder
29. maj 2005 - 15:46 #24
Den artikel er umulig at lære noget af. Nu har jeg læst lidt videre - kapitel 3.2. Der ændrer jeg TextFrame.h og TextFrame.cpp med de ting der står i eksemplerne 9 og 10. Men igen virker prorammet ikke!
Avatar billede bertelbrander Novice
29. maj 2005 - 17:03 #25
Du skal ændre wxString(“Type some text...”) til wxString("Type some text...")

Har du prøvet at downloade sourcen, den burde kompilere som den er.
Avatar billede dennism Nybegynder
29. maj 2005 - 21:17 #26
Jeg sidder nu i stedet og læser på denne artikel:

http://www.bzzt.net/~wxwidgets/icpp_wx1.html

Jeg er kommet til denne side:
http://www.bzzt.net/~wxwidgets/icpp_wx2.html

Er ved afstnittet "Adding a menu bar", og sidst i dette afsnit kan man hente en fil, hvor alt koden ligger i. Dette har jeg gjort, men er i tvivl om, hvordan jeg får koden afviklet?

Hvilken af filerne i .zip-mappen skal jeg kompilere og køre?
Avatar billede bertelbrander Novice
29. maj 2005 - 23:44 #27
Der er så vidt jeg kan se kun 1 .cpp fil i wxbasic2.zip, så det er den du skal kompilere og køre.

.rc filen er en resource fil, den er ikke nødvendig nu, men senere skal du oprette et project i dev-cpp og tilføje resource filen til projectet.
Avatar billede dennism Nybegynder
30. maj 2005 - 08:38 #28
Prøv at se her, hvilke fejl jeg får:
http://www.demaweb.dk/cpp.jpg
Avatar billede bertelbrander Novice
30. maj 2005 - 20:25 #29
Jeg forstår intet.

Prøv at sende mig filerne. Og fortæl hvad der står i C:\dev-cpp\include\xw\defs.h linie 179 (og nogle linier før og efter).

Hvordan oversætter du?
Avatar billede dennism Nybegynder
30. maj 2005 - 20:46 #30
Du kan hente filerne her:
http://www.bzzt.net/~wxwidgets/wxbasic2.zip

I linie 179 står der:
    typedef unsigned int bool;
Avatar billede bertelbrander Novice
31. maj 2005 - 00:11 #31
Hvilken version af wxWindows/wxWidgets bruger du?

Jeg har fået det til at kompilere og køre med g++, unden at ændre i din kode, ved at bruge makefilen, så det er mest et spørgsmål om at sætte kompileren rigtigt op.
Prøv at kikke i makefilen, der er en del flag under CCSW1, disse skal tilføjes som parametre til kompileren, flagene under CCSW2 skal tilføjes til linkeren. Du skal starte med at lave et project i dev-cpp og tilføje flagene under Project->Project Options -> Parameters.

Jeg har også forsøgt at få dev-cpp til at oversætte, men jeg og dev-cpp er ikke kompatible...

Jeg plejer at bruge BorlandC++ sammen med wxWidgets, det er noget lettere, og meget hurtigere.
Avatar billede bertelbrander Novice
31. maj 2005 - 00:36 #32
Måske skulle du kikke forbi:
http://www.wxwidgets.org/devcpp.htm
Avatar billede dennism Nybegynder
31. maj 2005 - 08:42 #33
Mit dev-c++ er sat ordentligt op til xwWindows..har lavet nogle små eksempler som virker.

Vil du anbefale, at jeg også bruger BorlandC++ (eller den er måske ik gratis)?
Avatar billede dennism Nybegynder
31. maj 2005 - 19:27 #34
Er det "C++Builder 6" eller "C++BuilderX" du bruger?
Avatar billede bertelbrander Novice
31. maj 2005 - 19:56 #35
Det er (mest) den gratis kommando linie version jeg bruger, den kan downloades fra:
http://www.borland.com/products/downloads/download_cbuilder.html

Bemærk at det "kun" er en kommando linie kompiler, så du skal bruge makefiler til at oversætte og du skal bruge en editor. Det er den måde jeg arbejder på.
Avatar billede dennism Nybegynder
02. juni 2005 - 10:38 #36
Jeg arbejder videre med Dev-C++, og er nu kommet til:
http://www.bzzt.net/~wxwidgets/icpp_wx4.html

I mit projekt har jeg to filer basic.h og main.cpp.

basic.h:

#ifndef BASIC_H
#define BASIC_H

#include <wx/wx.h>

static const
wxChar
  *FILETYPES = _T( "Text files|*.txt|"
                  "C/C++ source files|*.cpp;*.cc;*.c|"
                  "C/C++ header files|*.hpp;*.h|"
                  "Make files|Mak*;mak*|"
                  "Java files|*java|"
                  "Hypertext markup files|*html;*htm;*HTML;*HTM|"
                  "All files|*.*"
                  );

static const wxChar
*TITLE =
    _T("Basic - Step 3: Responding to events");

class BasicApplication : public wxApp
{
  public:
    virtual bool OnInit();
};

class BasicFrame : public wxFrame
{
  public:
    BasicFrame( const wxChar *title,
                    int xpos, int ypos,
                    int width, int height);
    ~BasicFrame();

    wxTextCtrl *theText;
    wxMenuBar  *menuBar;
    wxMenu    *fileMenu;

    void OnOpenFile (wxCommandEvent & event);
    void OnAbout    (wxCommandEvent & event);
    void OnExit    (wxCommandEvent & event);

  DECLARE_EVENT_TABLE()
};

enum
{ BASIC_EXIT      =  1,
  BASIC_OPEN    = 100,
  BASIC_ABOUT    = 200
};
#endif

main.cpp:

#include <wx/wx.h>
#include "basic.h"

IMPLEMENT_APP(BasicApplication)

bool BasicApplication::OnInit()
{
  BasicFrame *frame
    = new BasicFrame
      ("wxWindows Basic Steps - Step 1:"
        " A simple application",
        50, 50, 200, 200);

  frame->Show(TRUE);
  SetTopWindow(frame);
  return TRUE;   
}

BasicFrame::BasicFrame
            (const wxChar *title,
              int xpos, int ypos,
              int width, int height)
            : wxFrame( (wxFrame *) NULL, -1, title,
                        wxPoint(xpos, ypos),
                        wxSize(width, height))
{
  theText = (wxTextCtrl *) NULL;
  menuBar  = (wxMenuBar *) NULL;
  fileMenu = (wxMenu *)    NULL;


  theText
  = new wxTextCtrl
      ( this,
        -1,
        wxString("This is a text control\n\n"
                "The text control supports"
                  " basic text editing operations\n"
                "along with copy, cut, paste, "
                  "delete, select all and undo.\n\n"
                "Right click on the control"
                  " to see the pop-up menu.\n"
                ),
        wxDefaultPosition,
        wxDefaultSize,
        wxTE_MULTILINE
      ); 

  fileMenu = new wxMenu;
  fileMenu->Append(BASIC_OPEN,  "&Open file");
  fileMenu->Append(BASIC_ABOUT, "&About");
  fileMenu->AppendSeparator();
  fileMenu->Append(BASIC_EXIT,  "E&xit");

  menuBar = new wxMenuBar;
  menuBar->Append(fileMenu, "&File");
  SetMenuBar(menuBar);
 
  SetMenuBar(menuBar);
  CreateStatusBar(3);



}

BasicFrame::~BasicFrame()
{

}

BEGIN_EVENT_TABLE (BasicFrame, wxFrame)
  EVT_MENU ( BASIC_EXIT,  BasicFrame::OnExit)
  EVT_MENU ( BASIC_ABOUT, BasicFrame::OnAbout)
  EVT_MENU ( BASIC_OPEN,  BasicFrame::OnOpenFile)
END_EVENT_TABLE()

void BasicFrame::OnOpenFile (wxCommandEvent & event)
{ wxFileDialog
  * openFileDialog =
      new wxFileDialog ( this,
                          "Open file",
                          "",
                          "",
                          FILETYPES,
                          wxOPEN,
                          wxDefaultPosition);

  if (openFileDialog->ShowModal() == wxID_OK)
    { SetCurrentFilename(openFileDialog->GetFilename());
      theText->LoadFile(openFileDialog->GetFilename());
      SetStatusText(GetCurrentFilename(), 0);
      SetStatusText(openFileDialog->GetDirectory(),1);
    }
}

void BasicFrame::OnAbout (wxCommandEvent & event)
{ wxString t = TITLE;

  t.append( _T("\nDB 2001"));
 
  wxMessageDialog
  aboutDialog
    ( this, t, "About Basic", wxOK | wxCANCEL);
  aboutDialog.ShowModal();
}

void BasicFrame::OnExit (wxCommandEvent & event)
{
  Close(TRUE);
}

Koden er tage fra de eksempler som artiklen kommer med. Men når jeg kører dette igennem min compiler, får jeg en fejl i linien:
    { SetCurrentFilename(openFileDialog->GetFilename());
i main.cpp. Den siger at funktionen er "undeclared". Mangler jeg at inkludere nogle filer, eller hvad er der galt?
Avatar billede dennism Nybegynder
02. juni 2005 - 11:04 #37
Jeg har oprettet et nyt spørgsmål:
http://www.eksperten.dk/spm/622682

bertelbrander og arne_v, smider I lige et svar?
Avatar billede dennism Nybegynder
03. juni 2005 - 18:43 #38
Går ud fra, at det betyder I ik vil have point. Ellers må I sige til!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB