📄 pppmessagerdlg.cpp
字号:
1. // PppMessagerDlg.cpp : implementation file
2. //
3.
4. #include "stdafx.h"
5. #include "PppMessager.h"
6. #include "PppMessagerDlg.h"
7. #include "UserMessage.h"
8. #include "Protocol.h"
9.
10. #ifdef _DEBUG
11. #define new DEBUG_NEW
12. #undef THIS_FILE
13. static char THIS_FILE[] = __FILE__;
14. #endif
15.
16. /////////////////////////////////////////////////////////////////////////////
17. // CPppMessagerDlg dialog
18.
19. CPppMessagerDlg::CPppMessagerDlg(CWnd* pParent /*=NULL*/)
20. : CDialog(CPppMessagerDlg::IDD, pParent)
21. {
22. //{{AFX_DATA_INIT(CPppMessagerDlg)
23. m_Edit_Send_Message = _T("");
24. m_Edit_Recv_Message = _T("");
25. m_nUpdateDataFlag = 3;//Update data of three contorls.
26.
27. //}}AFX_DATA_INIT
28. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
29. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
30. }
31.
32. //////////////////////////////////////////////////////////////////////////////
33. //
34. //
35. //
36. //m_nUpdateDataFlag bits0 == 1 ---- m_Edit_Recv_Message.
37. //m_nUpdateDataFlag bits1 == 1 ---- m_IpAddress_Dest.
38. //m_nUpdateDataFlag bits2 == 1 ---- m_Edit_Send_Message.
39. //
40. //////////////////////////////////////////////////////////////////////////////
41. void CPppMessagerDlg::DoDataExchange(CDataExchange* pDX)
42. {
43. CDialog::DoDataExchange(pDX);
44. //{{AFX_DATA_MAP(CPppMessagerDlg)
45.
46. DDX_Control(pDX, IDC_IPADDRESS_DEST, m_IpAddress_Dest);
47.
48. if(m_nUpdateDataFlag&0x1)
49. {
50. DDX_Text(pDX, IDC_EDIT_RECV_MSG, m_Edit_Recv_Message);
51. }
52.
53. if(m_nUpdateDataFlag&0x2)
54. {
55. DDX_Text(pDX, IDC_EDIT_SEND_MSG, m_Edit_Send_Message);
56. }
57.
58. //}}AFX_DATA_MAP
59. }
60.
61. BEGIN_MESSAGE_MAP(CPppMessagerDlg, CDialog)
62. //{{AFX_MSG_MAP(CPppMessagerDlg)
63. ON_WM_PAINT()
64. ON_WM_QUERYDRAGICON()
65. ON_BN_CLICKED(IDOK, OnSendMessage)
66. ON_BN_CLICKED(IDCANCEL, OnExit)
67. ON_MESSAGE(RECV_TH_ANNOUNCE_RECV_MESSAGE, OnRecvMessage)
68. //}}AFX_MSG_MAP
69. END_MESSAGE_MAP()
70.
71. /////////////////////////////////////////////////////////////////////////////
72. // CPppMessagerDlg message handlers
73.
74. BOOL CPppMessagerDlg::OnInitDialog()
75. {
76. CDialog::OnInitDialog();
77.
78. // Set the icon for this dialog. The framework does this automatically
79. // when the application's main window is not a dialog
80. SetIcon(m_hIcon, TRUE); // Set big icon
81. SetIcon(m_hIcon, FALSE); // Set small icon
82.
83. //Post main dlg handle to send thread and recv thread.
84. PostThreadMessage(m_dwSendThreadId, MAIN_TH_MWIN_ANNOUNCE_HANDLE \
85. , (WPARAM)GetSafeHwnd(), 0);
86.
87. PostThreadMessage(m_dwRecvThreadId, MAIN_TH_MWIN_ANNOUNCE_HANDLE \
88. , (WPARAM)GetSafeHwnd(), 0);
89.
90.
91.
92. return TRUE; // return TRUE unless you set the focus to a control
93. }
94.
95. // If you add a minimize button to your dialog, you will need the code below
96. // to draw the icon. For MFC applications using the document/view model,
97. // this is automatically done for you by the framework.
98.
99. void CPppMessagerDlg::OnPaint()
100. {
101. if (IsIconic())
102. {
103. CPaintDC dc(this); // device context for painting
104.
105. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
106.
107. // Center icon in client rectangle
108. int cxIcon = GetSystemMetrics(SM_CXICON);
109. int cyIcon = GetSystemMetrics(SM_CYICON);
110. CRect rect;
111. GetClientRect(&rect);
112. int x = (rect.Width() - cxIcon + 1) / 2;
113. int y = (rect.Height() - cyIcon + 1) / 2;
114.
115. // Draw the icon
116. dc.DrawIcon(x, y, m_hIcon);
117.
118. }
119. else
120. {
121. CDialog::OnPaint();
122. }
123. }
124.
125. // The system calls this to obtain the cursor to display while the user drags
126. // the minimized window.
127. HCURSOR CPppMessagerDlg::OnQueryDragIcon()
128. {
129. return (HCURSOR) m_hIcon;
130. }
131.
132.
133. ////////////////////////////////////////////////////////////////////////////////////
134. //
135. //
136. //
137. //
138. //
139. //
140. //
141. //
142. /////////////////////////////////////////////////////////////////////////////////////
143. void CPppMessagerDlg::LoadPacketHandlerId( DWORD dwSendThreadId, DWORD dwRecvThreadId)
144. {
145. m_dwSendThreadId = dwSendThreadId;
146. m_dwRecvThreadId = dwRecvThreadId;
147.
148. }
149.
150.
151. ////////////////////////////////////////////////////////////////////////////////////
152. //
153. //
154. //
155. //
156. //
157. //
158. //
159. //
160. /////////////////////////////////////////////////////////////////////////////////////
161. void CPppMessagerDlg::OnSendMessage()
162. {
163. //Get data to be sent.
164. m_nUpdateDataFlag = 0x02;
165. UpdateData(TRUE);
166.
167. m_UserData.nDataLen = m_Edit_Send_Message.GetLength();
168. m_UserData.pcData = m_Edit_Send_Message.LockBuffer();
169.
170. //Get dest ip address.
171. memset(m_UserData.pcDestIpAddr, 0, sizeof(m_UserData.pcDestIpAddr));
172. m_IpAddress_Dest.GetWindowText(m_UserData.pcDestIpAddr \
173. , sizeof(m_UserData.pcDestIpAddr));
174.
175. //Send message to the thread of sending packet.
176. PostThreadMessage(m_dwSendThreadId, MAIN_TH_MWIN_SEND_MESSAGE, (WPARAM)&m_UserData, 0);
177.
178. m_Edit_Send_Message.UnlockBuffer();
179. }
180.
181.
182.
183. ////////////////////////////////////////////////////////////////////////////////////
184. //
185. //
186. //
187. //
188. //
189. //
190. //
191. //
192. /////////////////////////////////////////////////////////////////////////////////////
193. void CPppMessagerDlg::OnExit()
194. {
195. // TODO: Add your control notification handler code here
196. this->DestroyWindow();
197. }
198.
199.
200. LRESULT CPppMessagerDlg::OnRecvMessage(WPARAM wParam, LPARAM lParam)
201. {
202. char * pcData = NULL;
203. int nDataLen;
204.
205. //Receiving data.
206. pcData = (char *)wParam;
207. nDataLen = (int)lParam;
208.
209. //Check if arguments are valid.
210. if( (NULL == pcData)||(nDataLen <=0) )
211. {
212. PostThreadMessage(m_dwSendThreadId, MAIN_TH_MWIN_RECV_MESSAGE_NAK, 0, 0);
213. return 0;
214. }
215.
216. //Show data to manager.
217. m_Edit_Recv_Message.Insert(0, "\r\n");
218.
219. m_Edit_Recv_Message.Insert(0, pcData);
220.
221.
222. m_nUpdateDataFlag = 0x01;
223. UpdateData(FALSE);
224.
225. return 0;
226. }
227.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -