Avatar billede mussepower5 Nybegynder
01. august 2008 - 19:43 Der er 28 kommentarer og
1 løsning

Keyboard, mouse & window spørgsmål

Hejsa eksperter!

Jeg er ved at lære c++ og jeg er stødt på et problem eller to :P

Jeg vil godt kunne lave spil... ( ved det tager lang tid at lære :) )

men jeg ved ikke hvordan jeg skal åbne et vindue hvor man kan se billeder, normalt når jeg køre programmet åbner det ejg bare i command box. Hvordan får jeg det til at kunne åben i et rigtig vindue

og så det andet er. Det spil jeg laver skulle man gerne kunne bruge keyboard og mus, har kigget lidt på google og utube.. kan se der er nogle der bruger noget der hedder allegro.h

Jeg ved ikke om det er godt at bruge?? eller om man kan include en fil som kan det hele??? ( alså både window, mouse & keyboard )
Avatar billede mussepower5 Nybegynder
01. august 2008 - 19:53 #1
hov glemte lige en ting.. har stillet sprøgsmålet om keyboard før: http://www.eksperten.dk/spm/835953

men jeg fandt aldrig ud af hvor jeg downloadet det.. måske var den bædre end allegro? ( tror jeg ) men hvor skal jeg så dowloade det??
Avatar billede arne_v Ekspert
01. august 2008 - 21:03 #2
Du kan jo starte med ta læse:

http://www.winprog.org/tutorial/
Avatar billede mussepower5 Nybegynder
01. august 2008 - 23:55 #3
okay :) prøver jeg lige ( tak har let efter sådan en side i et stykke tid :) )
Avatar billede mussepower5 Nybegynder
02. august 2008 - 12:01 #4
okay har læst noget nu.. og har også prøvet lidt.. ( har også prøvet at kopire det der står af kode for at lave et vindue )

#include <windows.h>

const char g_szClassName[] = "myWindowClass";

// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    //Step 1: Registering the Window Class
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style        = 0;
    wc.lpfnWndProc  = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance    = hInstance;
    wc.hIcon        = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor      = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm      = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    // Step 2: Creating the Window
    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "The title of my window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);

    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // Step 3: The Message Loop
    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}



men jeg får fejl på linje:

Error    1    error C2440: '=' : cannot convert from 'const char [14]' to 'LPCWSTR'    line : 40

Error    2    error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [28]' to 'LPCWSTR'    line: 46

Error    3    error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [14]' to 'LPCWSTR' line: 57

Error    4    error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [24]' to 'LPCWSTR'    line : 62


hvorfor virker det ikke?
Avatar billede arne_v Ekspert
03. august 2008 - 03:07 #5
Koden compiler hos mig med GCC 4.2 og VC++ 9.0 !

Hvilken compiler og hvilke switche (projekt type) bruger du ?
Avatar billede arne_v Ekspert
03. august 2008 - 03:08 #6
Fejlene relaterer sig alle til ANSI versus Unicode (char versus wchar_t).
Avatar billede mussepower5 Nybegynder
03. august 2008 - 19:35 #7
Jeg bruger Visual basic 2008 c++ ( express Edition )

men.. hvad skal koden så være for at det virker? Kan du skrive en som du tror virker??
Avatar billede mussepower5 Nybegynder
03. august 2008 - 22:24 #8
vil virkelig gerne vide :) vi kan da godt sige at du får 100 point mere hvis det er, det er trækker :P, er lidt sjover når man kan lave vinduer med bla billeder osv....
Avatar billede arne_v Ekspert
03. august 2008 - 22:33 #9
Det er ikke antal point der er et problem, men jeg har meget svært ved at se
hvad dit problem er.

Jeg copy paster din kode ind i z.c !

Jeg åbner Visual Studio 2008 C++ Expresss Edition command prompt !

Jeg laver:

C:\>cl z.c /link user32.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

z.c
Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:z.exe
user32.lib
z.obj

Og programmer virker !!
Avatar billede mussepower5 Nybegynder
03. august 2008 - 22:41 #10
hvad skriver du da af kode..? min siger bare der er fejl på de linjer ( dem jeg skrev længer oppe i topic ) og så vil den ikke compile programmet.. hvordan undgår jeg fejene så det virker? hvad gør du forskel??
Avatar billede mussepower5 Nybegynder
03. august 2008 - 22:48 #11
okay.. lad mig forklare lidt bedre hvis det hjælper:
normalt når man programere c++ blvier det jo skrevet ud i command box. men der kan du kun se text. og derfor vil jeg godt lærer eller i det midste havde forklaret hvordan jeg laver et vindue sådan jeg kan include billeder og se dem.
Avatar billede arne_v Ekspert
03. august 2008 - 22:56 #12
Jeg forklarede jo helt præcist hvad jeg gjorde.

