Hallo Leute.
Ich wollt mal zum Spass ein Kontrollfenster einbauen, um Debuginfos auszugeben.
Ich hatte keine Lust, mir selbst eins zu basteln, also hab ichs mal mit einem WinAPI
Projekt und aufgerufener Konsole (Ihr wisst schon ? Die DOSKonsole die man bei jedem WinAPI Programm (nur 1x) öffnen kann... ?) versucht.
hmm. Aber das Buch, aus dem das stammt, scheint zu alt zu sein - Meine Konsole wird nicht angezeigt.
Auch google liefert nur tonnenweise irreführende MSDN Links..
Naiv wie ich war wollte ich einfach alles "umdrehen": Nun wird das Fenster aus der Konsole (Win32 Console) gestartet.
Sollte doch machbar sein!
Aber leider verhält sich mein Programm -äußerst- merkwürdig O.o
Ich mach den Debugmodus an, es läuft Schritt für Schritt durch und .. Es durchquert einmal die:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
while(GetMessage(&msg,0,0))
{
TranslanteMessage(&msg);
DispatchMessage(&msg);
}
|
Und "steht still"...
Ich kann weder die Konsole noch mein Fenster sehen
Wenn ich auf "Alle anhalten" drücke, um zu sehen wo das Teil grade im Quelltext ist, kommt eine VS2010EXPRESS Meldung in einem neuen Tab "Quelltext nicht verfügbar" ???
Meine Vermutung: Man muss bei der WinAPI ja "alle 2 Befehle" die HINSTANCE mitgeben. Dazu verwende ich GetModuleHandle(NULL);
(Beim Programmstart von main() liefert mir das Ding ja keinen HINSTANCE Parameter).
Könnts sein, dass der HINSTANCE Parameter irgendwie falsch / inkompatibel ist ??
Hier mal der Quelltext:
|
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
|
// Sauber formatiert :D
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
LRESULT CALLBACK WINDOW(HWND,UINT,WPARAM,LPARAM);
int main(int argc, char* argv[])
{
SetConsoleTitle(L"Profexxor Software AES Verschl\x84sselungsprogramm: Konsole");
printf("Hallo Jemand da ?");
WNDCLASSEX wcx;
wcx.cbClsExtra=0;
wcx.cbSize=sizeof(WNDCLASSEX);
wcx.cbWndExtra=0;
wcx.hbrBackground=(HBRUSH)COLOR_WINDOW+1;
wcx.hCursor=LoadCursor(GetModuleHandle(NULL),IDC_ARROW);
wcx.hIcon=LoadIcon(GetModuleHandle(NULL),NULL);
wcx.hIconSm=wcx.hIcon;
wcx.hInstance=GetModuleHandle(NULL);
wcx.lpfnWndProc=WINDOW;
wcx.lpszClassName=L"psaes";
wcx.lpszMenuName=NULL;
wcx.style=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClassEx(&wcx))
{
printf("Registrierung der Fensterklasse fehlgeschlagen!\n");
cin.get();
exit(-1);
}
HWND hWnd=CreateWindowEx(0,L"psaes",L"Profexxor Software: AES 256 Bit Verschlüsseungsprogramm",WS_OVERLAPPEDWINDOW,100,100,100,100,0,0,GetModuleHandle(NULL),0);
if(!hWnd)
{
printf("Fenster konnte nicht erzeugt werden!\n");
cin.get();
exit(-2);
}
MSG msg;
while(GetMessage(&msg,hWnd,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
printf("Programmfenster geschlossen.");
cin.get();
exit(-1);
return 0;
}
LRESULT CALLBACK WINDOW(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
{
exit(1);
break;
}
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
|
(fstream soll euch mal nicht kümmern. Die Funktion kommmt später noch dazu (soll
)
PS: Vielen Dank für alle Antworten; Ich hoffe ich hab mich nicht wieder blamiert