WinAPI testen



  • Hallo zusammen,

    ich kann C++ Grundlagen und Ausgaben halt im DosFenster. Objektorientiert kann ich auch Klassen usw. Programmieren. Und jetzt wollte ich ein Fenster programmieren. Mir wurden links und tutorial gegeben. Aber mein Problem ist gerade, dass ich bis jetzt mit Visual C++ 6.0 programmiert habe und mich in WinAPI überhaupt nicht auskenne. Kann mir jemand da mal weiterhelfe, wie ich überhaupt ein Projekt erstellen soll.

    Wie kann ich dieses Code ausführen?

    //-----------------------------------------------------------------------------
    // Defines
    
    #define WIN32_LEAN_AND_MEAN // MFC wird nicht benoetigt
    
    //-----------------------------------------------------------------------------
    // Header
    
    #include <windows.h>
    #include <TCHAR.h>
    
    //-----------------------------------------------------------------------------
    // Event Handler
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
    {
    	switch(msg)
    	{
    		case WM_DESTROY:
    			PostQuitMessage(0);
    			return 0;
    
    		default: break;
    	}
    
    	return (DefWindowProc(hwnd, msg, wparam, lparam));
    }
    
    //-----------------------------------------------------------------------------
    // Main
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdline, int nCmdShow)
    {
    	WNDCLASSEX winclass;
    	winclass.cbSize = sizeof(WNDCLASSEX);
    	winclass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_DBLCLKS;
    	winclass.lpfnWndProc = WindowProc;
    	winclass.cbClsExtra = 0; // extra class info space
    	winclass.cbWndExtra = 0; // extra window info space
    	winclass.hInstance = hInstance; // assign the application instance
    	winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    	winclass.lpszMenuName = NULL; // the name of the menu to attach
    	winclass.lpszClassName = __T("WINCLASS1"); // the name of the class itself
    	winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    
    	RegisterClassEx(&winclass);
    	HWND hwnd;
    	hwnd = CreateWindowEx(	NULL,
    							__T("WINCLASS1"),
    							__T("Fenstertitel"),
    							WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    							0,
    							0,
    							200,
    							200,
    							NULL, // handle to parent
    							NULL, // handle to menu
    							hInstance, // instance of this application
    							NULL);
    
    	if(hwnd==NULL)
    		return -10;
    
    	//UpdateWindow();
    
    	MSG msg;
    	while(GetMessage(&msg, NULL, 0, 0))
    	{
    		// translate any accelerator keys
    		TranslateMessage(&msg);
    		// send the message to the window proc
    		DispatchMessage(&msg);
    	}
    	return 0;
    }
    


  • Compilieren, linken und dann auf die .EXE-Datei doppelt klicken. 😃

    Anderenfalls die Frage genauer stellen. 🙂



  • Ok es klappt schon. Ich musste beim Projektauswahl Win32 Anwendung nehmen.
    Aber noch eine Frage.

    Das alles, was man mit WinAPI schreibt kann man auch bei MFC einfach zusammenbasteln. Oder?



  • Im Prinzip würde ich sagen: ja. Allerdings habe ich das noch nicht in der Praxis erprobt.



  • Im Prinzip ja, wie CStoll schon sagte. Die MFC ist eigentlich die OO-gekapselte WinAPI. Es tut also gut, zu wissen, wie die API funktioniert.



  • es gibt tausende ferte GUI Framworks die Funktioniern etwa so:

    Window MyWindow;
    MyWindow.add(new Label("Hallo Welt"));
    

    kannst dir z. B. mein IMB anschauen:
    http://turing.fh-landshut.de/~jamann/IMB/IMB.html

    Im Regelfall schreibt man aber den GUI Code nicht selber, sondern hat dafür einen FormDesigner - da klickst du ein paar mal rum und setzt so Buttons, Textferlder und vieles mehr auf dein Window.



  • Visual C++ 6.0
    Hmm... du solltest dir mindestens für die WinAPI mal die 2005er Version holen 🙂 ist ja auch in der Express kostenlos... allerdings enthält diese keine Microsoft Foundation Class -.-


Anmelden zum Antworten