社区
C++ 语言
帖子详情
vc 托盘菜单项添加事件
xx314250548
2012-05-12 11:54:28
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING,WM_DESTROY,"退出");
menu.AppendMenu(MF_STRING,WM_DESTROY,"离开");//这里的离开想添加自己的事件,如何实现
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
...全文
75
4
打赏
收藏
vc 托盘菜单项添加事件
CMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(MF_STRING,WM_DESTROY,"退出"); menu.AppendMenu(MF_STRING,WM_DESTROY,"离开");//这里的离开想添加自己的事件,如何实现 menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
HMILY198867
2013-04-11
打赏
举报
回复
我试过了,不行啊 !
就叫我海
2012-05-12
打赏
举报
回复
消息映射...
跟平常的菜单响应消息是一样的..
W170532934
2012-05-12
打赏
举报
回复
定义一个消息和一个消息处理函数,把你的Menu项与这个消息关联起来。
cc___999
2012-05-12
打赏
举报
回复
先写好对应的函数如OnDestayQuit,然后在BEGIN_MESSAGE_MAP 和END_MESSAGE_MAP中定义ON_COMMAND(WM_DESTROY,OnDestayQuit),你的两个菜单消息ID不能一样啊
VC
托盘
程序
制作系统
托盘
程序
VC
点击数:695 发布日期:2006-9-24 12:32:00 【收藏】 【评论】 【打印】 【编程爱好者论坛】 【关闭】 其实,在任务条上
添加
托盘
比较容易实现,调用
VC
中的函数就可以解决,只是注意协调。接下来,我将给大家提供一个类,可以很容易的达到我们的目的,希望它能给大家一点帮助,如果你发现BUG也欢迎你和我联系。运行程序,左键双击或者右键单击任务条上的
托盘
,我们可以看到效果。 1. 有关类CsystemTray的说明:(文章的最后有本类的具体实现代码) CSystemTray是CObject的扩展类,实现以下功能: 1、在任务条显示
托盘
图标。 2、设置提示Tip 3、设置图标的形状 主要函数说明: Create(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID); 功能: 生成一个图标。 参数说明: pWnd:程序的主窗口, uCallbackMessage:对应的消息映射, szTip:鼠标停留时的提示文字, icon:显示的图标, uID:与之对应的菜单ID · BOOL CSystemTray::SetIcon(HICON hIcon) BOOL CSystemTray::SetIcon(LPCTSTR lpszIconName) BOOL CSystemTray::SetIcon(UINT nIDResource) BOOL CSystemTray::SetStandardIcon(LPCTSTR lpIconName) BOOL CSystemTray::SetStandardIcon(UINT nIDResource) 功能:更改
托盘
上的图标。 void CSystemTray::ShowIcon() 功能:显示图标。 · BOOL CSystemTray::SetTooltipText(LPCTSTR pszTip) BOOL CSystemTray::SetTooltipText(UINT nID) 功能:提示显示文字。 2. 使用本类的步骤如下: 第一步:在
VC
编程环境下,建立一个工程,基于对话框或者是单文档(或者是多文档)你随便,所有的选项都取默认值即可。 第二步:在mainfrm.h中定义变量CSystemTray m_TrayIcon;并
添加
函数声明: afx_msg LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 第三步:在StaAFX.h中定义消息: #define WM_ICON_NOTIFY WM_USER + 1 第四步:自定义菜单IDR_POPUPMENU,其中最少包括一项:ID:ID_VIEW_MAIN_WINDOW,Caption为"显示主窗口",并为该项在类CmainFrame中
添加
消息映射函数,COMMAND和UPDATE_COMMAND_UI。 第五步:在Mainframe.cpp中
添加
以下内容: 1. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_COMMAND(ID_VIEW_MAIN_WINDOW, OnViewMainWindow) ON_UPDATE_COMMAND_UI(ID_VIEW_MAIN_WINDOW, OnUpdateViewMainWindow) ON_MESSAGE(WM_ICON_NOTIFY, OnTrayNotification) ON_WM_SYSCOMMAND() //}}AFX_MSG_MAP END_MESSAGE_MAP() 2. void CMainFrame::OnViewMainWindow() { if(IsWindowVisible()) { ShowWindow(SW_SHOWMINIMIZED); ShowWindow(SW_HIDE); m_TrayIcon.SetIcon(IDI_ICON1); } else { ShowWindow(SW_SHOW); ShowWindow(SW_RESTORE); m_TrayIcon.SetIcon(IDI_ICON2); } } void CMainFrame::OnUpdateViewMainWindow(CCmdUI* pCmdUI) { pCmdUI->SetCheck(IsWindowVisible()); } 3. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; //创建
托盘
图标 if (!m_TrayIcon.Create(this, WM_ICON_NOTIFY,"大屏实时显示程序", NULL, IDR_POPUPMENU)) return -1; m_TrayIcon.SetIcon(IDI_ICON1); SetMenu(NULL); return 0; } 4. LRESULT CMainFrame::OnTrayNotification(WPARAM wParam, LPARAM lParam) { if (wParam != IDR_POPUPMENU) return 0L; CMenu menu, *pSubMenu; if (LOWORD(lParam) == WM_RBUTTONUP) { CPoint pos; GetCursorPos(&pos;); if (!menu.LoadMenu(IDR_POPUPMENU)) return 0; if (!(pSubMenu=menu.GetSubMenu(0))) return 0; ::SetMenuDefaultItem(pSubMenu->m_hMenu, 3, TRUE); SetForegroundWindow(); pSubMenu->TrackPopupMenu(TPM_RIGHTALIGN | TPM_BOTTOMALIGN | TPM_RIGHTBUTTON, pos.x, pos.y, this); menu.DestroyMenu(); } else if (LOWORD(lParam) == WM_LBUTTONDBLCLK) { if (!menu.LoadMenu(IDR_POPUPMENU)) return 0; if (!(pSubMenu = menu.GetSubMenu(0))) return 0; SetForegroundWindow(); //激活第2个
菜单项
SendMessage(WM_COMMAND, pSubMenu->GetMenuItemID(1), 0); menu.DestroyMenu(); } return 0; } void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam) { if(nID==SC_MINIMIZE) { ShowWindow(SW_SHOWMINIMIZED); ShowWindow(SW_HIDE); } else CFrameWnd::OnSysCommand(nID, lParam); } 3. 附录:类的实现代码 CsystemTray的头文件 #ifndef _INCLUDED_SYSTEMTRAY_H_ #define _INCLUDED_SYSTEMTRAY_H_ ///////////////////////////////////////////////////////////////////////////// // CSystemTray window class CSystemTray : public CObject { // Construction/destruction public: CSystemTray(); CSystemTray(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID); virtual ~CSystemTray(); // Operations public: CFrameWnd * m_pFrame; BOOL Enabled() { return m_bEnabled; } BOOL Visible() { return !m_bHidden; } //Create the tray icon Create(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID); //Change or retrieve the Tooltip text BOOL SetTooltipText(LPCTSTR pszTooltipText); BOOL SetTooltipText(UINT nID); CString GetTooltipText() const; //Change or retrieve the icon displayed BOOL SetIcon(HICON hIcon); BOOL SetIcon(LPCTSTR lpIconName); BOOL SetIcon(UINT nIDResource); BOOL SetStandardIcon(LPCTSTR lpIconName); BOOL SetStandardIcon(UINT nIDResource); HICON GetIcon() const; void HideIcon(); void ShowIcon(); void RemoveIcon(); void MoveToRight(); //Change or retrieve the window to send notification messages to BOOL SetNotificationWnd(CWnd* pNotifyWnd); CWnd* GetNotificationWnd() const; //Default handler for tray notification message // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CSystemTray) //}}AFX_VIRTUAL // Implementation protected: BOOL m_bEnabled; // does O/S support tray icon? BOOL m_bHidden; // Has the icon been hidden? NOTIFYICONDATA m_tnd; DECLARE_DYNAMIC(CSystemTray) }; #endif /////////////////////////////////////////////////// CsystemTray的实现文件 #include "stdafx.h" #include "SystemTray.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNAMIC(CSystemTray, CObject) ///////////////////////////////////////////////// // CSystemTray construction/creation/destruction CSystemTray::CSystemTray() { memset(&m_tnd, 0, sizeof(m_tnd)); m_bEnabled = FALSE; m_bHidden = FALSE; } CSystemTray::CSystemTray(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szToolTip, HICON icon, UINT uID) { Create(pWnd, uCallbackMessage, szToolTip, icon, uID); m_bHidden = FALSE; } BOOL CSystemTray::Create(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szToolTip, HICON icon, UINT uID) { // this is only for Windows 95 (or higher) VERIFY(m_bEnabled = ( GetVersion() & 0xff ) >= 4); if (!m_bEnabled) return FALSE; //Make sure Notification window is valid VERIFY(m_bEnabled = (pWnd && ::IsWindow(pWnd->GetSafeHwnd()))); if (!m_bEnabled) return FALSE; //Make sure we avoid conflict with other messages ASSERT(uCallbackMessage >= WM_USER); //Tray only supports tooltip text up to 64 characters ASSERT(_tcslen(szToolTip) <= 64); // load up the NOTIFYICONDATA structure m_tnd.cbSize = sizeof(NOTIFYICONDATA); m_tnd.hWnd = pWnd->GetSafeHwnd(); m_tnd.uID = uID; m_tnd.hIcon = icon; m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; m_tnd.uCallbackMessage = uCallbackMessage; strcpy (m_tnd.szTip, szToolTip); // Set the tray icon m_pFrame = (CFrameWnd*)pWnd; VERIFY(m_bEnabled = Shell_NotifyIcon(NIM_ADD, &m_tnd)); return m_bEnabled; } CSystemTray::~CSystemTray() { RemoveIcon(); } ///////////////////////////////////////////// // CSystemTray icon manipulation void CSystemTray::MoveToRight() { HideIcon(); ShowIcon(); } void CSystemTray::RemoveIcon() { if (!m_bEnabled) return; m_tnd.uFlags = 0; Shell_NotifyIcon(NIM_DELETE, &m_tnd); m_bEnabled = FALSE; } void CSystemTray::HideIcon() { if (m_bEnabled && !m_bHidden) { m_tnd.uFlags = NIF_ICON; Shell_NotifyIcon (NIM_DELETE, &m_tnd); m_bHidden = TRUE; } } void CSystemTray::ShowIcon() { if (m_bEnabled && m_bHidden) { m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; Shell_NotifyIcon(NIM_ADD, &m_tnd); m_bHidden = FALSE; } } BOOL CSystemTray::SetIcon(HICON hIcon) { if (!m_bEnabled) return FALSE; m_tnd.uFlags = NIF_ICON; m_tnd.hIcon = hIcon; return Shell_NotifyIcon(NIM_MODIFY, &m_tnd); } BOOL CSystemTray::SetIcon(LPCTSTR lpszIconName) { HICON hIcon = AfxGetApp()->LoadIcon(lpszIconName); return SetIcon(hIcon); } BOOL CSystemTray::SetIcon(UINT nIDResource) { HICON hIcon = AfxGetApp()->LoadIcon(nIDResource); return SetIcon(hIcon); } BOOL CSystemTray::SetStandardIcon(LPCTSTR lpIconName) { HICON hIcon = LoadIcon(NULL, lpIconName); return SetIcon(hIcon); } BOOL CSystemTray::SetStandardIcon(UINT nIDResource) { HICON hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(nIDResource)); return SetIcon(hIcon); } HICON CSystemTray::GetIcon() const { HICON hIcon = NULL; if (m_bEnabled) hIcon = m_tnd.hIcon; return hIcon; } ////////////////////////////////////////////////// // CSystemTray tooltip text manipulation BOOL CSystemTray::SetTooltipText(LPCTSTR pszTip) { if (!m_bEnabled) return FALSE; m_tnd.uFlags = NIF_TIP; _tcscpy(m_tnd.szTip, pszTip); return Shell_NotifyIcon(NIM_MODIFY, &m_tnd); } BOOL CSystemTray::SetTooltipText(UINT nID) { CString strText; VERIFY(strText.LoadString(nID)); return SetTooltipText(strText); } CString CSystemTray::GetTooltipText() const { CString strText; if (m_bEnabled) strText = m_tnd.szTip; return strText; } //////////////////////////////////////////////// // CSystemTray notification window stuff BOOL CSystemTray::SetNotificationWnd(CWnd* pWnd) { if (!m_bEnabled) return FALSE; //Make sure Notification window is valid ASSERT(pWnd && ::IsWindow(pWnd->GetSafeHwnd())); m_tnd.hWnd = pWnd->GetSafeHwnd(); m_tnd.uFlags = 0; return Shell_NotifyIcon(NIM_MODIFY, &m_tnd); } CWnd* CSystemTray::GetNotificationWnd() const { return CWnd::FromHandle(m_tnd.hWnd); } 引用地址:http://blog.programfan.com/trackback.asp?id=18739
VC
6风格界面
VC
6界面类编程小实例\A Drag and Drop List Control.doc ...................\MFC窗口位置管理详细分析及实例.doc ...................\Toolbar制作菜单条过程详解.doc ...................\
VC
++6.0定制窗口的方法.doc ...................\
VC
++中MFC窗口对象的清除.doc ...................\
VC
++任务栏提示区图标的实现.doc ...................\
VC
++动态加入和删除菜单的方法.doc ...................\
VC
++环境下浮动工具条的编程.doc ...................\
VC
++环境下菜单和工具栏的动态修改技术.doc ...................\
VC
中如何捕获和释放鼠标.doc ...................\
VC
控件 TreeCtrl 与 ListCtrl 演示.doc ...................\
VC
界面编程总结.doc ...................\
VC
编程中如何在界面上实现3D文字.doc ...................\
VC
编程实现IE风格的界面.doc ...................\
VC
编程实现IE风格的界面之叙述.doc ...................\
VC
设计分割视图通用创建框架.doc ...................\
VC
通用控件编程之CImageList控件.doc ...................\Visual C++中位图按钮的新颖设计.doc ...................\Visual C++中实现对图像数据的读取显示.doc ...................\Visual C++中的图形特技.doc ...................\Visual C++模态对话框消息处理机制的分析.doc ...................\Visual C++窗体设计技巧集.doc ...................\Visual C++窗口标题改变的几种方法.doc ...................\Windows 界面设计:拉帘按钮设计.doc ...................\XListBox-自画条目背景和文字颜色的listbox控件.doc ...................\XP风格控件界面库.doc ...................\一个功能强大的MFC界面处理扩展库:CJ60Lib.doc ...................\一个屏幕捕捉的例子.doc ...................\一段使窗口透明的代码(仅适用于2000).doc ...................\一种漂亮的自绘菜单.doc ...................\为CListBox加上智能水平滚动条.doc ...................\为列表控件
添加
水平滚动条.doc ...................\为对话框程序
添加
工具条和状态栏.doc ...................\从资源中加载皮肤, 使用免费界面库 AppFace For
VC
0.2 美化您的软件.doc ...................\位图文件读写综述.doc ...................\使用CRectTracker类进行对象动态定位.doc ...................\使用CTabCtrl控件实现属性页功能.doc ...................\使用测试优先方法开发用户界面.doc ...................\关于内存DC绘图防止屏幕闪烁说明.doc ...................\创建有个性的对话框之MFC篇.doc ...................\利用
VC
编程在界面上实现3D文字.doc ...................\利用钩子实现菜单阴影效果.doc ...................\制作 MSN、QQ 的消息提示窗口.doc ...................\单文档与多视的实现方法.doc ...................\图像平滑滚动效果的
VC
实现.doc ...................\在(CListView)列表视图中
添加
右键菜单.doc ...................\在ATL Browser Helper对象中使用WTL TreeView.doc ...................\在SDI MDI程序的工具条上加入漂亮的标题头.doc ...................\在
VC
++6.0开发中实现全屏显示.doc ...................\在
VC
下显示JPEG、GIF格式图像的一种简便方法.doc ...................\在
VC
中用CMenuXP使应用程序拥有Office XP风格的界面.doc ...................\在
VC
中透明浮动按键的实现.doc ...................\在Windows95,98中实现苹果窗口界面.doc ...................\在单文档中
添加
系统
菜单项
.doc ...................\在单文档程序中动态切换多个窗体.doc ...................\在对话框上加超链接.doc ...................\在类
VC
的界面实现中加入目录树.doc ...................\在视图中同步显示鼠标的位置.doc ...................\如何创建一个不规则形状的窗口.doc ...................\如何创建无模式对话框.doc ...................\如何创建有模式对话框.doc ...................\如何制作弹出式菜单.doc ...................\如何在
VC
中改变控件的背景色.doc ...................\如何在状态条中加入图像.doc ...................\如何模拟《WORD》的窗口形式.doc ...................\如何编写类似于Word97的工具栏.doc ...................\如何隐藏显示在任务栏中的对话框程序.doc ...................\实现带阴影弹出的窗口.doc ...................\实现真正的Windows屏幕保护程序.doc ...................\对CXPStyleButtonST的改造.doc ...................\对话框隐藏的几种方法.doc ...................\带有菜单的EDIT控件实现.doc ...................\平面、带图片的按钮.doc ...................\扩展COleDropTarget类来支持任意窗口拖放.doc ...................\拖拉机客户端任务书.doc ...................\数据库开发之窗体编程.doc ...................\文档与视图的建立和关联.doc ...................\无闪烁刷屏技术的实现.doc ...................\显示作为窗口或对话框背景的位图.doc ...................\最简单的界面增强库EasySkin.doc ...................\树视控件在多文档中的使用.doc ...................\根据文本串的长度改变窗口的大小.doc ...................\用MFC对话框做无闪烁图片重绘.doc ...................\用SDK实现分隔条.doc ...................\用
VC
++制作有滚动字幕效果的软件封面.doc ...................\用
VC
设计
托盘
图标程序.doc ...................\用Visual C++实现带阴影弹出窗口的技术.doc ...................\用户界面设计的技巧与技术.doc ...................\百叶窗式面板组.doc ...................\窗口类的诞生.doc ...................\类似
Vc
和Outlook的界面.doc ...................\编程打开特殊的系统窗口.doc ...................\自绘菜单的实现.doc ...................\自绘边框窗口.doc ...................\让对话框显示背景图.doc ...................\谈
VC
++中的Progress控件的使用.doc
用
VC
#.NET+OpenGL开发交互式CAD系统
本课程用
VC
#.NET结合OpenGL,从无到有开发一个功能较完整的小型交互式CAD系统。 作者有交互式CAD系统、动态几何系统开发经验。出版过交互式CAD系统开发方面的图书。 课程先讲准备知识,然后讲整个系统的开发思路和...
VC
_openSource:分享一套
vc
++的实例源代码,有几十个,分了15类
VC
_openSource 分享一套
vc
++的实例源代码,有几十个,分了15类 分享者:CSDN版主:caozhy 代码CSDN下载地址: : (1积分) #原始目录 01初步与界面设计 01初步与界面设计\ 01菜单应用实例 01总体与界面设计\ 01菜单应用实例\ 001在系统菜单中
添加
菜单项
-例1 01初步与界面设计\ 01菜单应用实例\ 002带图标的程序菜单-例1 01初步与界面设计\ 01菜单应用实例\ 003浮动的菜单-例1 01初步与界面设计\ 02投放菜单应用实例 01初始与界面设计\ 02放入菜单应用实例\ 001在控件上拖动快捷菜单-例1 01初步与界面设计\ 02投放菜单应用实例\ 002个性化的投放菜单-例1 01初始与界面设计\ 02投放菜单应用实例\ 003任务栏
托盘
放置菜单-例1 01初步与界面设计\ 03工具栏应用实例 01综合与界面
软件名:ESET_
VC
52_UPID(AUTOID)
软件名:ESET_
VC
52_UPID(AUTOID) 版本:1.7.6.3 支持ESET版本:2.7、3.0、4.0 、4.2 语言:简体中文 类型:ESET(NOD32)ID获取工具 授权:免费版 适合32/64位系统:2000/2003/2008/XP/Vista//Win7/Win Server 制作:开达石、杀破狼 来源:精睿(
vc
52).网络安全 说明: 此软件仅供研究学习使用,请勿用于商业目的,请在下载后24小时内删除! 如果喜欢ESET(NOD32)请购买正版软件 精睿ESET_
VC
52_UPID获取器,本工具支持2.7、3.0、4.0、4.2版本。 本工具运行时先验证电脑里ESET的ID(支持所有版本。包括4.2),无效就自动申请ID验证后写入注册表。 PS:特别感谢麦田守望者和nohack的帮助。 1.22#更新支持4.0(不需要关闭自我保护) 1.23#增加多个线路 1.25#增加版本在线更新功能 1.26#增加到期验证功能,ID到期前16天更换ID以防止黄眼 1.26#增加联网检测延时功能(未联网延时10分钟后自动关闭工具) 1.27#优化右键菜单,增加多个命令运行参数(右键点击
托盘
图标后需右键手动退出) 1.27#增加信息换行功能 1.31#增加自我排除的功能 4.2.0.7 测试版 3.3#修正对4.2.22.0的支持 3.3#修正在线更新功能 3.8#更换一个获取线路,程序运行时间缩短 3.29#增加排除功能(支持4.2版本) 3.29#实现在线替换更新功能 4.4#更新至4.2.1.2修正排除失败时界面锁定的问题(3.0和2.7版本需自己手动
添加
排除) 4.8#更新至4.2.1.3修正排除的成功率。 4.13#更新至4.2.1.5,优化内部代码,减少杀软误报(体积更小仅400KB)。 4.19#更新至4.2.1.6,修正验证日期错误问题,防止人工换ID后不自动替换。 5.11#修改一条失效线路 5.30#更新安装版卸载时删除UPID启动项 8.2#更新4.2.1.8增加一条ID验证地址 8.23#更新至4.2.1.9修正显示公告时桌面可能被隐藏的BUG 8.25#更新4.2.2.0增加一条ID验证地址增加替换ID后自动更新ESET病毒库功能 10.6#更新至4.2.2.1替换失效的官方验证地址,更新两条线路 11.18#更新至4.2.2.2优化替换ID后更新病毒库功能(更新病毒库时关闭窗口) 12.17#更新至4.2.2.3修正ESET验证服务器出错时循环验证的BUG 2011.3.12#更新版本为UPID(AUTOID)1.7.6.2 3.14#更新修正ID数字差异问题 此版本采用精睿论坛开达石的ESET_
VC
52_AUTOID内核,版本运行更加稳重并且支持64位系统。 “取消自动运行”即可删除本工具在注册表中的启动项,默认为开机自动运行。 如需帮助请访问:http://bbs.
vc
52.cn
C++ 语言
64,281
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章