0

フックを使用して、プログラムの同じウィンドウにペイントすることで、制御できないプログラムから自分の関数を呼び出そうとしています。しばらくは機能しますが、クラッシュすると、GDI リークなどの可能性があると思われます。誰かがこのコードを見て、一般的な構造の観点からコメントできるか、改善できるかどうか疑問に思っています。2 つ目の問題は、テキストが数秒ごとにちらつくことです。この点で誰も助けることができますか?C++ GDI に関しては、私はまだ初心者であることに注意してください。ありがとう。

void Paint(HWND hWnd)
{
    HDC hdc = GetWindowDC(hWnd);
    HBRUSH Brush = CreateSolidBrush(RGB(255,255,0));
    HPEN   Pen = CreatePen(PS_DOT,1,RGB(255,255,0));
    HGDIOBJ PriorBrush = SelectObject(hdc, Brush);
    HGDIOBJ PriorPen = SelectObject(hdc, Pen);

    Gdiplus::Graphics g(hdc);
    Gdiplus::Pen pen(Gdiplus::Color(255, 255, 0, 0), 1);
    g.DrawLine(&pen,fpx,fpy,spx,spy);
    Font font(&FontFamily(L"Arial"), 12);
    LinearGradientBrush brush(Rect(0,0,100,100), Color::Red, Color::Yellow, LinearGradientModeHorizontal);
    Status st = g.DrawString(L"SampleText!", -1, &font, PointF((float)spx, (float)spy), &brush);
    assert(st == Ok);

    SelectObject(hdc,PriorBrush);
    SelectObject(hdc,PriorPen);
    ReleaseDC(hWnd,hdc);
    return;
}

///

以下を使用して上記の呼び出しを行います。

    case WM_PAINT:
    {
        LRESULT l = CallWindowProc(hook, hWnd, uMsg, wParam, lParam);
        Paint(hWnd);
        return l;
    }
4

2 に答える 2

0

あなたは漏れBrushています-DCからそれらを選択した後Penに使用する必要があります。DeleteObject

(またはそれらを取り除きます-それらは使用されていますか?)

于 2013-04-23T21:44:35.180 に答える