Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Mache ich oder devcpp was falsch?

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 < [ 2 ]
000
05.12.2006, 11:04 Uhr
z-boson



Tach, ich habe da mal ein KNIFFLIGES problem.
Immer öfter registriert Dev-cpp meine Fenstertypen ( ich hasse das word Klasse in dem Zusammenhang, es ist irreführend und kann PRIMA durch styletype ersetzt werden) nicht.
Ich weiss nicht ,wieso.
Vllt kennt jemand sowas.
Und gefunden habe ich nichts , oder ich war zu verwirrt.
Habe schon all das auskommentiert, was unnötig war, um eine Registrierung durchzuführen.
Hier ist mal der code:

Code:


//#define STRICT
#include<windows.h>

LRESULT CALLBACK MessFunc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hiact,HINSTANCE hiprev,PSTR cmdl,int ishowhow)
{
    MSG mess;
    HWND winhan;
    WNDCLASS wcx;
    const char szAppName[] = "K-L/PROTO";
    HBRUSH bgbr = CreateSolidBrush(RGB(120,160,180));
    wcx.cbClsExtra = 0;  
    wcx.cbWndExtra =0;
    wcx.hbrBackground = bgbr;
    wcx.hCursor = LoadCursor(NULL,IDC_HAND);
    wcx.hIcon = LoadIcon(NULL,IDI_EXCLAMATION);
    wcx.hInstance = hiact;
    wcx.lpfnWndProc = MessFunc;    
    wcx.lpszClassName = szAppName;
  wcx.lpszMenuName = 0;
    wcx.style = CS_VREDRAW | CS_HREDRAW;
    
    RegisterClass(&wcx);
    if(!RegisterClass(&wcx))
    {
        MessageBox(NULL,"Registration failed","Error occured",MB_OK);
    }
    
    winhan = CreateWindow(  szAppName,
                            szAppName,
                            WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            NULL,
                            NULL,
                            hiact,
                            NULL
                          );
    ShowWindow(winhan,ishowhow);
    UpdateWindow(winhan);
    
    while(GetMessage(&mess,NULL,0,0))
    {
        TranslateMessage(&mess);
        /* now we're gone learn how thge translate message is used while checking keyboard-hits
        everytime, when a key is hit, the TranslateMessage message it gets the WM_KEYDOWN message
        ( given by the message-struct ), the TrMess checks, whether the key is a valid ASCII sign
        or not. If true, TrMess puts a WM_CHAR message  after the WM_KEYDOWN message.
        The used ASCII-code is then written into wParam!!! Therefore ui call it WndCmd!!!!
        */
        DispatchMessage(&mess);
    }
    return mess.wParam;
}
LRESULT CALLBACK MessFunc(HWND mwinhan,UINT mcode,WPARAM wndcmd,LPARAM wndsize)
{  /*
    static RECT rectangle;          // our loved rectangle for getting the clientedges
    static char cBuffer[128];
    static int iactlen;
    */
    switch (mcode)
    {/*
        case WM_SIZE:
        {
            rectangle.left = 20;
            rectangle.right = LOWORD(wndsize)-20;
            rectangle.bottom = HIWORD(wndsize);
            return 0;
        }  
     /*   case WM_CHAR:
        {
            switch(wndcmd)              // --> again inside an case we use another switch!!!
            {
                case '\r':              // here we check for single keys, this one is the return key
                {
                    iactlen = 0;      // usually known as linefeed and carriage return in its function
                    InvalidateRect(mwinhan,NULL,TRUE);      // here we draw thew whole client edge again
                    break;                                  // and jump out of the damn switch
                }
                case '\b':              // this virtual keycode means backspace, erase
                {
                    if(iactlen <= 0)    // we gonna only erase characters, if there are some
                    {
                        break;
                    }
                    iactlen -- ;        // forgotten ? ->postdecrement
                    InvalidateRect(mwinhan,NULL,TRUE);      // and draw it immediately to screen
                    break;                  // and leave this fuckng switch
                }
                case '\t':
                case '\n':
                case 27:
                {
                    break;
                }           // we first want to ignore all the other command-chars
                default:
                {
                    if(iactlen < sizeof(cBuffer))
                    {
                        cBuffer[iactlen++] = wndcmd;
                        InvalidateRect(mwinhan,NULL,FALSE);  // here were gonna deaw again,
                    }                                        // but erase the clientedge with the bgbrush before                    
                break;
                }
            }
        return 0;        
        }
        case WM_PAINT:
        {
            PAINTSTRUCT paintinfo;
            HDC hdevcon;
            
            hdevcon = BeginPaint(mwinhan,&paintinfo);
            {
                DrawText(hdevcon,cBuffer,iactlen,&rectangle,DT_SINGLELINE|DT_VCENTER);
                
            }EndPaint(mwinhan,&paintinfo);
            return 0;
        }/*
        case WM_KEYDOWN:
        {
            if(wndcmd == VK_ESCAPE)         // the escape-button is defined by an virtual key, too
            {                               // if it is hit, the app schould close by sending an WM_CLOSE
                SendMessage(mwinhan,WM_CLOSE,0,0);// which will be treated properly by the DefWindowProc
            }
            return 0;  
        }*/
        case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
    return DefWindowProc(mwinhan,mcode,wndcmd,wndsize);
    }
}


Wäre dankbar, wenn jemand da was fände.
Ob ich was vergas oder dev-cpp sowas gerne macht.
naja.
Bis dann dann.
[code Code]
--
...we have to create righteous thoughts for righteous words and righteous actions.

