标签:his ase mask 初始化 绘制 ESS form 分享 metrics
1 // New_MFC_TCP_SreverDlg.h : 头文件 2 // 3 #define WM_SOCKET WM_USER+100 4 #pragma once 5 6 7 // CNew_MFC_TCP_SreverDlg 对话框 8 class CNew_MFC_TCP_SreverDlg : public CDialogEx 9 { 10 // 构造 11 public: 12 CNew_MFC_TCP_SreverDlg(CWnd* pParent = NULL); // 标准构造函数 13 14 //定义套子接句柄 15 SOCKET s; 16 SOCKET s1; 17 18 //定义套子接地址结构变量 19 sockaddr_in addr; 20 sockaddr_in addr1; 21 22 int n; //记录连接数 23 24 25 // 对话框数据 26 #ifdef AFX_DESIGN_TIME 27 enum { IDD = IDD_NEW_MFC_TCP_SREVER_DIALOG }; 28 #endif 29 30 protected: 31 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 32 33 34 // 实现 35 protected: 36 HICON m_hIcon; 37 38 // 生成的消息映射函数 39 virtual BOOL OnInitDialog(); 40 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 41 afx_msg void OnPaint(); 42 afx_msg HCURSOR OnQueryDragIcon(); 43 DECLARE_MESSAGE_MAP() 44 afx_msg LRESULT OnSocket(WPARAM wParam, LPARAM lParam); //自定义消息函数 45 public: 46 afx_msg void OnEnChangeText(); 47 };
1 // New_MFC_TCP_SreverDlg.cpp : 实现文件 2 // 3 4 #include "stdafx.h" 5 #include "New_MFC_TCP_Srever.h" 6 #include "New_MFC_TCP_SreverDlg.h" 7 #include "afxdialogex.h" 8 9 #ifdef _DEBUG 10 #define new DEBUG_NEW 11 #endif 12 13 14 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 15 16 class CAboutDlg : public CDialogEx 17 { 18 public: 19 CAboutDlg(); 20 21 // 对话框数据 22 #ifdef AFX_DESIGN_TIME 23 enum { IDD = IDD_ABOUTBOX }; 24 #endif 25 26 protected: 27 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 28 29 // 实现 30 protected: 31 DECLARE_MESSAGE_MAP() 32 }; 33 34 CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) 35 { 36 } 37 38 void CAboutDlg::DoDataExchange(CDataExchange* pDX) 39 { 40 CDialogEx::DoDataExchange(pDX); 41 } 42 43 BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) 44 END_MESSAGE_MAP() 45 46 47 // CNew_MFC_TCP_SreverDlg 对话框 48 49 50 51 CNew_MFC_TCP_SreverDlg::CNew_MFC_TCP_SreverDlg(CWnd* pParent /*=NULL*/) 52 : CDialogEx(IDD_NEW_MFC_TCP_SREVER_DIALOG, pParent) 53 { 54 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 55 } 56 57 void CNew_MFC_TCP_SreverDlg::DoDataExchange(CDataExchange* pDX) 58 { 59 CDialogEx::DoDataExchange(pDX); 60 } 61 62 BEGIN_MESSAGE_MAP(CNew_MFC_TCP_SreverDlg, CDialogEx) 63 ON_MESSAGE(WM_SOCKET,OnSocket) 64 ON_WM_SYSCOMMAND() 65 ON_WM_PAINT() 66 ON_WM_QUERYDRAGICON() 67 ON_EN_CHANGE(IDC_TEXT, &CNew_MFC_TCP_SreverDlg::OnEnChangeText) 68 END_MESSAGE_MAP() 69 70 71 // CNew_MFC_TCP_SreverDlg 消息处理程序 72 73 BOOL CNew_MFC_TCP_SreverDlg::OnInitDialog() 74 { 75 CDialogEx::OnInitDialog(); 76 77 // 将“关于...”菜单项添加到系统菜单中。 78 79 // IDM_ABOUTBOX 必须在系统命令范围内。 80 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 81 ASSERT(IDM_ABOUTBOX < 0xF000); 82 83 CMenu* pSysMenu = GetSystemMenu(FALSE); 84 if (pSysMenu != NULL) 85 { 86 BOOL bNameValid; 87 CString strAboutMenu; 88 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); 89 ASSERT(bNameValid); 90 if (!strAboutMenu.IsEmpty()) 91 { 92 pSysMenu->AppendMenu(MF_SEPARATOR); 93 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 94 } 95 } 96 97 // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 98 // 执行此操作 99 SetIcon(m_hIcon, TRUE); // 设置大图标 100 SetIcon(m_hIcon, FALSE); // 设置小图标 101 102 // TODO: 在此添加额外的初始化代码 103 104 CDialog::OnInitDialog(); 105 addr.sin_family = AF_INET; 106 addr.sin_port = htons(80); 107 addr.sin_addr.S_un.S_addr = INADDR_ANY; 108 s = ::socket(AF_INET, SOCK_STREAM, 0); 109 ::bind(s, (sockaddr*)&addr, sizeof(addr)); 110 ::listen(s, 5); 111 GetDlgItem(IDC_TEXT)->EnableWindow(false); 112 GetDlgItem(IDC_ADDR)->SetWindowText("服务器已经启动"); 113 114 ::WSAAsyncSelect(s,this->m_hWnd,WM_SOCKET,FD_ACCEPT|FD_READ); 115 116 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE 117 } 118 119 void CNew_MFC_TCP_SreverDlg::OnSysCommand(UINT nID, LPARAM lParam) 120 { 121 if ((nID & 0xFFF0) == IDM_ABOUTBOX) 122 { 123 CAboutDlg dlgAbout; 124 dlgAbout.DoModal(); 125 } 126 else 127 { 128 CDialogEx::OnSysCommand(nID, lParam); 129 } 130 } 131 132 // 如果向对话框添加最小化按钮,则需要下面的代码 133 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, 134 // 这将由框架自动完成。 135 136 void CNew_MFC_TCP_SreverDlg::OnPaint() 137 { 138 if (IsIconic()) 139 { 140 CPaintDC dc(this); // 用于绘制的设备上下文 141 142 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 143 144 // 使图标在工作区矩形中居中 145 int cxIcon = GetSystemMetrics(SM_CXICON); 146 int cyIcon = GetSystemMetrics(SM_CYICON); 147 CRect rect; 148 GetClientRect(&rect); 149 int x = (rect.Width() - cxIcon + 1) / 2; 150 int y = (rect.Height() - cyIcon + 1) / 2; 151 152 // 绘制图标 153 dc.DrawIcon(x, y, m_hIcon); 154 } 155 else 156 { 157 CDialogEx::OnPaint(); 158 } 159 } 160 161 //当用户拖动最小化窗口时系统调用此函数取得光标 162 //显示。 163 HCURSOR CNew_MFC_TCP_SreverDlg::OnQueryDragIcon() 164 { 165 return static_cast<HCURSOR>(m_hIcon); 166 } 167 168 169 170 void CNew_MFC_TCP_SreverDlg::OnEnChangeText() 171 { 172 // TODO: 如果该控件是 RICHEDIT 控件,它将不 173 // 发送此通知,除非重写 CDialogEx::OnInitDialog() 174 // 函数并调用 CRichEditCtrl().SetEventMask(), 175 // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 176 177 // TODO: 在此添加控件通知处理程序代码 178 } 179 180 LRESULT CNew_MFC_TCP_SreverDlg::OnSocket(WPARAM wParam, LPARAM lParam) 181 { 182 CString str13; 183 char cs[100] = { 0 }; 184 switch (lParam) 185 { 186 187 case FD_ACCEPT: 188 { 189 int lenth = sizeof(addr1); 190 s1 = ::accept(s, (sockaddr*)&addr1, &lenth); 191 n = n + 1; 192 str13.Format("有%d客户已经连接上来了", n); 193 str13 += ::inet_ntoa(addr1.sin_addr); 194 str13 += "\r\n登录\r\n"; 195 GetDlgItem(IDC_TEXT)->SetWindowText(str13); 196 } 197 198 break; 199 200 case FD_READ: 201 { 202 CString num = ""; 203 ::recv(s1, cs, 100, 0); 204 GetDlgItem(IDC_TEXT)->GetWindowText(num); 205 num += "\r\n"; 206 num += (LPTSTR)::inet_ntoa(addr1.sin_addr); 207 num += "对您说:"; 208 num += (LPTSTR)cs; 209 GetDlgItem(IDC_TEXT)->SetWindowText(num); 210 } 211 212 break; 213 } 214 return true; 215 }
标签:his ase mask 初始化 绘制 ESS form 分享 metrics
原文地址:https://www.cnblogs.com/zuoluokeji/p/9488865.html