C语言Dialogbox添加图片,DialogBox函数的奇怪问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

代码没写完,只写了一部分。对话框启动不了,不知道是什么原因,按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://网卡从组合框中选择了一项

首先,你需要使用Windows API中的DialogBox函数创建一个对话框,并在对话框中添加一个垂直滚动条控件。 以下是一个简单的示例代码: ```c #include <windows.h> // 对话框过程函数 BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: // 设置滚动条范围和初始位置 SetScrollRange(hwndDlg, SB_VERT, 0, 100, TRUE); SetScrollPos(hwndDlg, SB_VERT, 0, TRUE); return TRUE; case WM_VSCROLL: // 处理滚动条消息 switch (LOWORD(wParam)) { case SB_THUMBPOSITION: case SB_THUMBTRACK: // 设置滚动条位置 SetScrollPos(hwndDlg, SB_VERT, HIWORD(wParam), TRUE); return 0; } break; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { // 关闭对话框 EndDialog(hwndDlg, LOWORD(wParam)); return TRUE; } break; } return FALSE; } // 弹出带有垂直滚动条的对话框 int ShowScrollableMessageBox(HWND hwndParent, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) { // 创建对话框 HWND hwndDlg = CreateDialog(NULL, NULL, hwndParent, DialogProc); // 设置对话框标题和文本 SetWindowText(hwndDlg, lpCaption); SetDlgItemText(hwndDlg, IDC_STATIC, lpText); // 显示对话框 int nResult = (int)DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), hwndParent, DialogProc); // 销毁对话框 DestroyWindow(hwndDlg); return nResult; } ``` 在上面的代码中,DialogProc是对话框过程函数,用于处理对话框的消息。在WM_INITDIALOG消息中,我们使用SetScrollRange函数设置滚动条的范围和初始位置。在WM_VSCROLL消息中,我们处理滚动条的消息,设置滚动条的位置。在WM_COMMAND消息中,我们处理对话框的关闭消息,关闭对话框并返回结果。 ShowScrollableMessageBox是我们自己编写的函数,用于弹出带有垂直滚动条的对话框。在函数中,我们首先使用CreateDialog函数创建对话框,并使用SetWindowText和SetDlgItemText函数设置对话框的标题和文本。然后,我们使用DialogBox函数显示对话框,并返回对话框的结果。最后,我们使用DestroyWindow函数销毁对话框。 要使用这个函数,你只需要调用它并传递相应的参数,就像使用MessageBox函数一样。例如: ```c ShowScrollableMessageBox(NULL, TEXT("这是一段很长的文本,需要滚动条来查看。"), TEXT("带有垂直滚动条的消息框"), MB_OK); ``` 注意,上面的代码中,我们使用了一个对话框模板,其中包含一个ID为IDC_STATIC的静态文本控件和一个ID为IDOK的确定按钮。你需要在资源文件中定义这个对话框模板,并在程序中使用它。例如,可以在.rc文件中定义如下资源: ``` IDD_DIALOG1 DIALOGEX 0, 0, 200, 100 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "带有垂直滚动条的消息框" FONT 8, "MS Sans Serif" BEGIN LTEXT "这是一段很长的文本,需要滚动条来查看。", IDC_STATIC, 10, 10, 180, 80, WS_VSCROLL | SS_LEFT | SS_NOPREFIX | WS_GROUP | WS_TABSTOP DEFPUSHBUTTON "确定", IDOK, 70, 90, 60, 14 END ``` 上面的资源定义中,我们使用了一个LTEXT控件来显示文本,并设置了WS_VSCROLL样式来启用垂直滚动条。我们还定义了一个默认按钮ID为IDOK。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值