3

次のスタイル
WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_TABSTOP | WS_GROUP | WS_VISIBLE
と ex-stles で作成されたメイン ウィンドウがあります
WS_EX_ACCEPTFILES | WS_EX_CONTROLPARENT | WS_EX_LEFT | WS_EX_LTRREADING


WS_VISIBLE | WS_CHILD | ES_READONLY
このメイン ウィンドウには、スタイルと ex-style で作成された編集コントロールである子ウィンドウがあります
WS_EX_CLIENTEDGE

このエディット コントロールをプログレス バー コントロールとして使用します。標準の Wind32 プログレス バー コントロール ( PROGRESS_CLASS) は使用したくありません。カスタム ペイントを実行したいからです (たとえば、塗りつぶしの色を動的に変更したり、テキストを表示したりします)。

次のコードを使用して、メイン ウィンドウの任意の領域をペイントできます。

// hWnd: Handle of the main window  
case WM_PAINT:
    hDc = BeginPaint(hWnd, &Ps);
        Rect = AFunctionToGetCornerThePointsOfTheEditControl();
        Rect.right = Rect.left + 3 * (Rect.right - Rect.left) / 4; // Fill 3/4 (75%) of it
        Rect.left   -= 10; // Enlarge the paint region a little
        Rect.top    -= 10; // so that we can see it if it stays
        Rect.bottom += 10; // under the edit control.
        hBrush = CreateSolidBrush(RGB(50,100,255));
        ret = FillRect(hDc, &Rect, hBrush); // ret = 1 always
        ler = GetLastError();               // ler = 0 
    EndPaint(hWnd, &Ps);
    break;

次のようになります。
塗装された窓の外観

このコードを少し変更して、代わりに子コントロールをペイントしました。

// hWndEdit: Handle of the edit control
case WM_PAINT:
    hDc = BeginPaint(hWndEdit, &Ps);
        Rect = AFunctionToGetCornerThePointsOfTheEditControl();
        Rect.right = Rect.left + 3 * (Rect.right - Rect.left) / 4; // Fill 3/4 (75%) of it
        Rect.left   -= 10;
        Rect.top    -= 10;
        Rect.bottom += 10;
        hBrush = CreateSolidBrush(RGB(50,100,255));
        ret = FillRect(hDc, &Rect, hBrush); // ret = 0 always
        ler = GetLastError();               // ler = 6 (ERROR_INVALID_HANDLE) 
    EndPaint(hWndEdit, &Ps);
    break;

今回はうまくいきません。画面領域の外にドラッグするとすぐに、メイン ウィンドウが完全に消え、完全に応答しなくなります。その下のデスクトップ アイコンは表示されますが、クリックできません。

では、子ウィンドウ (エディット コントロール) を描画するにはどうすればよいでしょうか?

4

2 に答える 2

-1

扱っているWM_PAINTはメインウィンドウのものです。所有者の WM_PAINT メッセージで編集ボックスを描画する必要があります。「hDc = BeginPaint(hWndEdit, &Ps);」からエラーが発生すると思いますが、確認してください。

于 2013-08-12T02:32:40.057 に答える