Hvad gør du for at få fejlene ?
Avatar billede mussepower5 Nybegynder
03. august 2008 - 23:02 #13
jo.. jeg kiggede på den fil du linkede:
da jeg har læst kopire jeg den kode til at lave vindue
så opner jeg c++ visual basic ( win32 projet, ikke console )
sætter koden ind
trykker på compile
og så får jeg de finde fejl der..

jeg ved ikke hvad jeg gør forkert :/
det var det jeg trode du vidste
Avatar billede arne_v Ekspert
03. august 2008 - 23:13 #14
Der er ikke noget som hedder "c++ visual basic".

Hvis jeg åbner Visual C++ 2008 Express Edition, new project, Win32, Win32 app - så
får jeg noget kode som:
- gør det samme som din kode
- virker
Avatar billede mussepower5 Nybegynder
03. august 2008 - 23:24 #15
alså skal jeg lave et tom projet eller et hvor der er skrevet noget i forvejen?
Avatar billede mussepower5 Nybegynder
04. august 2008 - 00:03 #16
okay har testet bække dele.. får stadig fejl.. jeg må alså gøre et eller andet forkert.. skal jeg downloade windows.h nogle steder før det virker??
Avatar billede mussepower5 Nybegynder
07. august 2008 - 17:49 #17
har virkelig brug for at vide arne :) vil være så glad hvis jeg fandt ud af det..
Avatar billede arne_v Ekspert
11. august 2008 - 02:27 #18
Du har fået to brugsvejledninger til hvordan du kan få en fungerende løsning
på to forskellige måder (en med command line build af din kode og en med VS
wizard genereret kode).

Jeg er ikke specielt optimistisk med hensyn til at at det løser noget at lave
det på en tredie måde.
Avatar billede mussepower5 Nybegynder
11. august 2008 - 12:41 #19
Ja.. ved jeg godt, og forstår godt hvis du ikke gider at hjælpe mig mere.. men når jeg sætter koden ind i vs c++ ( command ) så får jeg fejl.... jeg ved alså ikke hvorfor og ved ikke hvad jeg gør forkert, så det jeg spurte om var om jeg skal downloade windows.h et eller andet sted før jeg kan include..???
Avatar billede arne_v Ekspert
12. august 2008 - 02:47 #20
windows.h ligger i C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include
Avatar billede mussepower5 Nybegynder
12. august 2008 - 13:59 #21
ah.. okay.. det vil nok hjælpe at include den på den rigtige måde :P men får stadigvæk de fejl der...

PS: har prøvet at teste med den her kode:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
    return 0;
}



men så får jeg den ehr fejl: Error    1    error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [22]' to 'LPCWSTR'    line: 6
ved ikke om det er normalt at ens compiler ikke vil køre noget når koden har noget med MessageBox.. ( har includet window.h rigtig nu... )
Avatar billede arne_v Ekspert
12. august 2008 - 15:35 #22
Hvad giver:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, L"Goodbye, cruel world!", L"Note", MB_OK);
    return 0;
}

?

(forskellen er L prefix foran strenge)
Avatar billede mussepower5 Nybegynder
12. august 2008 - 16:29 #23
Arne det er for sejt det er :), men jeg går ud fra jeg nok selv kommer til at skrive koden til vindue når de kode de skriver ikke virker med mig :)

Vil du havde point?

PS: hvad gør L forskel.. hvad betyder det???
Avatar billede mussepower5 Nybegynder
12. august 2008 - 16:45 #24
Okay.. nu har jeg brugt det du sagde med at sætte L foran.. nu har jeg 2 fejl mindre.. nu mangler jeg kun to fejl mere :)


Error    1    error C2440: '=' : cannot convert from 'const char [14]' to 'LPCWSTR'  line: 40
Error    2    error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [14]' to 'LPCWSTR'    line: 57
Avatar billede arne_v Ekspert
12. august 2008 - 17:41 #25
L betyder wide string (unicode).
Avatar billede arne_v Ekspert
12. august 2008 - 17:58 #26
Men de sidste 2 er maaske svaere at slippe af me.

Maaske skal der laves en:

#define UNICODE

i koden.
Avatar billede mussepower5 Nybegynder
12. august 2008 - 18:04 #27
Okay.. tak for hjælpen.. æveligt jeg ikke fik det til at virke, men der må være andre metoder :) læg svar for point
Avatar billede arne_v Ekspert
13. august 2008 - 04:12 #28
OK

Men var det ikke værd ar lege lidt med:

#define UNICODE

og

#undef UNICODE

?
Avatar billede mussepower5 Nybegynder
13. august 2008 - 14:08 #29
Jeg ved ikke lige helt hvad det er.. så ved ikke hvordan jeg skal bruge det :P
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