查询端口状态用VC有点麻烦, 搞不好还要安装WindowsSDK, 又因为版本问题搞得东一榔头西一斧子, 还不如直接下载IPHLPAPI.LIB和Iphlpapi.h, 链到工程里就能用了, 虽然是2003年的, 不过期就行, 管它呢.
其实主要就是为了使用函数GetTcpTable, 绕这么一大圈子, 真麻烦.
右键菜单的步骤:
1. 在资源里添加一个菜单资源;
2. 添加子菜单 --- 以前一直以为第一排就可以作为菜单项, 后来发现在右键菜单里是不行的, 好不容易才在优快云上看见有人说了一嘴, 其它的帖子都没说清楚 --- 在第一排菜单里再添加子菜单才能用右键弹出是很滑稽的事, 这么简单的概念MS都不仔细说清楚, 让初学者兜圈子, CD. 去饭店吃过饭都知道菜单是什么意思. 玩概念很没意思.
3.
void CServerDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CMenu menu; //定义CMenu类对象
CMenu *ptrMenu;
BOOL ret = menu.LoadMenu((IDR_MENU_POPUP)); //装入刚建立的菜单IDC_POPMENU
ptrMenu = menu.GetSubMenu(0);//弹出主菜单第一项的子菜单
ptrMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this, NULL);
}
4. 用类向导或手动添加消息处理函数:
BEGIN_MESSAGE_MAP(CAuthServerMonitorDlg, CDialog)
//{{AFX_MSG_MAP(CAuthServerMonitorDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_BN_CLICKED(IDC_BTN_OPTION, OnBtnOption)
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_MENUITEM_ABOUT, OnMenuitemAbout) //就是这个
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CServerDlg::OnMenuitemAbout()
{
// TODO: Add your command handler code here
CAboutDlg dlg;
dlg.DoModal();
}
在头文件里添加定义:
protected: // Generated message map functions
//{{AFX_MSG(CAuthServerMonitorDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnTimer(UINT nIDEvent);
virtual void OnOK();
virtual void OnCancel();
afx_msg void OnButton1();
afx_msg void OnButton2();
afx_msg void OnButton3();
afx_msg void OnButton4();
afx_msg void OnBtnOption();
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
afx_msg void OnMenuitemAbout(); //还得是受保护的
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
然后就可以想干什么干什么了.
好像有个地方比较危险, 主对话框响应了这个消息, 其它的就别再响应了, 否则会崩溃? 以后再说.