childwindow zeigt sich nicht
-
Du musst deine Fensterklasse schon einmal registrieren
(ich würde dies aber nicht in WM_COMMAND machen, sondern z.B. bei WM_CREATE)
-
ist ja alles schön und gut.
habe jetzt auch die registrierung in die create gepackt.
trotzdem kommt nix.#include <afxwin.h> #include <afxext.h> #define but1 1 #define but2 2 #define but3 3 #define but4 4 #define but5 5 #define but6 6 LRESULT MainWndProc(HWND,UINT,WPARAM,LPARAM); LRESULT WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow) { HWND hwnd ; MSG msg ; WNDCLASS wndclass; LPTSTR text = TEXT("Interaktive-Wanderkarte"); memset(&wndclass,0,sizeof(wndclass)); wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE; wndclass.lpfnWndProc = (WNDPROC)MainWndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hIcon = NULL; wndclass.hInstance = hInstance; wndclass.hCursor = NULL; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = text; RegisterClass(&wndclass); hwnd = CreateWindow(text, text,WS_VISIBLE,0, 0, 240, 320, NULL,NULL, hInstance, NULL); ShowWindow (hwnd, SW_SHOW) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndbut1,hwndbut2,hwndbut3,hwndbut4,hwndbut5,hwndbut6,hwndevent; static HINSTANCE hInstance; static HBITMAP hhintergrund,hbiber1,hbiber2,hbiber3,hbiber4,hbiber5,hbiber6; static BITMAP hintergrund,biber1,biber2,biber3,biber4,biber5,biber6; static HDC hdc, hdcmem, hdcmem1; static PAINTSTRUCT ps; static WNDCLASS wc; static LPTSTR event = TEXT("Event"); //SHFullScreen(hWnd,SHFS_HIDESIPBUTTON | SHFS_HIDETASKBAR | SHFS_HIDESTARTICON); switch(message) { case WM_CREATE: memset(&wc,0,sizeof(wc)); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hIcon = NULL; wc.hInstance = ((LPCREATESTRUCT) lParam)->hInstance; wc.hCursor = NULL; wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = event; RegisterClass(&wc); hInstance = ((LPCREATESTRUCT) lParam)->hInstance ; hwndbut1 = CreateWindow (L"button", L"",WS_CHILD | WS_VISIBLE | BS_OWNERDRAW ,30, 24, 75, 75, hWnd, (HMENU) but1,hInstance, NULL); hwndbut2 = CreateWindow (L"button", L"",WS_CHILD | WS_VISIBLE | BS_OWNERDRAW ,135, 123, 75, 75, hWnd, (HMENU) but2,hInstance, NULL); hwndbut3 = CreateWindow (L"button", L"",WS_CHILD | WS_VISIBLE | BS_OWNERDRAW ,30, 222, 75, 75, hWnd, (HMENU) but3,hInstance, NULL); hwndbut4 = CreateWindow (L"button", L"",WS_CHILD | WS_VISIBLE | BS_OWNERDRAW ,135, 24, 75, 75, hWnd, (HMENU) but4,hInstance, NULL); hwndbut5 = CreateWindow (L"button", L"",WS_CHILD | WS_VISIBLE | BS_OWNERDRAW ,30, 123, 75, 75, hWnd, (HMENU) but5,hInstance, NULL); hwndbut6 = CreateWindow (L"button", L"",WS_CHILD | WS_VISIBLE | BS_OWNERDRAW ,135, 222, 75, 75, hWnd, (HMENU) but6,hInstance, NULL); hhintergrund = SHLoadDIBitmap(L"/programme/wanderkarte/hintergrund.bmp"); hbiber1 = SHLoadDIBitmap(L"/programme/wanderkarte/biber1.bmp"); hbiber2 = SHLoadDIBitmap(L"/programme/wanderkarte/biber2.bmp"); hbiber3 = SHLoadDIBitmap(L"/programme/wanderkarte/biber3.bmp"); hbiber4 = SHLoadDIBitmap(L"/programme/wanderkarte/biber4.bmp"); hbiber5 = SHLoadDIBitmap(L"/programme/wanderkarte/biber5.bmp"); hbiber6 = SHLoadDIBitmap(L"/programme/wanderkarte/biber6.bmp"); GetObject (hbiber1,sizeof(BITMAP),&biber1); GetObject (hbiber2,sizeof(BITMAP),&biber2); GetObject (hbiber3,sizeof(BITMAP),&biber3); GetObject (hbiber4,sizeof(BITMAP),&biber4); GetObject (hbiber5,sizeof(BITMAP),&biber5); GetObject (hbiber6,sizeof(BITMAP),&biber6); GetObject (hhintergrund, sizeof (BITMAP), &hintergrund); break; case WM_PAINT: hdc = BeginPaint (hWnd, &ps) ; hdcmem = CreateCompatibleDC (hdc) ; SelectObject (hdcmem, hhintergrund) ; BitBlt (hdc, 0, 0, hintergrund.bmWidth, hintergrund.bmHeight, hdcmem, 0, 0, SRCCOPY); DeleteDC (hdc); DeleteDC (hdcmem) ; EndPaint (hWnd, &ps) ; break; case WM_COMMAND: switch(wParam) { case but1: DestroyWindow(hWnd); break; case but2: hwndevent = CreateWindow(event,event,WS_VISIBLE | WS_CHILD,0, 0, 240, 320, hWnd,NULL,((LPCREATESTRUCT) lParam)->hInstance, NULL); if(hwndevent == NULL) { MessageBox(hWnd,TEXT("nix"),TEXT("nix"),MB_OK); } ShowWindow (hwndevent, SW_SHOW) ; UpdateWindow (hwndevent) ; break; } break; case WM_DRAWITEM: LPDRAWITEMSTRUCT lpdis; lpdis = (LPDRAWITEMSTRUCT) lParam; switch(lpdis->CtlID) { case but1: hdcmem = CreateCompatibleDC(lpdis->hDC); hdcmem1 = CreateCompatibleDC(lpdis->hDC); SelectObject(hdcmem,hhintergrund); SelectObject(hdcmem1,hbiber1); BitBlt(lpdis->hDC,0,0,75,75,hdcmem,30,24,SRCCOPY); TransparentImage(lpdis->hDC,0,0,75,75,hdcmem1,0,0,75,75,GetPixel(hdcmem1,1,1)); DeleteDC(hdcmem); DeleteDC(hdcmem1); break; case but2: hdcmem = CreateCompatibleDC(lpdis->hDC); hdcmem1 = CreateCompatibleDC(lpdis->hDC); SelectObject(hdcmem,hhintergrund); SelectObject(hdcmem1,hbiber5); BitBlt(lpdis->hDC,0,0,75,75,hdcmem,135,123,SRCCOPY); TransparentImage(lpdis->hDC,0,0,75,75,hdcmem1,0,0,75,75,GetPixel(hdcmem1,1,1)); DeleteDC(hdcmem); DeleteDC(hdcmem1); break; case but3: hdcmem = CreateCompatibleDC(lpdis->hDC); hdcmem1 = CreateCompatibleDC(lpdis->hDC); SelectObject(hdcmem,hhintergrund); SelectObject(hdcmem1,hbiber3); BitBlt(lpdis->hDC,0,0,75,75,hdcmem,30,222,SRCCOPY); TransparentImage(lpdis->hDC,0,0,75,75,hdcmem1,0,0,75,75,GetPixel(hdcmem1,1,1)); DeleteDC(hdcmem); DeleteDC(hdcmem1); break; case but4: hdcmem = CreateCompatibleDC(lpdis->hDC); hdcmem1 = CreateCompatibleDC(lpdis->hDC); SelectObject(hdcmem,hhintergrund); SelectObject(hdcmem1,hbiber4); BitBlt(lpdis->hDC,0,0,75,75,hdcmem,135,24,SRCCOPY); TransparentImage(lpdis->hDC,0,0,75,75,hdcmem1,0,0,75,75,GetPixel(hdcmem1,1,1)); DeleteDC(hdcmem); DeleteDC(hdcmem1); break; case but5: hdcmem = CreateCompatibleDC(lpdis->hDC); hdcmem1 = CreateCompatibleDC(lpdis->hDC); SelectObject(hdcmem,hhintergrund); SelectObject(hdcmem1,hbiber2); BitBlt(lpdis->hDC,0,0,75,75,hdcmem,30,123,SRCCOPY); TransparentImage(lpdis->hDC,0,0,75,75,hdcmem1,0,0,75,75,GetPixel(hdcmem1,1,1)); DeleteDC(hdcmem); DeleteDC(hdcmem1); break; case but6: hdcmem = CreateCompatibleDC(lpdis->hDC); hdcmem1 = CreateCompatibleDC(lpdis->hDC); SelectObject(hdcmem,hhintergrund); SelectObject(hdcmem1,hbiber6); BitBlt(lpdis->hDC,0,0,75,75,hdcmem,135,222,SRCCOPY); TransparentImage(lpdis->hDC,0,0,75,75,hdcmem1,0,0,75,75,GetPixel(hdcmem1,1,1)); DeleteDC(hdcmem); DeleteDC(hdcmem1); break; } break; case WM_DESTROY: DeleteObject (hbiber1); DeleteObject (hbiber2); DeleteObject (hbiber3); DeleteObject (hbiber4); DeleteObject (hbiber5); DeleteObject (hbiber6); DeleteObject (hhintergrund); PostQuitMessage (0) ; break; } return DefWindowProc(hWnd, message, wParam, lParam); } LRESULT WndProc(HWND hWnde, UINT messagee, WPARAM wParame, LPARAM lParame) { switch(messagee) { case WM_CREATE: MessageBox(hWnde,TEXT("hallo welt"),TEXT(""),MB_OK); break; } return DefWindowProc(hWnde, messagee, wParame, lParame); }
es wird einfach nix als mein parentfenster angezeigt
edit by flenders: Code-Tags eingefügt - solltest du das nächste Mal selber machen
-
Aber er kommt schon zu dem CreateWindow und die MessageBox kommt nicht?
-
btw: wie willst du auch etwas sehen, wenn du ein optisch dem Hauptfenster identisches Childfenster innen reinlegst
Du solltest dem ChildWindow eine eigene WndProc geben und einen anderen backgroundBrush (damit du es auch siehst) und evtl noch etwas kleiner als das Hauptfenster, damit dieses nicht ganz überdeckt wird
-
auch wenn es den eindruck macht ganz doof bin ich nicht
die procedur meines hauptfensters ist MainWndProc und der hintergrund meines parentfensters ist ein bild und das des child-fensters ist nur weis.schreibe gerade alles nochmal neu vieleicht hab ich irgentwo nen kleinen fehler gemacht.
danke für deine gedult und mühe.
werde mich vieleicht noch mal heute abend melden.
-
Sorry - hatte mir das Ganze wohl nicht genau genug angeschaut
-
hab den fehler gefunden.
für diesen fehler müsste ich mich auf der stelle an die wand stellen.ich sage nur:
hwndevent = CreateWindow(event,event,WS_VISIBLE | WS_CHILD,0, 0, 240, 320, hWnd,NULL,((LPCREATESTRUCT) lParam)->hInstance, NULL);
fällt dir
((LPCREATESTRUCT) lParam)->hInstance
irgentwie auf?
ich idiot habe die ganze zeit die instance meines parentwindow genommen und mich gewundert warum es nicht so will wie ich.nachdem ich ne eigene hInstance für mein childwindow erstellt und diese dann eingesetzt habe war der ganze spuk vorbei.
danke nochmal für deine hilfe, gedult, ratschläge usw.
-
Was meinst du mit "eigene hInstance für mein childwindow erstellt"?
Aber jetzt wo du es sagst: ((LPCREATESTRUCT) lParam)->hInstance kannst du natürlich nur in WM_CREATE verwenden, bei anderen Messages wird im lParam ja kein Pointer auf die CREATESTRUCT-Struktur übergeben.
Hast du hInstance jetzt einfach in WM_CREATE in einer in MainWndProc statischen Variable gespeichert? - ist wohl das einfachsteund beste
-
nein ich habe das mit dem pointer ganz sein gelassen und einfach mit:
HINSTANCE hInstanceChild;
ne neue instance für mein child erstellt.
seid dem geht es.wenn ich die instance vom pointer aus der WM_CREATE nehme dann wird der hintergrund meines parents schwarz und die größe verändert sich.
ich progge für win-ce daher vieleicht dieser unterschied
-
Ich versteh' zwar nicht ganz, was du da jetzt genau gemacht hast (kommt mir auch ein wenig komisch vor), aber wenn's funktioniert ist es ja recht