これは奇妙な問題です。私は BitBlt 関数のドキュメントを読みましたが、ほとんどの場合問題なく動作しますが、オフセットが大きいソース四角形からデータをコピーしようとすると失敗し始めます (一部のみ、またはまったくコピーされません)。目的地のサイズよりも大きい...奇妙な?? 以下にいくつかのサンプルを示します。
これは私が使用するコードであり、結果は渡すパラメーターによって異なります。ビットマップの幅m_iTileAreaWidth + 2 * m_iTileAreaMargin
と高さはm_iTileAreaHeight + 2 * m_iTileAreaMargin
BOOL bBltOk = ::BitBlt(_hdcDest, 0, 0, m_iTileAreaWidth, m_iTileAreaHeight,
hdcSource, m_iTileAreaMargin, m_iTileAreaMargin, SRCCOPY);
m_iTileAreaMargin
が600でm_iTileAreaWidth
とm_iTileAreaHeight
が両方とも200の場合、ソース領域の130pxがコピーされます
m_iTileAreaMargin
が500でm_iTileAreaWidth
とm_iTileAreaHeight
が両方とも200 の場合、完全なソースがコピーされます
m_iTileAreaMargin
が800でm_iTileAreaWidth
とm_iTileAreaHeight
が両方とも200 の場合、ソース領域はコピーされません
このコードを使用すると、領域全体が生成されると確信しています。
bBltOk = ::BitBlt(_hdcDest, 0, 0, rcScreen.Widht(), rcScreen.Height(),
_hdcSource, 0, 0,SRCCOPY);
次に、生成された領域全体が表示されます
このような単純な機能でなぜこのような問題が発生するのか、誰にも分かりますか?