您好,欢迎访问三七文档
MFCMFC13Windowssocket()I/O1415VC++13I/O134748495051WindowWindows(UNIX)52I/OMFC13.1471.2.CWinApp::Run()CWinApp()::Run()CWinApp3.windows//waittilluserclicksonstatusbarbeforeproceedingMSGmsg;BOOLbIdle=TRUE;LONGlIdleCount=0;CWinApp*pApp=AfxGetApp();AfxMessageBox(Intowaitloop.);m_bWait=TRUE;while(m_bWait){//idleloopwaitingformessageswhile(bIdle&&!::PeekMessage(&msg,NULL,NULL,NULL,PM_NOREMOVE)){if(!pApp-OnIdle(lIdleCount++))bIdle=FALSE;}//processnewmessagesdo{//pumpmessagespApp-PumpMessage();//ifwe’redone,let’sgo...if(!m_bWait)break;//otherwisekeeploopingif(pApp-IsIdleMessage(&msg))296{bIdle=TRUE;lIdleCount=0;}}while(::PeekMessage(&msg,NULL,NULL,NULL,PM_NOREMOVE));}m_bWaitTRUE(WM_LBUTTONDOWN)ClassWizardm_bWaitTRUE4.m_bWaitTURE(messagepump)(posted)SendMessage()(SengMessage()SetWindowsHookEx()WH_CALLWNDPROC)15.TestWzd1OnWzd1Test()Wzd26.DOSWindowsWindowsDOSDOSWindowsm_bWaitTure13.2481.,2.,132973.MSGmsg;CWinApp*pApp=AfxGetApp();while(::PeekMessage(&msg,NULL,0,0,PM_REMOVE)){//killanymousemessagesforthiswindowif((msg.hwnd!=m_hWnd||(msg.messageWM_MOUSEFIRST||msg.messageWM_MOUSELAST))&&!pApp-PreTranslateMessage(&msg)){::TranslateMessage(&msg);::DispatchMessage(&msg);}}WM_KEYFIRSTWM_KEYLAST(rangecheck)while4.1MFC5.OnTestWzd()13.3491.2.WindowsAPI::SendMessage()WindowsAPI::RegisterWindowMessage()WindowsAPI::BrodcastSystemMessage()3.WM_USER+1WM_USER298GUIDCOMGUIDMFC\BINGUIDGEN.EXE1)GUIDGEN.EXEGUIDGUID#defineHELLO_MSG“{6047CCB1-E4E7-11d1-9B7E-00AA003D8695}”::RegisterWindowsMessage()idHelloMsg=::RegisterWindowMessage(HELLO_MSG);idHelloMsg2)::RegisterWindowsMessage()::SendMessage(hWnd,//handleofawindowbelongingtodestinationappidHelloMsg,//registeredmessageidwParam,//asusuallParam//asusual);CWndCWndCWndwnd;wnd.Attach(hWnd);wnd.SendMessage(idHelloMsg,wParam,lParam);3)CMainFrameON_REGISTERED_MESSAGEBEGIN_MESSAGE_MAP(CMainFrame,CMDIFrameWnd)//{{AFX_MSG_MAP(CMainFrame)//}}AFX_MSG_MAPON_REGISTERED_MESSAGE(idHelloMsg,OnHelloMsg)END_MESSAGE_MAP()LRESULTCMainFrame::OnHelloMsg(WPARAMwParam,LPARAMlParam){//processmessagereturn0;}13299::SendMessage()4)WPARAMwParam=xxx;//yourdefinitionLPARAMlParam=xxx;//yourdefinitionDWORDdwRecipients=BSM_APPLICATIONS;::BroadcastSystemMessage(BSF_IGNORECURRENTTASK,&dwRecipients,idHelloMsg,//registeredwindowmessagewParam,lParam);//userdefinedparameters4.::BroadcastSystemMessage()BSF_LPARAMPOINTERlParamCWnd::FindWindow()Imhere385.TestWzd13.4501.2.::CreateFileMapping()WindowsAPI(swapfile)3.1)m_hMap=::CreateFileMapping((HANDLE)0xffffffff,//orcanbeanopenfilehandle0,//securityPAGE_READWRITE,//orPAGE_READONLYorPAGE_WRITECOPY0,//sizehighorder//(requiredifnofilehandle)0x1000,//sizeloworder//(requiredifnofilehandle)MAP_ID//uniqueidrequiredifnofilehandle);300()MAP_IDVC++\BINGUIDGEN.EXEMAP_ID::CreateFileMapping()MAP_IDm_pSharedData=::MapViewOfFile(m_hMap,FILE_MAP_WRITE,//orFILE_MAP_READ,FILE_MAP_COPY//(FILE_MAP_WRITEisread/write)0,//offsethighorder0,//offsetloworder0//numberofbytes(zeromapsentirefile));2)::MapViewOfFile()//writingtosharedmemorymemcpy((LPBYTE)m_pSharedData,pWrite,10);//readingfromsharedmemorymemcpy(pRead,(LPBYTE)m_pSharedData,10);CMwmFileCMemFilefile;file.Attach((LPBYTE)m_pSharedData,size);file.Write(pBuffer,100);//write100bytestosharedmemory3)::UnmapViewOfFile(m_pSharedData);::CloseHandle(m_hMap);4.::CreateFileMapping()ABAB::MapViewOfFile()::GetSystemInfo()SYSTEM_INFOdwAllocationGranularity64K13.5511.Windows13301UNIX2.MFCCSocket3Windowssocketsocket(COblist)3.1)ClassWizardCSocket(Server)Open()CSocketCreat()CSocket::Creat()()BOOLCWzdServer::Open(UINTnPort){returnCreate(nPort);}ListenEx(),OnAccept()RecvThread()ListenEx()ListenEx()CSocketListen()ListenEx()RecvThread()voidCWzdServer::ListenEx(inthdrSz,intbodyPos,CWzdQueue*pQueue,CWnd*pWnd,UINTid){//initializereceivedatam_RecvData.hdrSz=hdrSz;m_RecvData.bodyPos=bodyPos;m_RecvData.pQueue=pQueue;m_RecvData.pWnd=pWnd;m_id=id;//startingid302//startlisteningListen();}(TextEditor)CSocketOnAccept():voidCWzdServer::OnAccept(intnErrorCode){if(nErrorCode==0){//createanewsocketandaddtomapCSocket*pSocket=newCSocket;m_mapSockets[m_id]=pSocket;//usethisnewsockettoconnecttoclientAccept((CAsyncSocket&)*pSocket);//putsocketintosynchronousmodeDWORDarg=0;pSocket-AsyncSelect(0);pSocket-IOCtl(FIONBIO,&arg);//setupthissockettolistenforclientmessagesm_RecvData.pSocket=pSocket;m_RecvData.id=m_id++;//startthethreadAfxBeginThread(RecvThread,&m_RecvData);}}RecvThread()CSocketReceive()RecvThread()WM_NEW_MESSAGEWM_DONE_MESSAGEUINTRecvThread(LPVOIDpParam){//getdatafromthreadcreatorRECVDATA*pRecv=(RECVDATA*)pParam;intlen=1;interror=0;char*pBody=NULL;char*pHdr=NULL;//whilebothsocketsareopenwhile(TRUE){//readtheheader13303intres;pBody=NULL;pHdr=newchar[pRecv-hdrSz];if((res=pRecv-pSocket-CAsyncSocket::Receive(pHdr,pRecv-hdrSz))==SOCKET_ERROR)error=::GetLastError();elselen=res;//ifclosingdown,exitthreadif(len==0||error==WSAECONNRESET||error==WSAECONNABORTED)break;//readthebody???if(!error&&len&&pRecv-bodyPos!=-1){intbodyLen=*((short*)pHdr+pRecv-bodyPos);pBody=newchar[bodyLen];if
本文标题:vc拓展编程实例
链接地址:https://www.777doc.com/doc-3378053 .html