MFCプログラミング(3):
クリップボードへのデータ形式の登録
どもです。
今回も、クリップボードネタです。
1.背景(簡単に)
アプリケーションにコピー機能を実装する際に、アプリケーション独自のデータ内容をコピーする機能が要求されました。
デフォルトで定義されているデータ形式では対応できなかったので、新たなデータ形式を定義する必要が出てきました。
2.対応
新たなデータ形式の「登録」そのものは、ものすごく簡単でした。
UINT RegisterClipboardFormatA(
LPCSTR lpszFormat
);
引数:lpszFormatに、新しいデータ形式の名前を設定します。
処理が成功した場合には、データ形式に対応する値が返ります。
また、すでにデータ形式が登録されていた場合も、その形式に対応する値が返ります。
処理が失敗した場合には、「0」が返ります。
一度登録すれば、毎回同じ値が得られます。
3.問題点
3.1.環境依存
上記関数を使用して、同じデータ形式名を指定しても、(PCの)環境によっては異なる値が得られる(かもしれない)可能性があります。
そのため、実装の際に#defineしたり定数で持たせたり、ということができません。
設計などで対応する余地は十二分にありますが、状況によっては問題/課題になる可能性があります。
3.2.書き込み/読み出しは別
上記関数で登録できたのは、データ形式の名前「のみ」です。
そのため、登録したデータ形式に対応するデータをクリップボードに実際に書き込む処理、データ形式、フォーマットについては独自に設計しなければなりません。
その辺の情報については、「C++オブジェクト 直列化」などのキーワードで調べていただければよいかと思います。
4.まとめ
今回は、クリップボードにアプリケーション独自のデータ形式を登録することができる、という内容について書きました。
ただ、あくまで「データ形式を登録するだけ」なので、クリップボードにデータを書き込む、データを読み出す際のデータフォーマットや処理については別途定義/設計する必要があるので、注意が必要です。
ではっ!
ディスカッション
コメント一覧
まだ、コメントがありません