Nö aber das Fenster hat normalerweise ebenfalls ein eigenen Thread, wenn ich mich recht erinnere(bitte nicht hauen, wenn das jetzt absoluter Stuss ist, aber ich mein mich daran erinnern zu können).
hm aber warum wird das bei einer anderen anwendung die quasi 1:1 mit meiner ist ein thread wärend der laufzeit beendet und der 2te thread erst beim schliessen der anwendung. :?
(da scheint auch nur der unterschied zu sein das alles ohne funktionen
in der winmain gemacht wurde und keine includes verwendet werden)
naja ich wollt das hier nicht so mit code vollmüllen da ich mir übersicht schon zur
angewohnheit gemacht habe (dank an alle prozedurale programmiersprachen)
also hier der komplette sourcecode
(allerdings nicht so übersichtlich, da ich eine scrollsession niemanden zumuten
will
)
btw: ich habe erst vor kurzem mit c++ angefangen, verbesserungsvorschläge und
tipps sind sehr erwünscht.
main.cpp (ist das hauptprogramm bzw. hauptdatei)
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#include "app32.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
App32_CreateWindow();
while(!CheckMsg())
{
}
App32_Release();
return 0;
}
|
app32.h
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#ifndef A7_APP32_H
#define A7_APP32_H
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
void App32_CreateWindow();
void App32_Release();
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int CheckMsg();
#endif
|
app32.cpp
|
Quellcode
|
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
|
#include "app32.h"
HWND hWnd = NULL;
HINSTANCE hInstance = NULL;
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
int CheckMsg()
{
MSG msg;
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT) return 1;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
void App32_CreateWindow()
{
WNDCLASS wc;
hInstance = GetModuleHandle(NULL);
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = "A7D3D9E";
RegisterClass(&wc);
hWnd = CreateWindow("A7D3D9E", "A7Test", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, SW_SHOWDEFAULT);
}
void App32_Release()
{
DestroyWindow(hWnd);
UnregisterClass("A7D3D9E", hInstance);
}
|
und wie man sieht keine externen dlls/libs - nur die ganzen standard libs.
und fehlerabfragen hab ich auch weggelassen damits schnell und leicht zu überfliegen ist.
achso und nochetwas, ist es eigentlich egal ob man jetzt:
LRESULT CALLBACK WndProc() hat oder
LRESULT WINAPI WndProc() ?
hab ich noch was vergessen ?
ja und danke an alle hier, die sich die mühe machen zu helfen.
Gruss Tony