以前の質問「引数 LPDISPATCH の使い方について」でOCXの引数にLPDISPATCH型を渡す回
答として下記が回答されていました。
>IFont、IFontDisp をヘルプで引くと解説が出てきます。
VSFLEXで同様にフォントの設定を行いたいのですが、CFONTのCreateFontで作成したフォ
ントをLPDISPATCH型に変更することは可能でしょうか。
OleCreateFontIndirect()を使ってIFontDisp*型のオブジェクトを作成し、
それを渡せば良いです。
CFontからの変換は、MFCソースのCOleControlContainer::CreateOleFont()の
コードが参考になると思います。
CFont から IFontDisp を作れればいいんでしょうが、方法がわかりません。
CFont::CreateFont の代わりに OleCreateFontIndirect を使うのはどうでしょうか。
Kelly さん回答ありがとうございます。
OleCreateFontIndirect()を使用することでフォントを設定することができました。
下記、OleCreateFontIndirectで検索したソースの抜粋です。
CFontでフォントを作成していましたが、下記で代用することにします。
//////////////////////////////////////////////////////////////
LPFONTDISP pOleFont = NULL;
FONTDESC fd;
fd.cbSizeofstruct = sizeof(FONTDESC);
fd.lpstrName = LMS ゴシック; //T2OLE(MS ゴシック);
fd.sWeight = 400;
fd.sCharset = SHIFTJIS_CHARSET;
fd.fItalic = 0;
fd.fUnderline = 0;
fd.fStrikethrough = 0;
fd.cySize.Lo = 22 * 100000;
fd.cySize.Hi = 0;
if (FAILED(::OleCreateFontIndirect(&fd, IID_IFontDisp, (void**)&pOleFont)))
{
pOleFont = NULL;
}
m_grid1.put_Font(pOleFont); grid1:VSFLEX
//////////////////////////////////////////////////////////////