Avatar billede unsigned Nybegynder
10. marts 2004 - 21:38 Der er 3 kommentarer og
1 løsning

Installation af GdiPlus.h i Visual C++

Jeg har downloadet filerne til GdiPlus, men kan ikke få det til at virke. Jeg har fundet et godt link:

http://www.codeproject.com/vcpp/gdiplus/startinggdiplus.asp
Der hvor der står:
Also put gdiplus.lib in your list of libraries by choosing Project/Settings/Link and entering it into the object/library modules area.

Jeg har to gdiplus.lib på min harddisk.
D:\Programmer\Microsoft SDK\Lib\gdiplus.lib
D:\Programmer\Microsoft SDK\Lib\IA64\gdiplus.lib
Hvilken sti skal jeg skrive?

Så står der:
To get your application to work with GDI+, do the following: in stdafx.h, add:

Jeg har mere end 200 stdafx.h på min harddisk. Hvilken en skal jeg ændre i?

Så står der:
in your application class, add the member:

Jeg har kun en fil (exercise.cpp), og for tiden skriver jeg al koden der. Hvad er min 'application class'?

Her er koden for exercise.cpp

//##### Code start #####
#include <afxwin.h>
#include <string.h>
#include <windows.h>
#include <afx.h>

class CExerciseApp : public CWinApp
{
    public:
    virtual BOOL InitInstance();
};

// Her begynder hovedvindue

class CMainFrame : public CFrameWnd
{
    public:
    CMainFrame();
};

CMainFrame::CMainFrame()
{
  Color firstColor(255, 128, 128, 255);
  COLORREF colorRef ;

  colorRef = SetDCBrushColor (NULL, firstColor);

  CString strMyClass;
  // load stock cursor, brush, and icon for
  // my own window class
  try
  {
      strMyClass = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW,::LoadCursor(NULL, IDC_ARROW),
        (HBRUSH) ::GetStockObject(colorRef), ::LoadIcon(NULL, IDI_APPLICATION));
  }

  catch (CResourceException* pEx)
  {
      AfxMessageBox(_T("Couldn't register class! (Already registered?)"));
      pEx->Delete();
  }
  // Her slutter en blok
   
  Create(strMyClass, "Timer");
}

// Her begynder ettervindue

class ettervindue : public CFrameWnd
{
    public:
    ettervindue();
};

ettervindue::ettervindue()
{
    Create(NULL, "Ettervindue");
}

// Her slutter ettervindue

BOOL CExerciseApp::InitInstance()
{
    m_pMainWnd = new CMainFrame;
    m_pMainWnd->ShowWindow(SW_MAXIMIZE);

    ettervindue * etterpointer = new ettervindue;
    etterpointer->ShowWindow(SW_SHOW);

    return TRUE;
}

CExerciseApp theApp;
//##### Code end #####

Formålet med det hele, er at skifte baggrundsfarven på CMainFrame.
Avatar billede jpk Nybegynder
11. marts 2004 - 08:46 #1
Du skal bruge D:\Programmer\Microsoft SDK\Lib\gdiplus.lib, den anden ligner noget til en 64bit CPU...

Det skal være den stdafx.h der hører til dit projekt. Altså den du finder under header files i projektet.

Din Application class er den klasse der nedarver fra CWinApp
Avatar billede jpk Nybegynder
11. marts 2004 - 08:48 #2
Er det bare fordi du vil have en baggrundsfarve (fx blå eller rød) eller skal det være noget mere avanceret..?
Avatar billede unsigned Nybegynder
12. marts 2004 - 20:50 #3
I første omgang er det for at ændre baggrundsfarve på CMainFrame. Hvis jeg får gjort det, så kan jeg senere vende tilbage til GdiPlus.

Der er også et problem med stdafx.h. Under Tools, Options, Directories, der inkluderer jeg fire mapper:
D:\Programmer\Microsoft SDK\include
C:\Programmer\Microsoft Visual Studio\VC98\INCLUDE
C:\Programmer\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Programmer\Microsoft Visual Studio\VC98\ATL\INCLUDE
Jeg har kigget alle fire mapper igennem, og der er ikke nogen stdafx.h i nogen af dem. Jeg har prøvet 'søg' og den finder ca 200 stdafx.h, på  C og D drevene. Men de er ikke ens, så der er tilsyneladende flere udgaver af stdafx.h. Så har jeg valgt en, der så fornuftig ud, ændret i den og lagt den i D:\Programmer\Microsoft SDK\include. Men det slap jeg ikke heldigt fra.

Hvis du har en nemmere måde at ændre baggrundsfarven på CMainFrame, så må du meget gerne komme med et indlæg.
Avatar billede jpk Nybegynder
13. marts 2004 - 09:29 #4
Hvis du har oprettet et MFC-projekt via Visual Studio, bliver der automatisk oprettet en fil med navnet stdafx.h i selve projektet. Det er denne fil der henvises til.
Den skal altså ikke ligge i noget include directory, men i samme folder som dine andre projektfiler.
Har du ikke har denne fil i dit projekt, kan du bare slette include'en fra din kode.
Hvis det ikke er nok (hvis du får en fejl med unexpected end of file), skal du deaktivere brugen af precompiled headers. Jeg mener det er under:
Project->Settings, C++, Precompiled headers.

Det er i øvrigt slet ikke nødvendigt at bruge GDIPlus for noget så simpelt som at ændre baggrundsfarven.
Du kan override OnEraseBkgnd og implementere funktionen som i dette eksempel:

BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
{
    // Set brush to desired background color.
    CBrush backBrush(RGB(255, 128, 128));
    // Save old brush.
    CBrush* pOldBrush = pDC->SelectObject(&backBrush);
    CRect rect;
    pDC->GetClipBox(&rect);    // Erase the area needed.
    pDC->PatBlt(rect.left, rect.top, rect.Width(),
    rect.Height(), PATCOPY);
    pDC->SelectObject(pOldBrush);
    return TRUE;
}
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