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

1

14.10.2004, 17:58

WinApi Problem

Hi,
ich fang jetzt an mit der WinApi zu Programmieren, da mir ja geraten wurde, erst WinApi und dann vielleicht MFC zu machen (und ganz ehrlich: mir gefällt WinApi auch besser ;) )
Jetzt kann ich auch schon einen Dialog aufrufen, Textboxen erstellen usw.
Nur wollte ich in einem meiner Programme eine zweite Dialogbox zufügen. Also das man in der ersten Dialogbox auf einen Button klickt und dann eine 2. erscheint (wie bei MFC mit der "Aboutbox").
Aber ich bekomm das einfach nicht hin.... Ich hab alles mögliche mit CreateDialog und DialogBox versucht, aber es geht nicht :(
Könnt ihr's mir vielleicht erklären, vielleicht sogar Schritt für Schritt? Oder gibt es da ein Tutorial drüber (ich hab noch keins gefunden)
Wäre echt suuupppeeerrr nett!

Mfg Serubabbel

P.S. Achja, kennt jemand von euch ein gutes Buch über die WinApi Programmierung??
"Es ist Zeit, dass die Menschheit ins Sonnensystem vordringt"
George W. Bush

CuTeX0r

Treue Seele

Beiträge: 174

Wohnort: Deutschland

  • Private Nachricht senden

2

14.10.2004, 18:32

hm ich hätt da ne kleine Frage an dich. Warum findest du als Neueinsteiger pure Winapi besser als mit MFC-Unterstützung?? Nur damit ich mich mal in euch reinversetzen kann =) thanx ;)

p.s. http://www.winapi.net/index.php?inhalt=tipps

Anonymous

unregistriert

3

14.10.2004, 18:38

Zeig mal deinen Ansatz mit dem zweiten Dialogfenster!

Ach ja, falls du Tutorials suchst:
http://www.henkessoft.de/inhalt.htm
oder
http://www.win-api.de/tutorials.php
oder
http://pronix.linuxdelta.de/C/win32/win32_1.shtml

Zum Thema Bücher: (jaja, auch der liebe Petzold :) )
http://www.win-api.com/index.php?content=books

Viel Spaß - und nimm dich für den Anfang wirklich in Acht vor den MFC - die sind ganz schön kompliziert - aber auch praktisch, wenn man's kann...(dazu gehöre ich leider nicht so ganz... :rolleyes: )

Ich hoffe, ich konnte dir helfen,
Till

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

4

14.10.2004, 18:40

:crying: Heute geht alles schief - erst war ich nicht eingeloggt (das wird langsam chronisch bei mir) und dann war auch noch jemand schneller!!! :help: :crying:
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

5

14.10.2004, 19:24

Also mein Code sieht so aus:

Oben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <windows.h>
#include <commctrl.h>

#include "resource.h" 

LRESULT CALLBACK WindProc (HWND, UINT, WPARAM, LPARAM) ;
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);


HINSTANCE hInstance;
HDC hdc;
static TCHAR szDlgName[] = TEXT("DIALOG");


Dann die WinMain Funktion (brauch ich glaube ich nicht aufzulisten)

Und die Prozeduren:

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
void Init (HWND hwnd)
{
}

void AInit(HWND hWnd)
{
}

BOOL CALLBACK DlgProc (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 
{ 
    switch (message) 
    { 
    case WM_INITDIALOG: 
        return TRUE ; 

    case WM_COMMAND: 
        switch ( LOWORD(wParam)) 
        { 
        case IDC_AINIT:
            AInit(hwnd);
            break;

        case IDOK:
            EndDialog (hwnd,1); 
            return TRUE ; 
        } 
    }        
    return FALSE ; 
} 



LRESULT CALLBACK WindProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_CREATE:
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

        case WM_COMMAND:
        {
            switch( LOWORD( wParam ) )
            {
                case IDC_INIT:
                {
                    Init(hwnd);                 
                }
                break;
                case IDC_GO:
                    DialogBox(hInstance,MAKEINTRESOURCE("ABOUT"),hwnd, DlgProc);  

                    break;
             }
        }
        return 0 ;
    }
    return DefWindowProc (hwnd, message, wParam, lParam) ;
}


(Kann sein, dass der zweite Teil etwas wirr ist, habe viel rumprobiert...)


@CuTeX0r: Weiß nicht, ist irgendwie näher an C++. Bei der MFC hab ich immer das Gefühl als wäre ich bei der Delphi-Programmierung (un dich will ja C++ lernen)

@All: Schonmal vielen Dank für die Links...

Mfg Serubabbel
"Es ist Zeit, dass die Menschheit ins Sonnensystem vordringt"
George W. Bush

6

14.10.2004, 19:28

1. Die Funktion AInit tut nichts.
2. Wenn in der AInit-Funktion das übergebene Fensterhandle benutzt wird(z.B. Öffnen des Dialogs) wird das gleiche Fenster noch mal angezeigt.

7

14.10.2004, 19:43

Ok, danke schonmal.
jetzt habe ich AInit rausgenommen, die Datei erstellt und auf den Button geklickt. Passieren tut aber leider immer noch nichts... :(

Mfg Serubabbel

//In dem Buch von Petzold: Welche Themen werden da eigentlich alles behandelt? Ich hab im Internet nichts gefunden...
"Es ist Zeit, dass die Menschheit ins Sonnensystem vordringt"
George W. Bush

8

14.10.2004, 19:49

Welche Datei hast erstellt?

9

14.10.2004, 20:05

Die Exe Datei (also kompiliert und gelinkt)
"Es ist Zeit, dass die Menschheit ins Sonnensystem vordringt"
George W. Bush

10

15.10.2004, 13:43

Die Init-Methode ist ja auch leer. Also wird auch da nichts gemacht.

Werbeanzeige