MFC4.2のCMenuのクラスを派生させて、文字が大きいポップアップメニューを作成しようとして
います。
CMenu::MeasureItem()とCMenu::DrawItem()の二つの仮想関数をオーバーライドしています。
ここで、MeasureItem()関数内でGetTextExtentPotint32を使用して文字列の表示に必要なサ
イズを決定したいのですがHDCが無くサイズの決定が出来ません。
この問題を解決する適切な方法がわかりません。よろしくお願いします。
文面から察するに、フォントは自前で用意してあるが、
GetTextExtentPotint32の引数に渡すHDCが無くて困っている、ということでしょうか?
ならば
AfxGetMainWnd()->GetDC()
などで適当にその時点で使えるHDCを取得してきてそこにSelectObjectして
計算が終わったらフォントを戻すという作業をすればいいのではないでしょうか?
ちなみにMFCならCDC::GetTextExtent()という関数が使えます
また、もしメニューに使われているフォントを知りたいということなら
Googleで検索したところ
http://hp.vector.co.jp/authors/VA016117/menuicon.html
このようなサイトが見つかりましたが、参考になるでしょうか?
以下の様ような感じでコンストラクタで与えることにしました。
class CMenuBig : public CMenu
{
public:
CMenuBig::CMenuBig(CWnd* pWnd){
ASSERT(pWnd);
ASSERT(pWnd->GetSafeHwnd());
m_pWnd = pWnd;
}
protected:
CMenuBig::CMenuBig(){}
CWnd* m_Wnd;
}