1、重写OnOK消息
2、如果本机只有一个网卡比较容易取得地址
结构体解释struct hostent {
char FAR * h_name; //机器名
char FAR * FAR * h_aliases;//机器名(别名)
short h_addrtype;//返回的地址的类型
short h_length;//每个地址的长度是用来表示下面一个参数中每个地址的长度
char FAR * FAR * h_addr_list;//存储地址
};取得IP
GetLocalIp()
{
char szhostname[128];
CString str;
if( gethostname(szhostname,128) == 0 )//取得机器名称
{
struct hostent * phost;
int i;
phost = gethostbyname(szhostname);//取得给定机器的信息
for(i=0;phost!= NULL&&phost->h_addr_list[i]!=NULL;i++ )//到每一个地址结尾
{
int j;
for(j=0;j<4;j++ )//一般情况现在为4如:202.112.2.2
{
CString addr;
if(j>0)
str += ".";
addr.Format("%u", (unsigned int)((unsigned char*)phost->h_addr_list[i])[j]);
str += addr;
}
}
}
else
AfxMessageBox("Can Not Detect Local Ip Address");//造成错误的原因可能是没有初始化或者网络没有配置好
}

解决方案 »

  1.   

    第一个问题:
    1、重载WM_GETDLGCODE消息的处理函数,返回值设为DLGC_WANTALLKEYS。
    2、重载WM_KEYDOWN消息的处理函数。
    CEdit的默认设置是按下回车键时不发送WM_KEYDOWN消息。其它如CComboBox也是如此。
    或是在属性的Styles页上选上want_return试一试(我没试过)。
    第二个问题:
    用gethostname()和gethostbyname()。具体查MSDN吧。
      

  2.   

    关于取得IP在www.yestart.net我写了一个范例
      

  3.   

    1。Edit使用ES_WANTRETURN风格;
    2。
    char szHostname[100];
    gethostname(szHostname, 100);
    HOSTENT * hst = gethostbyname(szHostname);
    IN_ADDR * pia = (IN_ADDR *)(hst->h_addr_list[0]);
    char infor[256];
    wsprintf(infor, "host name: %s\nlocal ip: %d.%d.%d.%d", szHostname, pia->S_un.S_un_b.s_b1,
         pia->S_un.S_un_b.s_b2, pia->S_un.S_un_b.s_b3, pia->S_un.S_un_b.s_b4)
    AfxMessageBox(infor);