📄 hostndlg.cpp
字号:
// HostNdlg.cpp : implementation file
// Author: Marius Chincisan 01-12-1996
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "HostNames.h"
#include "HostNdlg.h"
#include <winsock.h>
#include <windowsx.h>
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
HANDLE CHostNamesDlg::m_hStopEvent = NULL;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// Implementation
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//{{AFX_MSG(CAboutDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg message handlers
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CenterWindow();
// TODO: Add extra about dlg initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
/////////////////////////////////////////////////////////////////////////////
// CHostNamesDlg dialog
CHostNamesDlg::CHostNamesDlg(CWnd* pParent /*=NULL*/)
: CDialog(CHostNamesDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CHostNamesDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_bsock = FALSE;
phtr = NULL;
m_Ok = 0;
m_sock =(UINT)-1;
memset(m_adr,0,4);
}
void CHostNamesDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CHostNamesDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CHostNamesDlg, CDialog)
//{{AFX_MSG_MAP(CHostNamesDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CLOSE()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHostNamesDlg message handlers
BOOL CHostNamesDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CenterWindow();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
// TODO: Add extra initialization here
///////////////////////////////////// Initialisation
{
WSADATA WData ;
DWORD dw;
DWORD length = MAX_COMPUTERNAME_LENGTH;
char locName[MAX_COMPUTERNAME_LENGTH];
char comp[128]="Computer: ";
// int rv=WSAStartup(0x11, &WData);
// if(rv != 0)
// {
// AfxMessageBox("Socket Init Error");
// }
m_bsock=TRUE;
GetComputerName(locName,&length);
strcat(comp,locName);
SetWindowText(comp);
ResolveTcpName();
m_hctrls.hList = GetDlgItem(LB_LOCNET)->m_hWnd;
m_hctrls.hStatic = GetDlgItem(ST_LOCAL)->m_hWnd;
m_hctrls.hStatics = GetDlgItem(IDC_STATICSX)->m_hWnd;
m_hStopEvent = ::CreateEvent(NULL,FALSE,FALSE,NULL);
m_htr = ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ResolveNetName,
(LPVOID)&m_hctrls,0,&dw);
}
return FALSE; // return TRUE unless you set the focus to a control
}
void CHostNamesDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CHostNamesDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CHostNamesDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CHostNamesDlg::OnClose()
{
m_Ok=1;
if(m_bsock)
{
WSACleanup();
}
CDialog::OnClose();
}
void CHostNamesDlg::ResolveTcpName(void)
{
SOCKADDR_IN locSin;
PHOSTENT pHe;
int err =0;
char szBuf[80];
char sTemp[80];
CEdit* pe;
#ifdef WIN32
DWORD dwSize;
#else
int dwSize;
#endif
locSin.sin_family = AF_INET;
dwSize=sizeof(szBuf);
gethostname((LPSTR)szBuf,(int)dwSize);
pHe=gethostbyname(szBuf);
if (pHe == NULL)
{
err =1;
goto EXITFN;
}
memcpy((LPSTR)&(locSin.sin_addr), pHe->h_addr,
pHe->h_length);
sprintf(sTemp,"%s",szBuf,pHe->h_name);
pe=(CEdit*)GetDlgItem(ST_LOCAL);
pe->SetWindowText(sTemp);
m_hctrls.addr[0]=locSin.sin_addr.S_un.S_un_b.s_b1;
m_hctrls.addr[1]=locSin.sin_addr.S_un.S_un_b.s_b2;
m_hctrls.addr[2]=locSin.sin_addr.S_un.S_un_b.s_b3;
m_hctrls.addr[3] = 0;
m_hctrls.addr[4] = 0;
sprintf(sTemp,"%d.%d.%d.%d",locSin.sin_addr.S_un.S_un_b.s_b1,
locSin.sin_addr.S_un.S_un_b.s_b2,
locSin.sin_addr.S_un.S_un_b.s_b3,
locSin.sin_addr.S_un.S_un_b.s_b4);
pe=(CEdit*)GetDlgItem(ST_LOCIP);
pe->SetWindowText(sTemp);
EXITFN:
;
}
UINT ResolveNetName(LPVOID lpv)
{
S_HWNDS* pData;
char locnet[80];
PHOSTENT pHent=NULL;
char lbString[128];
char stString[80];
int ii = 0;
int i = 1;
BYTE local[6];
int ifx=0;
pData = (S_HWNDS*)lpv;
memcpy(local,pData->addr,5);
while(i<255 & ::WaitForSingleObject(CHostNamesDlg::m_hStopEvent,0)!=WAIT_OBJECT_0)
{
if(i%2==0)
SendMessage(pData->hStatics,WM_SETTEXT,0,(LPARAM)(LPCSTR)"Searching...");
else
SendMessage(pData->hStatics,WM_SETTEXT,0,(LPARAM)(LPCSTR)"...");
local[3] = i;
if(pHent=gethostbyaddr((LPCSTR)local,4,PF_INET))
{
sprintf(lbString,"%s\t%u.%u.%u.%u",//printf
pHent->h_name,
(BYTE)local[0],
(BYTE)local[1],
(BYTE)local[2],
(BYTE)local[3]);
SendMessage(pData->hList,LB_ADDSTRING,0,(LPARAM)(LPCSTR)lbString);
ii ++;
sprintf(stString,"%d",ii);
//SendMessage(pData->hList,WM_SETTEXT,0,(LPARAM)(LPCSTR)stString);
}
i++;
SendMessage(pData->hStatics,WM_SETTEXT,0,(LPARAM)(LPCSTR)"...");
}
SendMessage(pData->hStatics,WM_SETTEXT,0,(LPARAM)(LPCSTR)"FINISHED");
return 1;
}
void CHostNamesDlg::OnOK()
{
// TODO: Add extra validation here
m_Ok=1;
TRACE("OK<-\n");
::SetEvent(m_hStopEvent);
::WaitForSingleObject(m_htr,20000);
::CloseHandle(m_hStopEvent);
::CloseHandle(m_htr);
CDialog::OnOK();
}
void CHostNamesDlg::OnDestroy()
{
CDialog::OnDestroy();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -