オブジェクト属性を取得し、新しいオブジェクトを選択する

アプリケーションは、 GetCurrentObject 関数と GetObject 関数を呼び出すことによって、ペン、ブラシ、パレット、フォント、またはビットマップの属性を取得できます。 GetCurrentObject 関数は、DC に現在選択されているオブジェクトを識別するハンドルを返します。GetObject 関数は、オブジェクトの属性を記述する構造体を返します。

次の例は、アプリケーションが現在のブラシ属性を取得し、取得したデータを使用して新しいブラシを選択する必要があるかどうかを判断する方法を示しています。

    HDC hdc;                     // display DC handle  
    HBRUSH hbrushNew, hbrushOld; // brush handles  
    HBRUSH hbrush;               // brush handle  
    LOGBRUSH lb;                 // logical-brush structure  
 
    // Retrieve a handle identifying the current brush.  
 
    hbrush = GetCurrentObject(hdc, OBJ_BRUSH); 
 
    // Retrieve a LOGBRUSH structure that contains the  
    // current brush attributes.  
 
    GetObject(hbrush, sizeof(LOGBRUSH), &lb); 
 
    // If the current brush is not a solid-black brush,  
    // replace it with the solid-black stock brush.  
 
    if ((lb.lbStyle != BS_SOLID) 
           || (lb.lbColor != 0x000000)) 
    { 
        hbrushNew = GetStockObject(BLACK_BRUSH); 
        hbrushOld = SelectObject(hdc, hbrushNew); 
    } 
 
    // Perform painting operations with the solid-black brush.  
 
 
    // After completing the last painting operation with the new  
    // brush, the application should select the original brush back  
    // into the device context and delete the new brush.  
    // In this example, hbrushNew contains a handle to a stock object.  
    // It is not necessary (but it is not harmful) to call  
    // DeleteObject on a stock object. If hbrushNew contained a handle  
    // to a brush created by a function such as CreateBrushIndirect,  
    // it would be necessary to call DeleteObject.  
 
    SelectObject(hdc, hbrushOld); 
    DeleteObject(hbrushNew); 

Note

アプリケーションは、 SelectObject 関数を初めて呼び出すときに、元のブラシ ハンドルを保存しました。 このハンドルは、新しいブラシで最後の描画操作が完了した後に、元のブラシを DC に戻して選択できるように保存されます。 元のブラシが DC に戻って選択されると、新しいブラシが削除され、GDI ヒープ内のメモリが解放されます。