⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpclien.cpp

📁 早期的WINDOWS编程,适合刚接触WINDOWS编程的初学者
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      EnableMenuItem(hMenu,IDM_FILE_SAVEAS, MF_BYCOMMAND | MF_GRAYED);
      EnableMenuItem(hMenu,IDM_FILE_PRINT, MF_BYCOMMAND | MF_GRAYED);
      EnableMenuItem(hMenu,IDM_FILE_PRINTSETUP, MF_BYCOMMAND | MF_GRAYED);
      EnableMenuItem(hMenu,IDM_EDIT_UNDO, MF_BYCOMMAND | MF_GRAYED);
      EnableMenuItem(hMenu,IDM_EDIT_CUT, MF_BYCOMMAND | MF_GRAYED);
      EnableMenuItem(hMenu,IDM_EDIT_COPY, MF_BYCOMMAND | MF_GRAYED);
      EnableMenuItem(hMenu,IDM_EDIT_PASTE, MF_BYCOMMAND | MF_GRAYED);
      EnableMenuItem(hMenu,IDM_EDIT_PASTELINK, MF_BYCOMMAND | MF_GRAYED);
      EnableMenuItem(hMenu,IDM_EDIT_PASTELINKS, MF_BYCOMMAND | MF_GRAYED);

      EnableMenuItem(hMenu,IDM_WINSOCK_DISCONNECT, MF_BYCOMMAND | MF_GRAYED);

      RECT rcClient = { 10, 10, 10, 10};

      GetClientRect(hWnd,&rcClient);

      unsigned int height = (rcClient.bottom - rcClient.top) /20;
      unsigned int width  = (rcClient.right - rcClient.left) /20;

      rcClient.left = rcClient.right - (5 * width);
      rcClient.top  = rcClient.bottom - (5 * height);

      rcClient.right =   width  * 2;
      rcClient.bottom =  height + (height/2);

      HWND hWndButton = CreateWindow(TEXT("BUTTON"),"Cancel",
                    WS_CHILD | WS_TABSTOP | BS_PUSHBUTTON,
                    rcClient.left, rcClient.top,
                    rcClient.right, rcClient.bottom,
                    hWnd,
                    (HMENU)1000,
                    hInstApp,
                    NULL);
      
      ShowWindow(hWndButton,SW_SHOW);

      rcClient.left -= (10 * width);

      HWND hWndButton1 = CreateWindow(TEXT("BUTTON"),"&Connect",
                    WS_CHILD | WS_TABSTOP | BS_DEFPUSHBUTTON,
                    rcClient.left, rcClient.top,
                    rcClient.right, rcClient.bottom,
                    hWnd,
                    (HMENU)1001,
                    hInstApp,
                    NULL);
      
      ShowWindow(hWndButton1,SW_SHOW);

      rcClient.top -= (height * 10);

      HWND hWndStaticStatus = CreateWindow(TEXT("STATIC"),"Status:",
                    WS_CHILD | WS_TABSTOP | SS_LEFT,
                    rcClient.left, rcClient.top,
                    rcClient.right, rcClient.bottom,
                    hWnd,
                    (HMENU)1001,
                    hInstApp,
                    NULL);
      
      ShowWindow(hWndStaticStatus,SW_SHOW);
                 
      return FORWARD_WM_CREATE(hWnd, lpCreateStruct, DefWindowProc);
}

