WM_CREATE und GetRectClient



  • hallo zusammen,

    ich möchte bei der bearbeitung von WM_CREATE eine Bitmap erzeugen, deren größe ich über GetClientRect bestimmen will. der kot sieht ungefähr so aus:

    case WM_CREATE:
    
    		GetClientRect (hwnd, &rect);
    
    		cxBitmap = rect.right-200; cyBitmap =rect.bottom-200;
    		hdc = GetDC (hwnd);
    		hdcMem = CreateCompatibleDC (hdc);
    		hBitmap = CreateCompatibleBitmap (hdc, cxBitmap, cyBitmap);
    		ReleaseDC (hwnd, hdc);
    
    		SelectObject (hdcMem, hBitmap);
    

    problem ist nur, dass zum zeitpunkt von WM_CREATE die größe des anwendungsbereich anscheinend noch nicht feststeht, ich bekomme mit GetClientRect zumindest keine vernünftigen werte. habt ihr vielleicht eine alternative?



  • ach ja, so wird das fenster bei mir erzeugt, falls das noch weiterhilft

    hwndPaint = CreateWindow (szPaintClass2Name, TEXT ("Rechteckhohlleiter"),
    											WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS, 
    											CW_USEDEFAULT, CW_USEDEFAULT,
    											CW_USEDEFAULT, CW_USEDEFAULT,
    											GetParent (hDlg), NULL, hInst, 
    											&data);
    
    				ShowWindow (hwndPaint, SW_MAXIMIZE);
    

  • Mod

    Die Größe wird erst nach WM_CREATE mit der Nachricht engültig WM_SIZE festgelegt.
    Allerdings wird im LPARAM der WM_CREATE Nachricht die gewünschten Größenparameter übergeben in der CREATESTRUCT.


  • Mod

    --sorry falscher thread--



  • ja nö, ist doch der richtige tread. ich habs auch schon mal über CREATESTRUCT probiert, also dem fenste über CreateWindoe ne feste größe gegeben und dann versucht über lParam die größe auszulesen. das hat aber irgendwie net gefunzt. gibts denn nach WM_CREATE auch direkt ne WM_SIZE message? soweit ich weiß folgt darauf ja auch die WM_PAINT message, oder bin ich da jetzt falsch informiert?


  • Mod

    Der falsche thread entstand dadurch, dass ich eine Antwort für einen anderen Thread´in diesen geschrieben habe.

    Und ja. WM_SIZE kommt kurze Zeit später.
    Wie hast Du denn auf den lParam für die CREATESTRUCT zugegriffen?



  • also das sah dann ungefähr so aus:

    hwndPaint = CreateWindow (szPaintClassName, TEXT ("Rechteckhohlleiter"),
    											WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS, 
    											500, 500,	
    										    CW_USEDEFAULT, CW_USEDEFAULT,
    											GetParent (hDlg), NULL, hInst, 
    											&data);
    

    und dann bei WM_CREATE

    cxBitmap = (int) ((LPCREATESTRUCT)lParam)->cx;
    

    und als ich mir das gerade nochmal angeguckt habe, ist mir dann auch aufgefallen, dass ich bei CreateWindow nicht die fenstergröße sondern die position festgelegt habe. fehler behoben und es läuft, sogar mit GetClientRect.
    Danke für die Hilfe 😉


Anmelden zum Antworten