別のデバイスコンテキストの一部であるデバイスコンテキストを作成できますか?

StackOverflow https://stackoverflow.com/questions/4551280

  •  13-10-2019
  •  | 
  •  

質問

入力としてデバイスコンテキストハンドルHDCを取得し、描画に使用するグラフィックスコントロールをサブクラス化しました。私の新しいコントロールは、より大きな画像の上にある元のコントロールです。コードの再利用のための元のコントロールのdraw()メソッドを呼び出すことができますが、どのように進むべきかわかりません。

これがアイデアです:

void CCheckBox::DrawCtrl( HDC hdc, HDC hdcTmp, LPSIZE pCtlSize, BYTE alpha ) {
    // original method draws a checkbox
}

void CBorderedCheckBox::DrawCtrl( HDC hdc, HDC hdcTmp, LPSIZE pCtlSize, BYTE alpha ) {
    // Draw my image here
    // Create new hdc2 and hdcTemp2 which are just some portion of hdc and hdcTemp
    //   For example, hdc2 may just be a rectangle inside of hdc that is 20 pixels 
    //   indented on all sides.
    // Call CCheckBox::DrawCtrl() with hdc2 and hdcTemp2
}
役に立ちましたか?

解決

デバイスのコンテキストとは何かを混乱させていると思います。デバイスのコンテキストは、画面バッファーやビットマップなど、他のものなど、描画できるメモリ内の場所です。画面に描きたいだけなので、DCは1つだけ必要です。あなたが望むことを達成するために、私は描く場所を伝える関数に長方形を渡すことをお勧めします。オプションで、パフォーマンスが低いと、より小さな領域の新しいビットマップを作成し、ビットマップのDCを引き出すための関数を与えることができます。私が考えているので、それはあなたがそもそもあなたが意味したことだったかもしれません:P幸運!

他のヒント

絶対確実ではありませんが、DCをDCのサブセクションとして偽造できます。 SetViewPortorgexSelectObject 問題のサブエリアにクリップされた地域があります。

このアプローチの問題は、描画コードがすでにこれらのAPIを使用している場合、マスキングとオフセットを既存のオフセットとクリッピング領域と組み合わせる必要があることに注意する必要があることです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top