1

以下のコードで使用するSetBkMode(hdc, TRANSPARENT);と、メイン ウィンドウのサイズを変更すると (したがって、子が WM_PAINT メッセージを受信すると)、次の効果が得られます。

ここに画像の説明を入力

問題は、メイン ウィンドウのサイズを変更すると、「Find:」の古い領域が消去されてしまうことです。しかし、それはただそこにとどまります。

を使用しなければSetBkMode(hdc, TRANSPARENT);、この問題はありません。次のようになります。

ここに画像の説明を入力

、つまり、背景が白です。さらに、 を使用するSetBkMode(hdc, TRANSPARENT);と、メイン ウィンドウのサイズを変更する前と同じように見えます。SetBkMode(hdc, TRANSPARENT);だから私はここで働くとは思わない。

これhwndは style を持つ静的な子ですSS_BITMAP

この問題が発生する理由を知っていますか?

switch (message) {
    case WM_PAINT:
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);

        SelectObject(hdc, gDefaultGuiFont);
        SetBkMode(hdc, TRANSPARENT);

        RECT rc;
        GetClientRect(hwnd, &rc);
        DrawText(hdc, _TR("Find:"), -1, &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

        EndPaint(hwnd, &ps);

        return 0;

     .............
}
4

2 に答える 2

0

「固定」の長方形を使用してみてください。例えば

    RECT rc;
    GetClientRect(hwnd, &rc);
    rc.left += ...; rc.top += ...; // shift up-left point
    DrawText(hdc, _TR("Find:"), -1, &rc, DT_SINGLELINE | DT_LEFT | DT_TOP);

アイデアは、テキストを間違った位置 (1 回) と正しい位置 (2 回) に描画し、背景が 1 回だけ更新されることです。コードの一部についてこれ以上言うことはできません。

于 2012-08-05T09:24:41.893 に答える