“星魔”回忆录【2】

3.右键监听的及停止监听的功能

void CClient_Dlg::OnListen()

{

// TODO: Add your command handler code here

CString cs;

if(IsListen==TRUE)        //是否正在监听的标志位

{

   if(GlobalSock)

   {

    closesocket(GlobalSock);    //关闭监听套接字

    GlobalSock=0;

    SetWindowText(“星魔v1.0″);    //重新设置对话框标题

    IsListen=FALSE;       //重置标志位

    return;

   }

}

HANDLE hd=CreateThread(NULL,0,InitConnect,(LPVOID)this,0,NULL); //监听线程

CloseHandle(hd);

GetWindowText(cs);

cs+=”-等待主机上线….”;

SetWindowText(cs);

IsListen=TRUE;           //监听标志位

}

监听线程的代码比较长。不贴出来了。看程序中的吧。

4.防止用户铵下键盘的ESC键和ENTER键退出程序,重载PreTranslateMessage函数

BOOL CClient_Dlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

//防止用户按下回车和ESC后退出

if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)

   return FALSE;

if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)

   return FALSE;

  


return CDialog::PreTranslateMessage(pMsg);

}

5.右键菜单,重载CListCtrl的OnRclickServerlist函数

void CClient_Dlg::OnRclickServerlist(NMHDR* pNMHDR, LRESULT* pResult)

{

// TODO: Add your control notification handler code here   

CMenu menu;

VERIFY(menu.LoadMenu(IDR_MENU));    //加载菜单


CPoint point;

GetCursorPos(&point);

CMenu* pPopup = menu.GetSubMenu(0);

ASSERT(pPopup != NULL);

CWnd* pWndPopupOwner = this;


if(m_ServerList.GetSelectedCount()<=0)   //如果没有选中CListCtrl中的一项

{

    pPopup->EnableMenuItem(ID_CONTROL,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); //把“控制”变灰

    pPopup->EnableMenuItem(ID_DISCONNECT,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); //“断开变灰”

    pPopup->EnableMenuItem(ID_SET_REMARK_INFO,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); //“备注”变灰

    pPopup->EnableMenuItem(ID_SET_SERVER_PWD,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); //”设置服务端密码”变灰

    pPopup->EnableMenuItem(ID_UNLOADSERVER,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);   //“卸载服务端”变灰

}

if(IsListen==TRUE)     //如果正在监听状态

{

    pPopup->RemoveMenu(ID_LISTEN,MF_BYCOMMAND);    //删掉菜单项“监听”

    pPopup->InsertMenu(ID_CREATESERVER,MF_BYCOMMAND|MF_STRING,ID_LISTEN,”停止监听”); //添加菜单项”停止监听”,紧挨着”创建服务端菜单”

    DrawMenuBar();   //菜单重绘

    pPopup->EnableMenuItem(ID_LISTEN,MF_BYCOMMAND | MF_ENABLED ); //把”停止监听”变可用

}


while (pWndPopupOwner->GetStyle() & WS_CHILD)

   pWndPopupOwner = pWndPopupOwner->GetParent();


pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,

    pWndPopupOwner);    //弹出菜单

*pResult = 0;

}

OK.今天到这。。明天接着写菜单项各个功能。。