窗体重载WndProc函数,一般是为拦截指定的消息,但是对于其他的消息,需要有默认处理的过程,也就是需要在函数中调用父类的WndProc函数,将代码改成类似:
2. 应该是少这句话 TForm::WndProc(Message);
看这个例子重载WndProc的方法
void __fastcall TForm1::WndProc(TMessage &Msg)
{
if (Msg.Msg == WM_DEVICECHANGE)
{
if ((Msg.WParam == DBT_DEVICEARRIVAL) || (Msg.WParam == DBT_DEVICEREMOVECOMPLETE))
{
DEV_BROADCAST_HDR *lpDevHdr = (DEV_BROADCAST_HDR *)Msg.LParam;
if (lpDevHdr->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
{
DEV_BROADCAST_DEVICEINTERFACE *lpb = (DEV_BROADCAST_DEVICEINTERFACE *)Msg.LParam;
if (lpb->dbcc_classguid == USB_DRIVER_GUID) // 设备指定的GUID
{
switch (Msg.WParam)
{
case DBT_DEVICEARRIVAL:
ShowMessage("USB设备插入");
break;
case DBT_DEVICEREMOVECOMPLETE:
ShowMessage("USB设备移除");
break;
default:
break;
}
}
}
}
}
TForm::WndProc(Msg);
}
需要注意:这里假设你的TForm1是继承自TForm类。如果继承自其他类,需要将TForm::换成相应的类名。 2. 应该是少这句话 TForm::WndProc(Message);
看这个例子重载WndProc的方法
1103

被折叠的 条评论
为什么被折叠?



