News | Articles | Libraries | Developer Tools | Books | Forum Links | Search   
Sections:
 

QA: How can I insert menu in a dialog?

By Vassili Philippov, October 01, 2001.
Print version

Question

In VC I can edit dialog's menu in a resource editor. I cannot find menu editing in eVC dialog resource editor. How can I use menu in dialogs?

Answer

In eVC menu is not a part of a window but is a separate control that takes place in the client area and has its own handle. There are several ways to add menu into a dialog.

Using CCeCommandBar class

MFC dialogs have built-in command bar (read more). You can insert menu using InsertMenuBar method of this command bar. The best place to insert menu into a dialog is OnInitDialog method.

CCeCommandBar *pCommandBar = (CCeCommandBar*)m_pWndEmptyCB; pCommandBar->InsertMenuBar(IDR_MENUBAR);

Using SHCreateMenuBar function

Since Pocket PC Windows CE provides SHCreateMenuBar function for adding a menu to a window. Here is a sample of using this funtion:

SHMENUBARINFO info; info.cbSize = sizeof(info); info.hwndParent = m_hWnd; info.dwFlags = 0; info.nToolBarId = IDR_MENUBAR; info.hInstRes = ::AfxGetInstanceHandle(); info.nBmpId = 0; info.cBmpImages = 0; SHCreateMenuBar(&info);

Sample

You can download a sample project (27 Kb) that demonstrates using menus if dialogs. The most important part of this project is OnInitDialog method of the dialog. Here it is:

BOOL CMenuInDialogDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon CenterWindow(GetDesktopWindow()); // center to the hpc screen //The first way. Using CCeCommandBar class. CCeCommandBar *pCommandBar = (CCeCommandBar*)m_pWndEmptyCB; pCommandBar->InsertMenuBar(IDR_MENUBAR); /* //The second way. Using SHCreateMenuBar function. SHMENUBARINFO info; info.cbSize = sizeof(info); info.hwndParent = m_hWnd; info.dwFlags = 0; info.nToolBarId = IDR_MENUBAR; info.hInstRes = ::AfxGetInstanceHandle(); info.nBmpId = 0; info.cBmpImages = 0; SHCreateMenuBar(&info); */ return TRUE; // return TRUE unless you set the focus to a control }

Discuss

Discuss this article. Here you can write your comments and read comments of other developers.
Rate this article:     Poor Excellent    
 12345 
© 2001-2005 Pocket PC Developer Network, a division of Spb Software House