2009年10月14日水曜日

クリップボード関係のウィンドウメッセージ

 CF_DIBからデータ抜き出すのに疲れたよ。
ところがCF_DIBがくるときは大抵CF_BITMAPも来てるんでCF_BITMAPで事足りるうえに、CF_BITMAPはとくに加工せずにそのまま描画できちゃうから、CF_BITMAPだけでいいんじゃないかと妥協したくなる。


休憩だ……っ!


 画像ソフトからコピーを行ったときに、どういうデータでクリップボードにセットされるのか調べてた。
・Microsoft (R) ペイント ver 5.1
 CF_BITMAP(2), CF_METAFILEPICT(3), CF_DIB(8), CF_ENHMETAFILE(14), CF_MAX(17)
・プリントスクリーン
 CF_BITMAP(2), CF_DIB(8), CF_MAX(17)
・PictBear ver2.0
 [背景]CF_BITMAP(2), CF_DIB(8), CF_MAX(17)
 [レイヤー]送られてこない
・AzPainter2 ver2.05
 [コピー]送られてこない
 [他へ出力→クリップボード]CF_BITMAP(2), CF_DIB(8), CF_MAX(17)
・Microsoft (R) Office Excel 2003
 [画像データを選択しコピーしたとき]CF_METAFILEPICT(3), CF_ENHMETAFILE(14)

おまけ
・エクスプローラでファイルをコピー
 CF_HDROP(15)
・InternetExplorerにて画像を右クリック→コピー
 CF_BITMAP(2), CF_DIB(8), CF_HDROP(15), CF_MAX(17)

といったような感じ。
 レイヤー関係はクリップボードを使わないみたいだが、だから不便なんだよ。32bitにしてAlphaColorを0にでもすればいいんじゃないかと思わんでもないが、そんな簡単な問題でもないんだろうな。
 Officeに関しては、クリップボード関係を調べてたら一例で乗ってたので実験がてら。


 ところでCF_MAXってなんじょい?


#if(WINVER >= 0x0500)
#define CF_MAX 18
#elif(WINVER >= 0x0400)
#define CF_MAX 17
#else
#define CF_MAX 15
#endif


 とWinUser.hにあり、値がまちまちのようだ。結局なんのパラメータ?

0 件のコメント: