该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码没写完,只写了一部分。对话框启动不了,不知道是什么原因,按F11调试发现DialogBox后对话框消息处理函数根本没被调用,这种现象很奇怪,DialogBox怎么会不调用呢?难道这个API出问题了?对话框模板名都和资源里的一致,但对话框就是无法启动。请高手帮我分析一下,最好能亲自编译运行以下,因为我相信看是看不出来问题的。谢谢了
#include
#include
#include
#include
#include"resource.h"
#pragma comment(lib,"wpcap")
#pragma comment(lib,"ws2_32")
BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL,TEXT("ZH"),TEXT("ZAUY"),MB_OK);
DialogBox(hInstance, TEXT("ARPDLG"),NULL,(DLGPROC)DlgProc);
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
TCHAR szErr[]=TEXT("Error");
TCHAR szName[]=TEXT("BY ZYC");
char errbuf[PCAP_ERRBUF_SIZE];
pcap_if_t *alldevs=NULL;
pcap_if_t *d;
pcap_t *fp;
sockaddr_in *temp,*brocadst;
HWND hIpEditSend,hIpEditTarget;
char *buffer;
char *adaptbuffer;
char *ipSend;
char *str;
int n,i=0,m=0;
int nIP;
struct in_addr ipTemp;
BYTE Freame[64]={0x00,0x03,0x0d,0x50,0xc4,0x77,//目的MAC地址(6字节)
0x00,0x15,0xc5,0x77,0x26,0xb7,//源MAC地址(6字节)
0x08,0x06,//帧类型(2字节)
0x00,0x01,//硬件类型(2字节)
0x08,0x00,//协议类型(2字节)
0x06,//硬件地址长度(1字节)
0x04,//协议长度(1字节)
0x00,0x02,//操作类型(2字节)
0x00,0x15,0xc5,0x77,0x26,0xb7,//发送方MAC地址(6字节)
0xc0,0xa8,0x01,0x8d,//发送方协议地址(4字节)
0x00,0x03,0x0d,0x50,0xc4,0x77,//目的方MAC地址(6字节)
0xc0,0xa8,0x01,0x67,//目的方协议地址(4字节)
0x00};//填充字段(18字节)
//INITCOMMONCONTROLSEX ICC;
//ICC.dwSize = sizeof(INITCOMMONCONTROLSEX);
//ICC.dwICC = ICC_INTERNET_CLASSES;
switch(message)
{
case WM_INITDIALOG:
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
{
MessageBox(hDlg,TEXT("fail to get the adapther"),szName,MB_OK);
return FALSE;
}
hIpEditSend=GetDlgItem(hDlg,IDC_IPADDRESS_SEND);
hIpEditTarget=GetDlgItem(hDlg,IDC_IPADDRESS_TARGET);
for(d= alldevs; d != NULL; d= d->next)
{
SendDlgItemMessage(hDlg,IDC_COMBO_ADAPTER,CB_ADDSTRING,0,(LPARAM)d->name);//初始化网卡名
if(d->addresses)
SendDlgItemMessage(hDlg,IDC_COMBO_SRCMAC,CB_ADDSTRING,0,(LPARAM)d->description);//初始化网卡具体描述
if(d->addresses)//用合适的适配器初始化IP地址控件
{
temp=(sockaddr_in *)d->addresses->addr;//强制转化地址,方便运算
brocadst=(sockaddr_in *)d->addresses->broadaddr;
SendMessage(hIpEditSend,IPM_SETADDRESS,0,temp->sin_addr.S_un.S_addr);
SendMessage(hIpEditTarget,IPM_SETADDRESS,0,temp->sin_addr.S_un.S_addr);
}
if(d->addresses->broadaddr)//初始化广播地址
SetDlgItemText(hDlg,IDC_EDIT_DESTMAC,TEXT("FFFFFFFF"));
}
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))//代表控件ID
{
case IDC_COMBO_ADAPTER://网卡从组合框中选择了一项