//Message cracker OnCommand which is for WM_COMMAND
//
//This routine is used to handle the user selection from the main menu
//
void  TCPCLIENT_OnCommand(HWND hWnd,int wmID, HWND hWndCtl, UINT wmEvent)
{

      switch (wmID) {
      case IDM_HELP_ABOUT:
        	{
	        FARPROC lpProcAbout = MakeProcInstance((FARPROC)About, hInstApp);
			DialogBox(TCPClientAppObject.hInstApp,           // current instance
                      MAKEINTRESOURCE(IDD_ABOUTBOX), // dlg resource to use
                      hWnd,                  // parent handle
                      (DLGPROC)lpProcAbout); // About() instance address

            FreeProcInstance(lpProcAbout);
            }
            break;

      case IDM_FILE_EXIT:
            DestroyWindow (hWnd);
            break;

      case IDM_HELP_TOPICS:
            if (!WinHelp (hWnd, TEXT("TCPClient.HLP"),HELP_FINDER,(DWORD)0)){
             	MessageBox (GetFocus(),
                            TEXT("Unable to activate help"),
                            szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);
            }
            break;
      case IDM_FILE_NEW:
            break;
      case IDM_FILE_OPEN:
            break;
      case IDM_FILE_SAVE:
            break;
      case IDM_FILE_SAVEAS:
            break;
      case IDM_EDIT_UNDO:
            break;
      case IDM_EDIT_CUT:
            break;
      case IDM_EDIT_COPY:
            break;
      case IDM_EDIT_PASTE:
            break;
      case IDM_EDIT_PASTELINK:
            break;
      case IDM_EDIT_PASTELINKS:
            break;
      case IDM_WINSOCK_CONNECT:
            m_pClient = new CWClient;
            if (m_pClient->GetCurrentSocketState() == eWSInitialized){
                int iRet = m_pClient->ConnectToServer(constPortNo, NULL, hWnd);
                if (iRet == 0){
                    HMENU hMenu     = GetMenu(hWnd);
                    EnableMenuItem(hMenu,IDM_WINSOCK_DISCONNECT, 
                                   MF_BYCOMMAND | MF_ENABLED);
                    EnableMenuItem(hMenu, IDM_WINSOCK_CONNECT,
                                   MF_BYCOMMAND | MF_GRAYED);
                 }
            }
            break;
      case IDM_WINSOCK_DISCONNECT:
            if (m_pClient != NULL){
                delete m_pClient;
                m_pClient = NULL;
                HMENU hMenu         = GetMenu(hWnd);
                EnableMenuItem(hMenu, IDM_WINSOCK_CONNECT,
                               MF_BYCOMMAND | MF_ENABLED);
                EnableMenuItem(hMenu, IDM_WINSOCK_DISCONNECT,
                               MF_BYCOMMAND | MF_GRAYED);
            }
            break;
	  default:
            FORWARD_WM_COMMAND(hWnd,wmID,hWndCtl,wmEvent, DefWindowProc);
         }
}

void  TCPCLIENT_OnRButtonDown(HWND hWnd,BOOL fDoubleClick,int x,int y, UINT uflags)
{
      MessageBox(hWnd,TEXT("Context Menu"),TEXT("RButtonDown"),MB_OK);
      FORWARD_WM_RBUTTONDOWN(hWnd,fDoubleClick,x,y,uflags, DefWindowProc);
}

void  TCPCLIENT_OnNCRButtonUp(HWND hWnd,int x,int y, UINT uflags)
{
      if (TCPClientAppObject.TCPClientAppType.IsWindows9x())
          if (SendMessage(hWnd, WM_NCHITTEST,0,MAKELPARAM(x,y)) == HTSYSMENU)
                MessageBox(hWnd,TEXT("NC System Menu"),TEXT("NCRButtonUp"),MB_OK);
          else
                MessageBox(hWnd,TEXT("NCContext Menu"),TEXT("NCRButtonUp"),MB_OK);
      FORWARD_WM_NCRBUTTONUP(hWnd,x,y,uflags, DefWindowProc);
}

//Received from Plug and Play when we are told that our display has changed
//fChanged is TRUE if the display has changed and x and y are the new screen size
//fChanged is FALSE if the display is changing and x and y are the original screen size
//
void  TCPCLIENT_OnDisplayChange(HWND hWnd, BOOL fChanged, int x, int y)
{
      FORWARD_WM_DISPLAYCHANGE(hWnd, fChanged,x,y,DefWindowProc);
}

void  TCPCLIENT_OnEvent(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
      WS_TRACE0("Event received\n");

      int iEvent = WSAGETSELECTEVENT(lParam);
      int iError = WSAGETSELECTERROR(lParam);
      SOCKET s   = (SOCKET)wParam;

      switch (iEvent){
      case FD_READ:
            OnRead(s, iEvent, iError);
            break;
      case FD_WRITE:
            OnWrite(s, iEvent, iError);
            break;
      case FD_CLOSE:
            OnClose(s, iEvent, iError);
            break;
      case FD_OOB:
            OnOutOfBand(s, iEvent, iError);
            break;
      case FD_CONNECT:
            OnConnect(s, iEvent, iError);
            break;
      default:
            WS_TRACE1("Unknown Event %u",(LPCTSTR)iEvent);
            break;
      }

}  

void OnRead(SOCKET s, int iEvent, int iError)
{
    WS_TRACE0("Read Event\n");
}

void OnWrite(SOCKET s, int iEvent, int iError)
{
    WS_TRACE0("Write Event\n");
    
    TCHAR   szTestData[250];
    int err;

    for (int i=0;i<10;i++){
        wsprintf(szTestData,"TestData %u",i);
        err = m_pClient->send(szTestData, lstrlen(szTestData),0);

        if (err < 0){
            WS_TRACE0("Send Error: ");
            m_pClient->PrintError();
            return;
        }
    }
}

void OnClose(SOCKET s, int iEvent, int iError)
{
    WS_TRACE0("Close Event\n");
}

void OnOutOfBand(SOCKET s, int iEvent, int iError)
{
    WS_TRACE0("Out of Band Event\n");
}

void OnConnect(SOCKET s, int iEvent, int iError)
{
    WS_TRACE0("Connect Event\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -