CMenu::MeasureItem関数内でにHDCに取得

[戻る]
3939yoshi 2005/04/02(土) 16:14:49
MFC4.2のCMenuのクラスを派生させて、文字が大きいポップアップメニューを作成しようとして
います。
CMenu::MeasureItem()とCMenu::DrawItem()の二つの仮想関数をオーバーライドしています。
ここで、MeasureItem()関数内でGetTextExtentPotint32を使用して文字列の表示に必要なサ
イズを決定したいのですがHDCが無くサイズの決定が出来ません。
この問題を解決する適切な方法がわかりません。よろしくお願いします。

2005/04/02(土) 23:32:14
文面から察するに、フォントは自前で用意してあるが、
GetTextExtentPotint32の引数に渡すHDCが無くて困っている、ということでしょうか?

ならば

AfxGetMainWnd()->GetDC()

などで適当にその時点で使えるHDCを取得してきてそこにSelectObjectして
計算が終わったらフォントを戻すという作業をすればいいのではないでしょうか?

ちなみにMFCならCDC::GetTextExtent()という関数が使えます

また、もしメニューに使われているフォントを知りたいということなら
Googleで検索したところ

http://hp.vector.co.jp/authors/VA016117/menuicon.html

このようなサイトが見つかりましたが、参考になるでしょうか?

3939yoshi 2005/04/05(火) 21:50:23
[[解決]]
以下の様ような感じでコンストラクタで与えることにしました。
class CMenuBig : public CMenu
{
public:
    CMenuBig::CMenuBig(CWnd* pWnd){
        ASSERT(pWnd);
        ASSERT(pWnd->GetSafeHwnd());
        m_pWnd = pWnd;
    }

protected:
    CMenuBig::CMenuBig(){}
    CWnd* m_Wnd;
}

古いスレッドには追加発言できません。