Я создал приложение MFC и использовал формы для создания основного диалога управления. У него есть кнопки, редактировать элементы управления и т. Д. Все они работают нормально. Появится элемент меню «О» в главном меню, и все элементы управления/классы в коде, кажется, находятся там (ниже), но при выборе элемента меню «О», всплывающее окно не отображается. Я проделал некоторую отладку и обнаружил, когда называется onsystemcomand , значение NID составляет 0xf095 , то есть AFX_IDS_UNKNOWNTYPE от . Если я прокомментировал, как проверка значения, показанная моя поп, очень хорошо - так что все части есть - каким -то образом система не знает о «О меню»? Система? < /p>
void CguiDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
//the About menu item was selected and this should popup the About Dialog here
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
here are bits of the code
CguiDlg::CguiDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_GUI_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CguiDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CguiDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CguiDlg::OnBnClickedButton1)
// ...other controls
//I added this to test but the sysCommand should see it, this is never called
ON_COMMAND(IDM_ABOUTBOX, &CguiDlg::OnAbout)
END_MESSAGE_MAP()
BOOL CguiDlg::OnInitDialog()
{
#include
//draw all the control/input buttons and boxes now
CDialogEx::OnInitDialog();
// Add "About" menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
return TRUE; // return TRUE unless you set the focus to a control
}
//A selection from the menu (Just "About" for now)
void CguiDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
//the About menu item was selected and this should popup the About Dialog here
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
//separate method I experimented with
void CguiDlg::OnAbout()
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... displaying