>GHNDだけにしても正常に動作しました。
>GMEM_SHAREという定数はどんなものなのでしょうか。
実は私も GMEM_SHARE は意味もわからず使ってました(サンプルプログラム丸写し/爆)。
ちゃんと調べてみたところ、今時の(正確にはWin95以降?)のWindosであれば、 GHND のみで良いみたいです。私の見たサンプルでは、Windows 3.xやそれ以前との互換性のために GHND Or GMEM_SHARE としてあったみたいです。
ちなみに、
GMEM_SHARE
ダイナミックデータエクスチェンジ (DDE) 対話のためにDDE 関数が使用するメモリを確保します。Windows 3.x とは異なり、このメモリはグローバルには共有されませんが互換性のために使用できます。
だそうです。spi_system.sbp 内で定義されています。
DDE 関数は、ActiveX の前世の前世とでも思ってください。
>文字列の場合とビットマップの場合とでは
>クリップボードの使い方が異なるのでしょうか。
一緒です(そのはず)。・・・が、おかしいですね。
DeleteObject( hBmp )した時点で消えるのが普通だと思うんですが。
考えられる要因としては、APIを呼び出しているが故かもしれません。
hBmp の指し示すバッファ自体はプログラム側としてはノータッチ(終了時にも開放はされない)ですよね。なのでDeleteObject(hBmp) で明示的に開放してやる必要があるんですが、これはAPIです。よってシステムと強く関連している可能性があります。SetClipboardData( CF_BITMAP, hBmp )をした時点で、hBmp の所有権はシステムに移るので、それゆえにDeleteObject()をしても開放されず、有効のままクリップボードに残るのかもしれません。
デバイスコンテキスト周りは詳しくないので、間違っていたら、ごめんなさい。
そういえば、以前にも
最終行の「DeleteObject」なのですが、使用した方が良いのでしょうか?
私は、クリップボードの内容であり共有であるため削除してはいけないのでは?と思うのですが、この行を実行してもクリップボードの内容は消えません。
しかもDeleteObjectの戻り値が1になっているようです。
という記事(投稿者hiraさん)がありましたね。このときはこれに対するレスはありませんでしたが、詳しい方いらっしゃいましたら、ぜひお願いします。