?? main.cpp
字號:
/////////////////////////////////////////////////
// main.cpp文件
#include "GroupTalk.h"
#include <windows.h>
#include "resource.h"
BOOL __stdcall DlgProc(HWND, UINT, WPARAM, LPARAM);
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
int nResult = ::DialogBoxParam(
hInstance, // 實例句柄
(LPCTSTR)IDD_MAIN, // 對話框資源ID號
NULL, // 父窗口句柄
DlgProc, // 消息處理函數(shù)
NULL); // 對話框初始化的值,在WM_INITDIALOG消息的lParam參數(shù)中取出
return 0;
}
CGroupTalk *g_pTalk;
void HandleGroupMsg(HWND hDlg, GT_HDR *pHeader)
{
switch(pHeader->gt_type)
{
case MT_JION: // 新用戶加入
{
// 顯示給用戶
char szText[56];
wsprintf(szText, " 用戶:《%s》加入!", pHeader->szUser);
::SetWindowText(::GetDlgItem(hDlg, IDC_SYSMSG), szText);
// 將新用戶信息添加到列表框中
int nCurSel = ::SendDlgItemMessage(hDlg, IDC_USERS, CB_GETCURSEL, 0, 0);
int nIndex = ::SendDlgItemMessage(hDlg, IDC_USERS, CB_ADDSTRING, 0, (long)pHeader->szUser);
::SendDlgItemMessage(hDlg, IDC_USERS, CB_SETITEMDATA, nIndex, (long)pHeader->dwAddr);
if(nCurSel == -1)
nCurSel = nIndex;
::SendDlgItemMessage(hDlg, IDC_USERS, CB_SETCURSEL, nCurSel, 0);
}
break;
case MT_LEAVE: // 用戶離開
{
// 顯示給用戶
char szText[56];
wsprintf(szText, " 用戶:《%s》離開!", pHeader->szUser);
::SetWindowText(::GetDlgItem(hDlg, IDC_SYSMSG), szText);
// 將離開的用戶從列表框中移除
int nCount = ::SendDlgItemMessage(hDlg, IDC_USERS, CB_GETCOUNT, 0, 0);
for(int i=0; i<nCount; i++)
{
int nIndex = ::SendDlgItemMessage(hDlg, IDC_USERS, CB_FINDSTRING, i, (long)pHeader->szUser);
if((DWORD)::SendDlgItemMessage(hDlg, IDC_USERS, CB_GETITEMDATA, nIndex, 0) == pHeader->dwAddr)
{
::SendDlgItemMessage(hDlg, IDC_USERS, CB_DELETESTRING, nIndex, 0);
break;
}
}
}
break;
case MT_MESG: // 用戶發(fā)送消息
{
char *psz = pHeader->data();
psz[pHeader->nDataLength] = '\0';
char szText[1024];
wsprintf(szText, "【%s 說】", pHeader->szUser);
strncat(szText, psz, 1024 - strlen(szText));
::SendDlgItemMessage(hDlg, IDC_RECORD, LB_INSERTSTRING, 0, (long)szText);
}
break;
}
}
BOOL __stdcall DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
// 創(chuàng)建CGroupTalk對象
g_pTalk = new CGroupTalk(hDlg, ::inet_addr("234.5.6.7"));
::CheckDlgButton(hDlg, IDC_SELGROUP, 1);
::SendMessage(hDlg, WM_SETICON, ICON_SMALL,
(long)::LoadIcon(::GetModuleHandle(NULL), (LPCTSTR)IDI_MAIN));
}
break;
case WM_GROUPTALK:
{
// 處理CGroupTalk對象發(fā)來的消息
if(wParam != 0)
::MessageBox(hDlg, (LPCTSTR)lParam, "出錯!", 0);
else
HandleGroupMsg(hDlg, (GT_HDR*)lParam);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_SEND: // 用戶按下發(fā)送消息按鈕
{
// 取得要發(fā)送的消息
char szText[1024];
int nLen = ::GetWindowText(::GetDlgItem(hDlg, IDC_SENDMSG), szText, 1024);
if(nLen == 0)
break;
// 是面向組,還是面向用戶?
BOOL bToAll = ::IsDlgButtonChecked(hDlg, IDC_SELGROUP);
DWORD dwAddr;
if(bToAll)
{
dwAddr = 0;
}
else
{
int nIndex = ::SendDlgItemMessage(hDlg, IDC_USERS, CB_GETCURSEL, 0, 0);
if(nIndex == -1)
{
::MessageBox(hDlg, "請選擇一個用戶!", "GroupTalk", 0);
break;
}
// 取得用戶IP地址
dwAddr = ::SendDlgItemMessage(hDlg, IDC_USERS, CB_GETITEMDATA, nIndex, 0);
}
// 發(fā)送消息
if(g_pTalk->SendText(szText, nLen, dwAddr) == nLen)
::SetWindowText(::GetDlgItem(hDlg, IDC_SENDMSG), "");
}
break;
case IDC_CLEAR: // 用戶按下清除按鈕
::SendDlgItemMessage(hDlg, IDC_RECORD, LB_RESETCONTENT, 0, 0);
break;
case IDCANCEL: // 用戶關閉程序
{
delete g_pTalk;
::EndDialog (hDlg, IDCANCEL);
}
break;
}
break;
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -