Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

23.05.2005, 20:59

soory, den Fherl hab ich übersehen... war was anderes am proggen...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

$splash$

Treue Seele

  • »$splash$« ist der Autor dieses Themas

Beiträge: 172

Wohnort: BW

Beruf: Schüler

  • Private Nachricht senden

22

24.05.2005, 10:22

kann mir mal jemand ein beispiel in mfc oder wenns da nich geht in win api machen ???

plz

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

23

24.05.2005, 11:30

Tut mir leid ich kann kein MFC, ich arbeite ausschließlich mit WINAPI.

Also hier ein paar kleine Schnipsel.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <windows.h>
#define ID_PRESS            1000;       // ID unseres Buttons



HINSTANCE g_hInstance;

LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) ;

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR CmdLine, INT nCmds)
{
    WNDCLASSEX                  wc; 
    MSG                         msg;
    unsigned                    uiWindowSize = 800;
    unsigned                    uiWindowHeight = 600;

    // Den Speicher von msg zurücksetzen

    ZeroMemory( &msg, sizeof(msg) );
    // Den Speicher von msg zurücksetzen

    ZeroMemory( &wc, sizeof(WNDCLASSEX) );

    // Fensterstruktur ausfüllen

    wc.hIcon            = NULL;
    wc.hCursor          = NULL;
    wc.hbrBackground    = (HBRUSH)GetStockObject(DKGRAY_BRUSH);
    wc.lpfnWndProc      = MsgProc;
    wc.hInstance        = hInst;
    wc.cbClsExtra       = 0;
    wc.cbWndExtra       = 0;
    wc.style            = CS_HREDRAW | CS_VREDRAW;
    wc.hIconSm          = NULL;
    wc.lpszClassName    = "testwindow";
    wc.lpszMenuName     = NULL;
    wc.cbSize           = sizeof(WNDCLASSEX);
    
    // Fensterklasse registrieren 

    RegisterClassEx( &wc );

    g_hInstance = hInst;


    // Fenster erstellen

    HWND hWnd = CreateWindow( "testwindow", "Das ist ein Testfenster", 
                              WS_OVERLAPPEDWINDOW, 
                              (int)((GetSystemMetrics(SM_CXVIRTUALSCREEN) / 2) 
                                                    - (unsigned)(g_iWindowSize / 2)),
                              (int)((GetSystemMetrics(SM_CYVIRTUALSCREEN) / 2) 
                                                    - (unsigned)(g_iWindowHeight / 2)),
                              g_iWindowSize, g_iWindowHeight,
                              GetDesktopWindow(), NULL, wc.hInstance, NULL );

    // Show the window

    ShowWindow( hWnd, SW_SHOWDEFAULT );
    UpdateWindow( hWnd );

    // Message Loop

    while( msg.message!=WM_QUIT )
    {
        if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }
    return 0;
}

//-----------------------------------------------------------------------------

// Name: MsgProc()

// Desc: The window's message handler

//-----------------------------------------------------------------------------

LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    // Lokale Variablen


    static HWND             hButton;        // Das HWND auf unseren Button


    switch( msg )
    {
        case WM_CREATE:
            // Ein Steuerlemente, einen Button erstellen

            hButton =   CreateWindow(   "button", 
                                        "Drücken Sie >hier<", 
                                        WS_VISIBLE | WS_CHILD | BS_FLAT,
                                        10, 10, 
                                        45, 15, 
                                        hWnd, 
                                        (HMENU)ID_PRESS,
                                        g_hInstance, NULL);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        case WM_COMMAND:                // Alle Nachrichten von unseren Steuerelementen kommen hier rein!

            switch(LOWORD(wParam))
            {
                case ID_PRESS:
                        // Der Button wurde gedrückt, Text verändern!

                        SetWindowText(hButton, "Hallo Welt");

                        // eine Nachricht an einen anderes HWND

                        // Bin mir beim MAKEWORD absolut unsicher, aber wParam

                        // müsste ja ein 32 Bit Wert sein ??? oder

                        SendMessage(0x001B0292, WM_COMMAND, MAKEWORD(100, 0), NULL);

                        // Die 100 gibt die Nummer des Steuerelementes an, welche das bei dem anderen

                        // Fenster ist weiss ich nicht!

                    break;
            }
        break;
    }

    return DefWindowProc( hWnd, msg, wParam, lParam );
}


Ich weiss nicht ob das Programm funktioniert, habs nicht gestestet aber es sollte dir einiges zeigen..

$splash$

Treue Seele

  • »$splash$« ist der Autor dieses Themas

Beiträge: 172

Wohnort: BW

Beruf: Schüler

  • Private Nachricht senden

24

24.05.2005, 13:24

thx @koschka hst mir geholfen probiers gleich ma aus

llennard

Frischling

Beiträge: 74

Wohnort: Kiel

  • Private Nachricht senden

25

29.05.2005, 20:57

Könnt ihr mir mal helfen ?

Also ich hab mir das jetzt mal durchgelesen, bin aber nicht richtig mitgekommen.

Wenn ich jetzt z. B. in den Texteditor durch ein anderes Programm etwas schreiben lassen ihn dann dies speichern und dann schließen lassen will,
was muss ich dann an C++ - Code schreiben?

Könnt ihr mir das noch mal genau erklären?
Vielleicht so was wie ne Zusammenfassung der Diskussion ... ;)

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

26

29.05.2005, 21:09

OK :)

- Windows kennt nur Fenster- Buttons, Eingabefenster u.s.w. sind alles Fenster. Deise haben ein HWND - Handle of Window -Damit kann man auf das Fenster zugreifen.
- Man kann Nachrichten an die Fenster mit SendMessage(...) schicken, mit CreateWindow(...) kann man Fenster erstellen.
- Um in ein anderes Programm / Steuerlement zu schreiben sind also dessen HWND nötig.
- Dieses bekommt man mit FindWindow(Ex) oder mit SpyC++ oder mit Nox seiner Punktauswahlmethode ;)

llennard

Frischling

Beiträge: 74

Wohnort: Kiel

  • Private Nachricht senden

27

29.05.2005, 21:18

Ok danke!
Aber ich habe jetzt das Handle eines anderen Fensters. Funktioniert dann

C-/C++-Quelltext

1
PostQuitMessage(handle dieses anderen Fensters); 

oder wie?...

Ich möchte ein Programm haben, das ich, wenn ich den Texteditor geöffnet habe, anklicken muss, so dass es dort einige Zeilen reinschreibt. wie geht das?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

28

29.05.2005, 21:34

Also erstmal möchte ich sagen das das nicht so einfach ist :) Ich kenne nur die Theorie nicht die Praxis. Aber ich glaube das kann man hier vereinigien :)

Also PostQuitMessage hat nichts damit zu tun. Lt. MSDN und meinem Compiler ;) nimmt das kein HWND sondern einen Integer Wert, den "ExitCode", als Parameter. siehe MSDN PostQuitMessage macht das das der Namen auch schon sagt ;) es schickt eine Nachricht (WM_QUIT) an den Message Handler (DialogProzedur). Dort wird dann das Fenster terminiert. (DefWindowProc)

Man könnte auch schreiben SendMessage(HWND, WM_QUIT, (wParam)nExitCode, 0); kommt auf das selbe raus. nExitCode ist der Terminierungscode.

Wenn du wirklich so was schreiben willst, dann Schickst du eine WM_COMMAND Meldung (siehe Testprogramm) mit Inhalten in den wParam und LParam. Hinweise findest du bei denem Compiler oder bei der MSDN

Werbeanzeige