CMenu::MeasureItem関数内でにHDCに取得 – プログラミング – Home

通知
すべてクリア

[解決済] CMenu::MeasureItem関数内でにHDCに取得


3939yoshi
 3939yoshi
(@3939yoshi)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

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


引用未解決
トピックタグ
憂
 憂
(@憂)
ゲスト
結合: 20年前
投稿: 72
 

文面から察するに、フォントは自前で用意してあるが、
GetTextExtentPotint32の引数に渡すHDCが無くて困っている、ということでしょうか?

ならば

AfxGetMainWnd()->GetDC()

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

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

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

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

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


返信引用
3939yoshi
 3939yoshi
(@3939yoshi)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

以下の様ような感じでコンストラクタで与えることにしました。
class CMenuBig : public CMenu
{
public:
CMenuBig::CMenuBig(CWnd* pWnd){
ASSERT(pWnd);
ASSERT(pWnd->GetSafeHwnd());
m_pWnd = pWnd;
}

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました