Avatar billede michaelprehn Nybegynder
02. marts 2001 - 10:24 Der er 9 kommentarer og
3 løsninger

MFC hvor er winmain

Jeg er begyndt at forsøge på at bruge Visual C++, og den kan fremstille en masse kode - men hvor starter det ?
Jeg har forstået at Windows skal kalde mit program, men jeg kan ikke se indgangen, og der er derfor lidt svært for mig at lægge mine procedurer ind i MFC koden.
Er der ikke en WinMain eller message-loop eller noget ?
Avatar billede wisen Nybegynder
02. marts 2001 - 10:28 #1
Nej, når du bruge MFC, så er \"winmain\" proceduren pakket ind, sammen med messagepumpen og -handleren. Der hvor det hele starter, er i \"InitInstance\". Du skal også lave MFC\'s makroer behandle de forskellige messages. Hertil er \"ClassWizard\" helt genial.

Håber det giver mening, ellers uddyber jeg gerne...

/wisen
Avatar billede borrisholt Novice
02. marts 2001 - 10:28 #2
Fidusen at alt det der med Message loopet og ingangs proceduren en skjult nede \"\"bag ved\" ...

Her er et eksemple på en simpelt MFC skelet  :

#include <afxwin.h>


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


class CMainWindow : public CFrameWnd
{
private:

protected: 
  afx_msg void OnPaint();
  DECLARE_MESSAGE_MAP();
public:
  CMainWindow();
};

MfcSkellet program;

BOOL MfcSkellet::InitInstance()

  CreateFileMapping((HANDLE)0xFFFFFFFF , NULL, PAGE_READWRITE,0, 1024, \"Sekllet\"); 

  if (GetLastError() != ERROR_ALREADY_EXISTS)
  {
      m_pMainWnd = new CMainWindow;
      m_pMainWnd->ShowWindow(m_nCmdShow);
      m_pMainWnd->UpdateWindow();
      m_pMainWnd->DragAcceptFiles();
  } 
  return TRUE;
}

BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
  ON_WM_PAINT()
END_MESSAGE_MAP()

CMainWindow::CMainWindow()
{
  Create(NULL, \"Programmering med MFC\");
}


void CMainWindow::OnPaint()
{
  CPaintDC dc(this);
  CRect rect;
  GetClientRect(&rect);   
  dc.DrawText(\"HEST\", -1, &rect, DT_LEFT | DT_TOP);
}

Jens B
Avatar billede senj Nybegynder
02. marts 2001 - 10:29 #3
For at få din kode til at virke, skal du blot vælge New + Console Wizard og så vælge \'Windows GUI\'. Du får så en tom WinMain, hvor du blot tilføjer din egen kode (idet du lige indsætter hInstance som handle):
Avatar billede wisen Nybegynder
02. marts 2001 - 10:31 #4
senj >> Ok, men så går det smarte også af MFC...
Avatar billede jpk Nybegynder
02. marts 2001 - 10:31 #5
Jo, men det er pakket ind således man får et høkere abstraktionsniveau.
Hvis du vil reagere på et event, fx OnPaint, gør du følgende:

i din header-fil tilføjer du:
afx_msg void OnPaint();

og i din cpp-fil tilføjer du:

ON_WM_PAINT()

i dit message map (har signaturen som herunder)

BEGIN_MESSAGE_MAP(CExportDDESpectraDlg, CDialog)
    //{{AFX_MSG_MAP(CExportDDESpectraDlg)
    ON_WM_PAINT()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

Og implementerer så finktionen som:

void CExportDDESpectraDlg::OnPaint()
{
  ...
}
Avatar billede michaelprehn Nybegynder
02. marts 2001 - 12:22 #6
Jeg forsøger med lidt points-fordeling det ser ud som om jeg har noget at state med

tak !
Avatar billede wisen Nybegynder
02. marts 2001 - 12:23 #7
Hmm, din pointgivning gik vist ikke efter planen vel ?
Avatar billede wisen Nybegynder
02. marts 2001 - 12:24 #8
Hvis du giver mig fordelingen, skal jeg nok fordele...
Avatar billede michaelprehn Nybegynder
02. marts 2001 - 12:31 #9
Jeg ville have fordelt med 100 til hver - altså ligeligt, på jpk, wisen og borrisholt.
Avatar billede wisen Nybegynder
02. marts 2001 - 12:34 #10
Så skal du bare oprette nye spg. med en henvisning hertil...
Avatar billede michaelprehn Nybegynder
02. marts 2001 - 14:29 #11
Jeg har oprettet et spørgmål med points til jpk og borrisholt.
Avatar billede michaelprehn Nybegynder
02. marts 2001 - 17:38 #12
Spørgmål med point til jpk er opretet på http://www.eksperten.dk/spm/53830
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