Handle ergattern



  • Hallo,

    wie kann ich in einem erstellten MFC Programm den Handel bekommen.
    Wenn ich ein Programm selbst schreibe mache ich dass mit:

    HDC hdc;

    hdc = GetDC(hwnd);

    ...

    ReleaseDC (hwnd, hdc);

    Doch leider kennt das von MFC erstellte Programm hwnd nicht.
    Wie soll ich dass machen??

    Gruß
    Frostie



  • Ich glaube du meinst das :

    CDC* pDC = hwnd->GetDC();
    

    Gruß
    :: NoName ::



  • Das funzt so net:

    error C2065: 'hwnd': nichtdeklarierter Bezeichner
    error C2227: Der linke Teil von '->GetDC' muss auf Klasse/Struktur/Union zeigen

    Wo kann ich den Händel erfahren? Doch nicht in der OnDraw Funktion oder?

    Wenn ich HWND hwnd mache dann kennt er nur die Funktion unused.

    Gruß
    Frostie



  • Das liegt daran, das GetDC() nur bei CWnd Objekten funktioniert ! (HWND leider nicht)
    Was genau möchtest du eigentlich machen ? Willst du das Handle von dem gesamten Programm herausfinden ???

    Gruß
    :: NoName ::



  • Ich möchte zB ein Rectangle zeichnen,
    dazu brauch ich den hdc.

    Wenn ich die Schriftstärke ändern will, muß ich auch den hdc und den hwnd nutzen, oder?

    Gruß
    Frostie



  • Und warum benutzt nicht einfach CPen ?
    das ist dann kinderleicht !

    CDC* pDC = GetDC();
    CPen pen(PS_SOLID, 1, RGB(0,0,0)); //Die 1 steht für die Liniendicke !
    pDC->SelectObject(&pen);
    pDC->Rectangle(20,20,20,20);
    

    Gruß
    :: NoName ::



  • Das klappt ja schon ganz gut,
    aber wie kann ich nun das Rechteck mit zB grau füllen und dann mit nem
    schwarzen Text reinschreiben??

    Danke

    Frostie



  • Servus,

    CDC -> MSDN 😉

    Farbe:
    FillRect() Fills a given rectangle by using a specific brush.
    FillSolidRect() Fills a rectangle with a solid color.

    Text:
    TextOut() Writes a character string at a specified location using the currently selected font.

    *winke*
    Hellsgore



  • Oder du benutzt SelectStockObject :

    pDC->SelectStockObject(GRAY_BRUSH);
    

    GRAY_BRUSH -> Dunkelgrau
    DKGRAY_BRUSH -> Hellgrau
    BLACK_BRUSH -> Schwarz

    Das muss dann ungefähr so aussehen :

    CDC* pDC = GetDC();
    CPen pen(PS_SOLID, 5, RGB(0,0,0));
    	pDC->SelectObject(&pen);
    	pDC->SelectStockObject(DKGRAY_BRUSH);
    	pDC->Rectangle(CRect(300,200,50,50));
    	pDC->TextOut(100,100, "Das ist der Text");
    

    Gruß
    :: NoName ::



  • @NoName
    Das muss dann ungefähr so aussehen :
    Code:
    CDC* pDC = GetDC();
    CPen pen(PS_SOLID, 5, RGB(0,0,0));
    pDC->SelectObject(&pen);
    pDC->SelectStockObject(DKGRAY_BRUSH);
    pDC->Rectangle(CRect(300,200,50,50));
    pDC->TextOut(100,100, "Das ist der Text");

    Warum ist dann der Text von einem weißen Feld umgeben?

    Gruß Frostie



  • Hmm, das weiss ich leider auch net. Das muss wohl allgemein an der Funktion TextOut() liegen (!) und eine andere Funktion wie TextOut kenne ich leider nicht.

    Gruß
    :: NoName ::


Anmelden zum Antworten