Я создал приложение 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
MFC о модели не отображается ⇐ C++
Программы на C++. Форум разработчиков
1751689397
Anonymous
Я создал приложение 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();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79618078/mfc-about-model-not-displaying[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия