読者です 読者をやめる 読者になる 読者になる

GDI+でEMR構造体を使う

Graphics::EnumerateMetafileで指定するコールバック関数、EnumerateMetafileProcを見てみると、EnumEnhMetaFileのコールバック関数EnhMetaFileProcとの比較はそんなに難しくないことがわかる。

結局、recordTypeやflagsが増えたが、これはENHMETARECORDの一部のデータが表に出てきただけ。その代わりに、pStrの先頭から、EMR構造体が無くなった感じ。正直、それだと、GDIの定義する構造体に直接キャストができなくて困るのだが、デバッガなどでメモリの内容を直接のぞいた感じでは、実は、このアドレスから、-8すれば、EMR構造体になっているようだ。つまり、

EMR& emr = *(EMR*)(pStr - 8);

という処理をしても問題ないということ。