Avatar billede stefan_jensen Nybegynder
12. januar 2003 - 17:04 Der er 24 kommentarer og
2 løsninger

Req.: Eksempel på c++ kode

Ønsker en lille c++ kode der udskriver (i et alm. vindue (IKKE KONSOL) i windows98) følgende tekst "Hej med jer..."
Den skal være lige til at kompilere..
bruger Borland c++ builder hvis det skulle betyde noget??


Grunden til at jeg vil have denne kode, er at jeg mener at man lærer meget mere ved at kigge på andre sources end på tutorials...

På forhånd tak
Avatar billede stefan_jensen Nybegynder
12. januar 2003 - 17:10 #1
Skriv hvis i ikke forstår
Avatar billede arne_v Ekspert
12. januar 2003 - 17:14 #2
MS Visual C++ wizard genererer følgende Hello World applikation:

// Eksperten.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "resource.h"

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;                                // current instance
TCHAR szTitle[MAX_LOADSTRING];                                // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];                                // The title bar text

// Foward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR    lpCmdLine,
                    int      nCmdShow)
{
    // TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;

    // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_EKSPERTEN, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_EKSPERTEN);

    // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return msg.wParam;
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage is only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = LoadIcon(hInstance, (LPCTSTR)IDI_EKSPERTEN);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName    = (LPCSTR)IDC_EKSPERTEN;
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

    return RegisterClassEx(&wcex);
}

//
//  FUNCTION: InitInstance(HANDLE, int)
//
//  PURPOSE: Saves instance handle and creates main window
//
//  COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
  HWND hWnd;

  hInst = hInstance; // Store instance handle in our global variable

  hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

  if (!hWnd)
  {
      return FALSE;
  }

  ShowWindow(hWnd, nCmdShow);
  UpdateWindow(hWnd);

  return TRUE;
}

//
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND    - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY    - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR szHello[MAX_LOADSTRING];
    LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

    switch (message)
    {
        case WM_COMMAND:
            wmId    = LOWORD(wParam);
            wmEvent = HIWORD(wParam);
            // Parse the menu selections:
            switch (wmId)
            {
                case IDM_ABOUT:
                  DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
                  break;
                case IDM_EXIT:
                  DestroyWindow(hWnd);
                  break;
                default:
                  return DefWindowProc(hWnd, message, wParam, lParam);
            }
            break;
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO: Add any drawing code here...
            RECT rt;
            GetClientRect(hWnd, &rt);
            DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG:
                return TRUE;

        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
            }
            break;
    }
    return FALSE;
}
Avatar billede arne_v Ekspert
12. januar 2003 - 17:14 #3
Og hvis du finder det ulæseligt så klag til MS ikke mig !

:-)
Avatar billede arne_v Ekspert
12. januar 2003 - 17:18 #4
Hej. Jeg fandt liget et jeg selv har lavet for en hel del år siden
(og sim ikke er helt så slem):

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT ("Test") ;
    HWND        hwnd ;
    MSG          msg ;
    WNDCLASS    wndclass ;

    wndclass.style        = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc  = WndProc ;
    wndclass.cbClsExtra    = 0 ;
    wndclass.cbWndExtra    = 0 ;
    wndclass.hInstance    = hInstance ;
    wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName  = NULL ;
    wndclass.lpszClassName = szAppName ;

    if (!RegisterClass (&wndclass))
    {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
    }

    hwnd = CreateWindow (szAppName,
                          TEXT ("AVU Win32 GUI"),
                          WS_OVERLAPPEDWINDOW,       
                          CW_USEDEFAULT,             
                          CW_USEDEFAULT,             
                          CW_USEDEFAULT,             
                          CW_USEDEFAULT,             
                          NULL,                     
                          NULL,                     
                          hInstance,                 
                          NULL) ;                   
   
    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;
   
    while (GetMessage (&msg, NULL, 0, 0))
    {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
    }
    return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC        hdc ;
    PAINTSTRUCT ps ;
    RECT        rect ;
   
    switch (message)
    {
    case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ;
         
          GetClientRect (hwnd, &rect) ;
         
          DrawText (hdc, TEXT ("Testing!"), -1, &rect,
                    DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
         
          EndPaint (hwnd, &ps) ;
          return 0 ;
         
    case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
    }
    return DefWindowProc (hwnd, message, wParam, lParam) ;
}
Avatar billede soreno Praktikant
12. januar 2003 - 17:19 #5
Et lidt enklere stykke kode - fint hvis det bare er en lille boks der skal vises.

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  MessageBox(NULL, "Hello World", "Info fra mit første program", MB_OK);
  return 0;
}
Avatar billede killer_bee Nybegynder
13. januar 2003 - 11:46 #6
en observering: manden vil have --> "bruger Borland c++ builder hvis det skulle betyde noget??"

Og i kommer med MS VC++ kode?.. read evt..
Avatar billede killer_bee Nybegynder
13. januar 2003 - 11:47 #7
jeg ville bare sige :

cout<<"Hej med jer"<<endl;
getch();

er ikke helt sikker .. 2 år siden jeg har brugt Borland.  :o)
Avatar billede soreno Praktikant
13. januar 2003 - 11:51 #8
killer_bee >> Dit forsøg på et "hello world" er mislykkeds. Det skulle være i et vindue og ikke en konsol.
Avatar billede soreno Praktikant
13. januar 2003 - 11:52 #9
(..med mindre du har omdirrigeret stdout til noget som skrive på et vindue - men så bedes du vise koden :-)
Avatar billede arne_v Ekspert
13. januar 2003 - 12:18 #10
killer_bee>

Windows API ændrer sig ikke efter hvilken IDE man bruger !

cout og "IKKE KONSOL" matcher ikke særligt godt !
Avatar billede killer_bee Nybegynder
13. januar 2003 - 15:39 #11
arne_v >> :o)  ved det, skrev derfor - "er ikke helt sikker .. 2 år siden jeg har brugt Borland."

havde bare aldrig set HWND og lign. klasser blive brugt i borland.. men som sagt long time no borland ...
Avatar billede stefan_jensen Nybegynder
13. januar 2003 - 16:16 #12
Er altså helt 100% newbie... ville bare se hvordan det virker...
Avatar billede stefan_jensen Nybegynder
13. januar 2003 - 16:24 #13
Har installeret Borland Commandline (BCC55) tools... hvordan H**** compiler jeg koden?
Avatar billede stefan_jensen Nybegynder
13. januar 2003 - 16:28 #14
når jeg bruger cpp32.exe skriver den at windows.h mangler?
Avatar billede arne_v Ekspert
13. januar 2003 - 16:29 #15
Tag mit andet eksempel eller sørens eksempel og compiler det.

Jeg mener bestemt at kommandoen er BCC.

Og hvis du skriver kommandoen uden argumenter, så får du vist
alle options.

[det er lang tid siden jeg sidst har brugt BCC]
Avatar billede stefan_jensen Nybegynder
13. januar 2003 - 16:29 #16
og når jeg compiler cout<<"Hej med jer"<<endl;
getch(); laver den en fil der hedder ***.i ???????
Avatar billede stefan_jensen Nybegynder
13. januar 2003 - 16:31 #17
Ingen kommando eller fil eller noget der hedder noget emd bcc
Avatar billede stefan_jensen Nybegynder
13. januar 2003 - 16:32 #18
jo bcc32... men den siger osse fejl med Windows.h?
Avatar billede soreno Praktikant
13. januar 2003 - 16:35 #19
Avatar billede soreno Praktikant
13. januar 2003 - 16:40 #20
(søgning på "bcc32")
Avatar billede stefan_jensen Nybegynder
13. januar 2003 - 16:53 #21
Det passer fint på mit problem... har gjordt det der stod... (med at oprette de der .cfg filer....) men nu, ved


#include <iostream.h>
void main(void)
{
cout << "Programmering i C++!";
return 0;
}

laver den fejl


Error E2467 exp.cpp : 'main()' cannot return a value in function main()
Avatar billede soreno Praktikant
13. januar 2003 - 16:56 #22
#include <iostream.h>
int main(void)
{
cout << "Programmering i C++!";
return 0;
}

(du har jo deklereret main til at returnere intet (void) - derfor..)
Avatar billede stefan_jensen Nybegynder
13. januar 2003 - 17:02 #23
Aha... det virker... må lige fedte lidt med de andre eksempler :D


Er dem i har sendt 100 % fejlfri?
Avatar billede stefan_jensen Nybegynder
13. januar 2003 - 17:05 #24
Betyder det noget at jeg har win98`?
Avatar billede soreno Praktikant
13. januar 2003 - 17:10 #25
"Betyder det noget at jeg har win98`?"
Ikke alverden - der er dog noget af det mere avancerede win32 api der ikke finde i win9x (bl.a. noget omkring security).

"Er dem i har sendt 100 % fejlfri?"
Jeg har ikke testet mit, men det er sammen sat fra et andet eksempel jeg havde liggende - så jeg er ret overbevist om at det virker.

Det kan dog være besværligt at få det til at virke, da man ofte skal angive et parameter til compileren hvis man ønsker at consolvinduet ikke skal være der.
F.eks. i MinGW:
-mwindows
Avatar billede arne_v Ekspert
13. januar 2003 - 17:20 #26
Mit andet eksempel er testet (for et par år siden med en eller
anden compiler - kan ikke huske hvilken).

Du kan sagtens lave Windows programmer på Win98. Den største
er at Win95/98/ME ikke bruger Unicode ligesom WinNT/2000/XP.
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