Dieser Post wurde am 05.12.2006 um 11:46 Uhr von z-boson editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.12.2006, 11:28 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Nächstes mal bitte eine vernünftige Wortwahl beim Posten hier an den Tag legen.


Der Fehler ist das du die Klasse 2 mal registrieren willst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.12.2006, 11:45 Uhr
z-boson




Zitat von Guybrush Threepwood:
Nächstes mal bitte eine vernünftige Wortwahl beim Posten hier an den Tag legen.


Der Fehler ist das du die Klasse 2 mal registrieren willst.

--
--
-Sorry aber das reizt mich, daher die wortwahl...
Dennoch danke ich Dir erstmal.
-
Nein , das kann nicht sein, denn wenn ich
Code:
if(!RegisterClass(&wcx))
alleine schreibe, also den Register aufruf direkt inne if abfrage pack, ohne den vorher so zu verwenden, dann führt er das Programm so weit aus:
->
Er haut es unten inne Taskleiste und das wars dann.
Dann lässt er die Eieruhr als Cursor und hängt sich auf.
Innerhalb devcpp nur noch durch Execute->reset Programm ändern.
Damit halte ich die Ausführung an.
Das seltsame ist, dass ich es bei diversen Programmen schon öfter hatte, die ich daraufhin wirklich bis zu 4 mal neu tippte, und ich kann mir nicht vorstellen, das so ein bug dadrin steckt oder böser code, der echt zählt, wie oft man n project neu erstellt und so.
Aber ich werde es aus Respekt zu Dir dennoch mal so ausprobieren, dass ich den Register aufruf ohne if, den if danach ohne reg-aufruf verwende.
Aber wie gesagt, der einmalige Aufruf direkt inner if war bisher bei mir gängiger standart, der PLÖTZLICH dazu führte dass es sich aufhing, daher habe ich den zweimal ausgeführt. so kam wenigstens noch die mess-Box zustande!
Wenne mein Problem ungefähr nachvollziehen kannst.
--
...we have to create righteous thoughts for righteous words and righteous actions.

Dieser Post wurde am 05.12.2006 um 11:48 Uhr von z-boson editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.12.2006, 13:28 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Also du kannst eine Klasse mit dem selben Namen nur einmal registrieren. Deshalb schlägt der 2. Aufruf von RegisterClass mit der selben Klasse natürlich fehl.

Wenn sich dein Programm irgendwo aufhängt liegt das nicht daran sondern an einem späterem Problem das ich jetzt so beim überfliegen des Codes nicht ausmachen konnte.
Am Besten guckst du dir das ganze mal im Debugger an und/oder dezimierst dein Programm auf das nötigste (also erstmal ein Fenster erstellen und anzeigen ohne etwas darin zu malen oder so).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.12.2006, 13:32 Uhr
z-boson



Aber ich glaube ich habs:
Hätt isch auch früher drauf kommen können.
Wenn if, dann auch nen retval.
shiat, ich werds checken!!!!
--
...we have to create righteous thoughts for righteous words and righteous actions.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.12.2006, 13:36 Uhr
z-boson



das soll doch das auskommentieren bewirken, der code den ich gepostet habe, reagiert nur auf WM_DESTROY, alles andere habe ich erstmal auskommentiert, aber ich mein nun gecheckt zu haben, dass der retval nach der MessageBox fehlt. Das bedingt, dass, wenn ich die Funktio als if - Bedingung aufrufe, der hängen bleibt, da er in einer Art Wartezustand den retval erwartet, den MessageBox nicht hat.
Beim doppelten Aufruf ist es logisch, dass ie MessageBox kommt, weil ne klasse , wie du sagtest, zweimal gegistriert wird.
nun muss ich auf feierabend warten, um das zu Hause auszuprobieren.
Also hoffentlich!!!!!!!!
--
...we have to create righteous thoughts for righteous words and righteous actions.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.12.2006, 14:07 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ich hab ehrlich gesagt keine Ahnung wovon du sprichst
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.12.2006, 14:11 Uhr
z-boson




Zitat von Guybrush Threepwood:
Ich hab ehrlich gesagt keine Ahnung wovon du sprichst


Ja ,wenn ich schon die RegisterClass als Bedingung nehme, um die message-Box aufzurufen, dann muss nach aufruf n return 0; vorkommen, retval, rückgabewert, jetzt klarer?!!?
--
...we have to create righteous thoughts for righteous words and righteous actions.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.12.2006, 14:31 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Nein

return beendet die aktuelle Funktion und in dem Fall dein Programm.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.12.2006, 15:13 Uhr
z-boson




Zitat von Guybrush Threepwood:
Nein

return beendet die aktuelle Funktion und in dem Fall dein Programm.


ja, aber das soll es auch, wenn die registrierung fehlschlägt.
Mein Punkt ist,dass ich die erste registrierung nur hineintat, weil diejenige im if zweig ( einmalvorkommen)das Programm hängen liess.
Aber hier, in solchen tuts sah ich, das innerhalb dieses Zweiges return 0, oder return false oft benutzt wird.
Nun frage ich mich:
gestern habe ich diverse Varianten versucht, und auch deine waren dabei, nun werde ich wohl oder übel im word document und noch einem son vergleich durchführen, und dann sehen, welche logischen Fehler dadrin sein könnten.
Bis dann dann
--
...we have to create righteous thoughts for righteous words and righteous actions.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: