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

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

11

16.04.2008, 18:01

Zitat von »"TrikkieMikkie"«

@TrommlBomml: Das Problem ist, daß sein Programm auf diesen einen Menüpunkt nicht reagieren will.


ach mist nich aufgepasst, tschuldigung!

wenn er den menüpunkt nicht aufruft (und nur diesen), dann solte es ja an der ID liegen. sicher das die richtig ist?

12

16.04.2008, 18:13

No Problem TrommlBomml! (Kuckst du nächstes mal vorher ;))
An die ID hab ich auch schon gedacht. Allerdings müsste ja dann ein Compiler mosern, wenn IDM_DATEI_BEENDEN fehlt. Oder 'ne Warnung rausgeben, wenn eine ID doppelt ist.

13

18.04.2008, 16:06

Er hat recht an der Id kann es nicht liegen, da ich sie kopiert habe! Ich poste jetzt einfach mal den ganzen Code:

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// Mein Windows 

// 

// 

#include <windows.h>   
#include "resource.h"

#define ID_LIST 1  
#define ID_GROUPBOX 02
#define ID_BUTTONDEL 01  
#define ID_STATIC 03
HINSTANCE hInst; 
WNDPROC id;
// Prototyp 

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); 
LRESULT CALLBACK ButtonProc (HWND, UINT, WPARAM, LPARAM);  
// Hauptprogramm

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow) 
{ 
     // Varaiblen

     static TCHAR szAppName[] = TEXT ("André sein Fenster") ;
     HWND         hwnd ;
     MSG          msg ; 
     HACCEL       hAccel;
     WNDCLASS     wndclass ;  

     // Fensterstruktur ausfüllen

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON)) ;
     wndclass.hCursor       = LoadCursor (hInstance, MAKEINTRESOURCE(IDC_CURSOR)) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = MAKEINTRESOURCE(MyMenu);
     wndclass.lpszClassName = szAppName ;
    

     // Fenster rgistrieren

     if (!RegisterClass (&wndclass))
     {    // UNICODE-Compilierung ist die einzige realistische Fehlermöglichkeit 

          MessageBox (NULL, TEXT ("Programm arbeitet mit Unicode und setzt Windows NT voraus!"), 
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     } 

     hInst = hInstance;

     // Fenster erzeugen

     hwnd = CreateWindow (szAppName, TEXT ("André sein Fenster"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ; 

 
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ; 

     hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(Accel));

     while (GetMessage (&msg, NULL, 0, 0))
     {     
          if(!TranslateAccelerator(hwnd, hAccel, &msg)) 
          {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ; 
          }
     }
     return msg.wParam ;
} 
// Nachrichtenfunktion 

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
     // Variablen

     static int  cxClient, cyClient ; 
     HDC         hdc; 
     HWND        hwndList; 
     HINSTANCE   hInstance;
     HWND        hwndButtonDel;  
     HWND        hwndStatic; 
     PAINTSTRUCT ps;   
     HMENU       hMenu;  

     // Verschiedene Nachrichten auswerten 

     switch (message) 
     { 
     case WM_CREATE: 
         hdc = GetDC(hwnd);  
         hInstance = ((LPCREATESTRUCT) lParam)->hInstance; 
         hwndStatic = CreateWindow("static", NULL, WS_VISIBLE | WS_BORDER | SS_GRAYFRAME, 80, 80, 80, 80, hwnd, (HMENU) ID_STATIC, ((LPCREATESTRUCT) lParam)->hInstance, NULL);

         hwndList = CreateWindow(TEXT("listbox"), NULL, WS_CHILD | WS_BORDER | WS_VSCROLL | WS_VISIBLE | LBS_STANDARD, 
                                 70, 70, 90, 20, hwnd, (HMENU) ID_LIST, ((LPCREATESTRUCT) lParam)->hInstance, NULL);  
         SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM) "Hallo!"); 
         SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM) "C++"); 
         SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM) "Windows"); 
         SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM) "XP/Vista"); 

         hwndButtonDel = CreateWindow(TEXT("button"), TEXT("Alles Löschen!"), WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 
                                      150, 150, 150,150, hwnd, (HMENU) ID_BUTTONDEL, ((LPCREATESTRUCT) lParam)->hInstance, NULL);  

         
         id = (WNDPROC) SetWindowLong(hwndButtonDel, GWL_WNDPROC, (LONG) ButtonProc);
         ReleaseDC(hwnd, hdc); 
         return 0;  

     case WM_SIZE:
          cxClient = LOWORD (lParam) ;
          cyClient = HIWORD (lParam) ;
          return 0 ;  

     case WM_COMMAND:  
         hMenu = GetMenu(hwnd);
         switch(LOWORD(wParam)) 
         { 
         case ID_DATEI_BEENDEN: 
             SendMessage(hwnd, WM_CLOSE, 0, 0); 
             
         case ID_HILFE_HALLO: 
             SendMessage(hwnd, WM_CLOSE, 0, 0); 

         case 2: 
             MessageBox(hwnd, "", "", MB_OK);
             
         }
     
  

     case WM_PAINT:  
         hdc = BeginPaint(hwnd, &ps); 
         EndPaint (hwnd, &ps) ;
         return 0;  
         

     case WM_DESTROY:  
          PostQuitMessage (0) ;
          return 0 ;
     } 
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}   

LRESULT CALLBACK ButtonProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
switch(message) 
{ 
case WM_KEYDOWN: 
     MessageBox(hwnd, "FUNKTIONIERT", "INFO!", MB_OK);
} 
return CallWindowProc (id, hwnd, message, wParam, lParam);
}

Das mit den Verschiebungen im Code, ist bei mir anders, liegt hier wohl am einfügen!

14

18.04.2008, 16:46

Interessant wären auch die resource.h und die Script-Datei (.rc)...
Lass mal rüberwachsen! ;)

15

19.04.2008, 10:54

Resource.rc

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//Microsoft Developer Studio generated resource script.

//

#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 2 resource.

//

#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

// Deutsch (Deutschland) resources


#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32


#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////

//

// TEXTINCLUDE

//


1 TEXTINCLUDE DISCARDABLE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED



/////////////////////////////////////////////////////////////////////////////

//

// Icon

//


// Icon with lowest ID value placed first to ensure application icon

// remains consistent on all systems.

IDI_ICON                ICON    DISCARDABLE     "windows.ico"

/////////////////////////////////////////////////////////////////////////////

//

// Cursor

//


IDC_CURSOR              CURSOR  DISCARDABLE     "windowscursor.cur"

/////////////////////////////////////////////////////////////////////////////

//

// Menu

//


MyMenu MENU DISCARDABLE 
BEGIN
    POPUP "&Datei"
    BEGIN
        MENUITEM "Beenden",                     ID_DATEI_BEENDEN, INACTIVE
    END
    MENUITEM "",                            65535
    POPUP "&Hilfe"
    BEGIN
        MENUITEM "hallo",                       ID_HILFE_HALLO
    END
END


/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//


Hallo DIALOG DISCARDABLE  0, 0, 203, 137
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "André"
FONT 8, "MS Sans Serif"
BEGIN
    CONTROL         "Tab1",IDC_TAB1,"SysTabControl32",WS_GROUP,25,25,143,105
END


/////////////////////////////////////////////////////////////////////////////

//

// DESIGNINFO

//


#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE 
BEGIN
    Hallo, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 196
        TOPMARGIN, 19
        BOTTOMMARGIN, 130
    END
END
#endif    // APSTUDIO_INVOKED



/////////////////////////////////////////////////////////////////////////////

//

// Accelerator

//


Accel ACCELERATORS DISCARDABLE 
BEGIN
    "D",            2,                      VIRTKEY, NOINVERT
END

#endif    // Deutsch (Deutschland) resources

/////////////////////////////////////////////////////////////////////////////




#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3 resource.

//



/////////////////////////////////////////////////////////////////////////////

#endif    // not APSTUDIO_INVOKED

Resource.h

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
//{{NO_DEPENDENCIES}}

// Microsoft Developer Studio generated include file.

// Used by windows.rc

//

#define IDI_ICON                        101
#define IDC_CURSOR                      102
#define MyMenu                          104
#define Accel                           107
#define Hallo                           1002
#define IDC_TAB1                        1012
#define IDM_DATEI_BEENDEN               40002
#define ID_DATEI_BEENDEN                40002
#define ID_HILFE_HALLO                  40003

// Next default values for new objects

// 

#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        108
#define _APS_NEXT_COMMAND_VALUE         40004
#define _APS_NEXT_CONTROL_VALUE         1013
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

16

19.04.2008, 11:21

Du hast da doppelte IDs:

C-/C++-Quelltext

1
2
#define IDM_DATEI_BEENDEN 40002
#define ID_DATEI_BEENDEN  40002

Wenn du IDM_DATEI_BEENDEN rausnimmst, sollte es gehen.
Hat einer der Compiler (RC, C++) nicht gemeckert wegen den IDs?

Warum ist der Menüpunkt deaktiviert (ID_DATEI_BEENDEN, INACTIVE)?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

17

19.04.2008, 11:29

Zitat von »"TrikkieMikkie"«

Hat einer der Compiler (RC, C++) nicht gemeckert wegen den IDs?


warum sollte er? es ist ja nicht verboten, dass zwei konstanten /defines denselben wert haben.^^ und da er auch nur eins der beiden IDs verwendet stört das auch die switch-anweisung wenig. :)

18

19.04.2008, 12:24

Mit "meckern" meinte ich, daß du vom Compiler eine Warnung wegen den doppelten IDs erhälst (hängt wohl von der Warnstufe ab...). Ich für mein Teil versuche sowas Doppeltgemoppeltes jedenfalls zu vermeiden.
Und im vorliegenden Fall hat er anscheinend doch Probleme mit den IDs. Oder Hobby Programmierer hat noch nicht gemerkt, daß der Menüpunkt deaktiviert ist. ;)

19

19.04.2008, 21:13

Hab mal durchgetestet. Das "INACTIVE" ist das Problem (resource.rc, MENUITEM "Beenden", ID_DATEI_BEENDEN, INACTIVE).
Außerdem sollte nach den Switch/Case jeweils ein break bzw. return hin, weil der Folgecode auch ausgeführt wird.

20

20.04.2008, 11:28

Stimmt das Inaktiv war das Problem, jetzt funktioniert es! Ich habe einfach nicht auf das Häckchen beim Menüeditor geachtet ;)

Werbeanzeige