Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » c++ GUI Button

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.01.2010, 19:34 Uhr
~I DONT KNOW
Gast


Kann mir einer sagen wo hier der Fehler liegt?

C++:
#include <windows.h>

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

char szClassName[] = "WindowsApp";

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
    HWND hwnd, hButton1;              
    MSG messages;          
    WNDCLASSEX wincl;      

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;    
    wincl.style = CS_DBLCLKS;                
    wincl.cbSize = sizeof (WNDCLASSEX);

    wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                
    wincl.cbClsExtra = 0;                      
    wincl.cbWndExtra = 0;                      
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    if (!RegisterClassEx(&wincl))
        return 0;

    hwnd = CreateWindowEx(0, szClassName, "Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL);
    hButton1 = CreateWindowEx(0, "BUTTON", "Button", WS_CHILD | WS_VISIBLE , 10, 10, 30, 30, hwnd, NULL, NULL, 0);
    ShowWindow (hwnd, nFunsterStil);

    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)                  
    {
        case WM_DESTROY:
            PostQuitMessage (0);      
            break;
        case hButton1:
             MessageBox(NULL, "Test", "Test", MB_OK);
             break;
        default:                      
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}


xD, bin noch recht neu im GUI programieren mit c++.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.01.2010, 21:15 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


welcher fehler denn? (ich seh keine fehlermeldung von dir ^^)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.01.2010, 21:58 Uhr
~I DONT KNOW
Gast


oops, also als Fehlermeldung kommt immer:

Code:
In function `LRESULT WindowProcedure(HWND__*, UINT, WPARAM, LPARAM)':
`hButton1' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
[Build Error]  [main.o] Error 1

Die Fehlermeldung kommt aber auch nur wenn ich überprüfen möchte ob der Button angeklickt wurde also so:

C++:
case hButton1:
             MessageBox(NULL, "Test", "Test", MB_OK);
             break;

btw. Gibts eigendlich noch ne andere möglichkeit Buttons bzw. Label zu erstellen. Weil mit CreateWindowEx sehen die nicht grad schön aus. xD
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.01.2010, 15:04 Uhr
Hans
Library Walker
(Operator)


Hi,

also der Grund für die Fehlermeldung ist, das die Variable hButton1 in WinMain definiert ist, aber nicht in der Callbackroutine WindowProcedure. Das Problem kann man u.a. dadurch beheben, das man solche Variablen Global macht, auch wenn das der reinen Lehre widerspricht.

Ein weiterer Fehler:

C++:
case hButton1:
             MessageBox(NULL, "Test", "Test", MB_OK);
             break;


hinter "case" dürfen nur konstante Ausdrücke stehen, aber keine Variablennamen. Deshalb ist diese Zeile falsch.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.01.2010, 21:22 Uhr
~I DONT KNOW
Gast


Okay, danke.
und wie kann ich sonnst noch Buttons oder Label erstelen?
Mit CreateWindowEx sehen die nicht grade gut aus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.01.2010, 17:26 Uhr
TOSHMAX



Also, ich mache das immer so:

Zuerst erstellst du eine Datei, z. B. "XPTheme.bin", mit folgendem Inhalt:

Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
   xmlns="urn:schemas-microsoft-com:asm.v1"
   manifestVersion="1.0">
<assemblyIdentity
    processorArchitecture="x86"
    version="5.1.0.0"
    type="win32"
    name="win32.exe"/>
    <description></description>
    <dependency>
    <dependentAssembly>
    <assemblyIdentity
         type="win32"
         name="Microsoft.Windows.Common-Controls"
         version="6.0.0.0"
         publicKeyToken="6595b64144ccf1df"
         language="*"
         processorArchitecture="x86"/>
    </dependentAssembly>
    </dependency>
</assembly>


Jetzt musst du noch eine *.rc Datei deinem Projekt hinzufügen und diese Zeile einfügen:

C++:
1 24 "XPTheme.bin"


Zum Schluss musst du noch InitCommonControls aufrufen, bevor du CreateWindowEx aufrufst. Dazu musst du den Header "commctrl.h" einbinden und "comctl32" linken.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: