MFCのシングルドキュメントインターフェイス(SDI)プロジェクトでカスタムポップアップメニューを描画しようとしています。
hereから、私は、だから私はハンドルOnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
を追加し、この関数内でいくつかのコードを追加しましたが、私は右のビューをクリックしたときに、このコールバックは、フレームワークによって呼び出されていなかったことがわかっThe framework calls this member function for the owner of an owner-draw button control, combo-box control, list-box control, or menu when a visual aspect of the control or menu has changed.
を発見し、このように:
ポップアップメニューを動的に作成するにはどうすればいいですか?
機能build_dynamic_menu()
インサイドMFC SDIでカスタムメニューを動的に描画する方法
void Cdynamic_menu_sdiView::OnContextMenu(CWnd* /* pWnd */, CPoint point)
{
if (IDR_MY_MENU == 0)
return;
CMenu dynamicMenu, proxyMenu;
if (dynamicMenu.GetSafeHmenu())
dynamicMenu.DestroyMenu();
// Create a new popup menu.
if (dynamicMenu.CreatePopupMenu() == FALSE)
return;
if (proxyMenu.LoadMenu(IDR_MY_MENU) == FALSE)
return;
int nSubMenu = 1;
CMenu* pProxyMenu = proxyMenu.GetSubMenu(nSubMenu);
build_dynamic_menu(m_map_menu_element_2, pProxyMenu, dynamicMenu, CString(""));
//m_menu_on_draw = &dynamicMenu; // link up the dynamic menu to the on draw menu, so that we can print it on the screen
CPoint ptCurPos; // current cursor position
GetCursorPos(&ptCurPos);
dynamicMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, ptCurPos.x, ptCurPos.y, AfxGetMainWnd(), NULL);
}
は、それが深さ最初の検索機能で、私はInsertMenu(i, MF_BYPOSITION | MF_POPUP | MF_OWNERDRAW, uSubMenuID, strLabel);
ので、私は動的にポップアップメニューのテキストを変更することができることを実行します。ここでは
は、私は私のポップアップメニューを取得する方法であります。
ここに関数を入れるには時間がかかりすぎるので、私はその考えを述べます。
また、テキストの色と背景色を動的に変更したいので、コードでメニューを描画する方法を見つけようとしています。
どこから始めたらよいですか? owner drawn menusは私にとって良いアプローチですか?
オーナードローメニューですか?そうでない場合、その関数は呼び出されません。 – immibis
ありがとう、@immibis、私はこの最初の 'http:// www.codeproject.com /記事/ 7073 /作成方法 - オーナー描画メニュー - ステップバイステップを見ることを試みるでしょう – sflee
それdoesn 'OnDrawItem'と何か関係がありません。ポップアップメニューの読み込み方法を表示します。 –