AppendMenu(hMenu, MF_STRING, SC_CLOSE, _T("关闭")); 加_T显示 Use of underclared identifuer 怎么办
时间: 2023-11-27 11:55:14 浏览: 124
使用 `_T` 前需要包含头文件 `tchar.h`,请尝试在头文件中添加以下语句:
```C++
#include <tchar.h>
```
另外,请确保您的编译器已启用 Unicode 字符集。如果您使用的是 Visual Studio,可以在项目属性中的“常规”选项卡下选择“Unicode 字符集”。
相关问题
无此方法SetMenuStyle(MNS_MODELESS);
非常抱歉,我犯了一个错误。在 MFC 中,CMenu 并没有提供 SetMenuStyle 这个成员函数,因此无法通过设置菜单样式的方式来避免 CMenu 折叠子菜单。实现菜单不折叠子菜单的方式可以考虑在菜单项中添加“更多”菜单项,点击“更多”菜单项时,弹出一个新的对话框或窗口来显示所有子菜单。具体实现方式如下:
1. 首先,在菜单项中添加一个“更多”菜单项,用于显示所有的子菜单。示例代码如下:
```
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING, ID_MENU_ITEM1, _T("Menu Item 1"));
menu.AppendMenu(MF_STRING, ID_MENU_ITEM2, _T("Menu Item 2"));
// 添加“更多”菜单项
menu.AppendMenu(MF_STRING, ID_MORE, _T("More..."));
```
2. 在菜单项的消息处理函数中,判断如果点击了“更多”菜单项,就弹出一个新的对话框或窗口,并在对话框或窗口中显示所有的子菜单。示例代码如下:
```
void CMyWindow::OnCommand(UINT nID)
{
switch (nID)
{
case ID_MENU_ITEM1:
// 处理菜单项1的消息
break;
case ID_MENU_ITEM2:
// 处理菜单项2的消息
break;
case ID_MORE:
{
CDialog dlg(IDD_MORE_DIALOG, this);
dlg.DoModal();
}
break;
default:
break;
}
}
```
3. 在对话框或窗口中,显示所有的子菜单。具体实现方式可以使用 CMenu::GetMenuItemRect 函数获取“更多”菜单项的位置和大小,然后在对话框或窗口中显示所有的子菜单。示例代码如下:
```
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING, ID_MENU_ITEM3, _T("Menu Item 3"));
menu.AppendMenu(MF_STRING, ID_MENU_ITEM4, _T("Menu Item 4"));
// 获取“更多”菜单项的位置和大小
CRect rect;
CWnd* pWnd = GetDlgItem(IDC_MORE);
pWnd->GetWindowRect(&rect);
// 在对话框或窗口中显示所有的子菜单
CMenu* submenu = menu.GetSubMenu(0);
submenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rect.left, rect.bottom, this);
```
注意:以上代码仅供参考,具体实现方式需要根据实际需求进行调整。
BOOL CMfcSnakeDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 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); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return FALSE; // 除非将焦点设置到控件,否则返回 TRUE
这是一个 MFC 程序中的对话框类的成员函数,用于初始化对话框。在函数中,首先调用 CDialogEx::OnInitDialog() 进行基本的对话框初始化,然后将“关于...”菜单项添加到系统菜单中。接着设置对话框的图标,分别设置大图标和小图标。最后返回 FALSE,表示未将焦点设置到控件上,需要在后面的代码中手动设置。需要注意的是,在函数中还可以添加额外的初始化代码,但是需要放在 return 语句之前。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)