also.. das wird jetz ein bischen komplizierter:
ich hab da ne klasse frmServer. diese klasse erbt von der klasse Window, welche eine funktion namens Create() besitzt und eine funktion namens Load() welche virtual ist, und in Create() aufgerufen wird.
in der klasse frmServer wird die Load() funktion überladen. darin befinden sich ein paar anweisungen wie das erstellte fenster auszusehen hat (buttons, textboxen usw.).
sobald ich also folgendes mache:
frmServer.Create(param1, param2, ...);
wird in der Create() funktion mir CreateWindow() ein fenster erstellt.
das zurückgelieferte handle wird in der klasse intern in der variable
HWND m_hwndWindow gespeichert. nach der CreateWindow() kommt der aufruf der Load() funktion.
in der Load() funktion soll erstmal nur eine textbox (txtLog) erstellt werden. sie erhält das handle des servers über den constructor, und speichert dieses handle in der variable HWND m_hwndParent.
die textbox txtLog ruft ihre Create() funktion auf und soll mit CreateWindow() eine editbox erstellen.
und DAS ist der punkt. CreateWindow() liefert NULL, und die textbox wird nicht erstellt. als error bekomme ich folgenden text:
CreateWindow failed with error 1407: Fensterklasse wurde nicht gefunden.
beim debuggen sind die variablen eigtl. OK, ich kann also nicht wirklich sagen wo jetzt das problem liegt..
|
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
|
// -------------------------------------------------------------------
// Name: Create()
// Desc: Creates a Win32 window
// -------------------------------------------------------------------
int Forms::Window::Create(...) // liste ist zu lang
{
if(!RegisterClassEx(&wc))
return 1;
m_hwndWindow = CreateWindowEx(dwExStyle,
wc.lpszClassName,
m_lpWindowName,
dwStyle,
xPos, yPos,
Width, Height,
hwndParent,
hMenu,
wc.hInstance,
lpParam);
if(!m_hwndWindow)
return 1;
// [...]
Load(); // <-- die funktion die überschrieben wird.
ShowWindow(m_hwndWindow, SW_HIDE);
UpdateWindow(m_hwndWindow);
return 0;
} // Create()
// -------------------------------------------------------------------
// Name: Constructor()
// Desc: TextBox constructor.
// -------------------------------------------------------------------
Forms::TextBox::TextBox(const HWND hwndParent)
: m_hwndTextBox(NULL), m_hwndParent(NULL), m_bEnabled(true), m_bReadOnly(false), m_lpText(NULL)
{
m_hwndParent = hwndParent;
m_lpText = new wchar_t[2048];
} // Constructor()
// -------------------------------------------------------------------
// Name: frmServer_Load()
// Desc: Initializes the window.
// -------------------------------------------------------------------
void frmServer::Load() // überschreibt Server::Load()
{
// txtLog
txtLog = new TextBox(m_hwndWindow);
txtLog->Create(L"txtLog", INTERSPACE, INTERSPACE, 400, 300);
} // frmServer_Load()
|