(host_entry->h_addr_list[0][1]&0x00ff), (host_entry->h_addr_list[0][2]&0x00ff), (host_entry->h_addr_list[0][3]&0x00ff));
MessageBox(NULL,host_address,host_name,MB_OK); } } WSACleanup(); return 0; }
深入编程:
前面显示IP地址的时候,我们使用的是消息框,规范一点的编程应该使用对话框,如何编辑一个对话框,很多书中都有介绍,编辑的对话框可参考图5的运行界面。
头文件Get_IP.h如下:
BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
这个程序只使用了一个对话框过程,一般把这个过程的声明放在头文件中。
源程序Get_IP.c:
#include<winsock2.h> #include"Get_IP.h" #include"resource.h" //这个头文件在创建资源的时候会自动生成, //并会在插入资源时自动生成控件标识号. int WSA_return; WSADATA WSAData;
HOSTENT *host_entry; char host_name[256]; char host_address[256];
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) { WSA_return=WSAStartup(0x0101,&WSAData); if(WSA_return==0) { gethostname(host_name,256); host_entry=gethostbyname(host_name); if(host_entry!=0) { wsprintf(host_address,"%d.%d.%d.%d", (host_entry->h_addr_list[0][0]&0x00ff), (host_entry->h_addr_list[0][1]&0x00ff), (host_entry->h_addr_list[0][2]&0x00ff), (host_entry->h_addr_list[0][3]&0x00ff)); } } WSACleanup(); DialogBox(hInstance,"DIALOG1",NULL,(DLGPROC)Hostname_ipDlgPro); return 0; }
BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message, WPARAM wParam,LPARAM lParam) { switch(message) { case WM_INITDIALOG: return(TRUE); case WM_COMMAND: if(LOWORD(wParam)==IDOK) { SetDlgItemText(hDlg,IDC_EDIT1,host_name); SetDlgItemText(hDlg,IDC_EDIT2,host_address); SetDlgItemText(hDlg,IDCANCEL,"确定"); } if(LOWORD(wParam)==IDCANCEL) EndDialog(hDlg,TRUE); return(TRUE); break; } return(FALSE); }
三、利用VisualC++6.0编译Windows C程序
利用Visual C++6.0编译Windows C程序一般要经过以下四个步骤:新建项目、添加代码、添加资源和编译链接。下面我们简单地介绍一下程序上面介绍的规范的获取本机的主机名和IP地址程序的编译过程:
(一) 新建项目
1.启动MicrosoftVisualC++,然后在【文件】菜单中先择【新建】命令,弹出如图1所示的【新建】对话框:
点击查看大图图1 2.在【新建】对话框中,系统打开的是默认的【工程】选项卡,【工程】选项卡左侧的列表框中有多种建立工程的方式,我们选中“Win32 Application”选项。
上一篇:水滴石穿C语言之指针综合谈
下一篇:水滴石穿C语言之typedef的问题
|