C++Builder 程序员博客
28 Nov
我的程序是这样的
HWND hWnd; UINT uiDataMsgNo=0×444; UINT uiReConnectMsg=0×555; UINT uiDisconnectMsg=0×666; void __fastcall TMain::FormCreate(TObject *Sender) { int ret,i; Application->OnMessage = AppMessage; } //———————————————————- void __fastcall TMain::InitGDW() { try { int ret=-1; hWnd=Main->Handle; } catch(…) { } } //—————————————————— void __fastcall TMain::FormShow(TObject *Sender) { PageControl1->ActivePage=TabSheet1; Main->InitGDW(); } //———————————————————- void __fastcall TMain::AppMessage(tagMSG &Msg, bool &Handled) { // char pchPlate[30];//[OUT]车牌号码 char pchTime[20];//[OUT]车辆抓拍时间,格式为:yyyyMMddHHmmss BYTE pByteBinImage[280];//[OUT]车牌二值图 BYTE pBytePlateJpeg[200*1024];//[OUT]车牌JPEG图 UINT dwPlateJpegSize=5*1024;//[OUT]车牌JPEG图的大小 BYTE pByteCarJpeg[200*1024];//[OUT]近景车辆JPEG图 UINT dwCarJpegSize=100*1024;//[OUT]近景车辆JPEG图的大小 FILE *fp; int ret=-1; try { switch(Msg.message) { case 0×444: ret = GDW_GetVehicleInfo2AD( pchPlate, pchTime, pByteBinImage, pBytePlateJpeg, dwPlateJpegSize, pByteCarJpeg, dwCarJpegSize); if(ret==0||ret==1) { TestEdit64->Text=Trim( String(pchPlate)); GDWLbl->Caption="车牌识别成功!"; SpeedButton1->Click(); } else { GDWLbl->Caption="车牌识别失败!"+IntToStr(ret); } //显示过车时间 // SetDlgItemText(IDC_EDIT_T,""); // str = pchTime; // SetDlgItemText(IDC_EDIT_T,str); if(ret==0) //显示近景图 try { fp = fopen("near.jpg", "w+"); fwrite(pByteCarJpeg, dwCarJpegSize, 1, fp); fclose(fp); Image7->Picture->LoadFromFile("near.jpg"); // m_picnear.LoadFromFile("C:\\near.jpg"); //显示车牌JPEG fp = fopen("plate.jpg", "w+"); fwrite(pBytePlateJpeg, dwPlateJpegSize, 1, fp); fclose(fp); Image8->Picture->LoadFromFile("plate.jpg"); // m_plate.LoadFromFile("C:\\plate.jpg"); //显示二值图 GDW_WriteBinBmp("bin.bmp",pByteBinImage);//注意:此接口也已在动态库中,可直接调用 // Image8->Picture->LoadFromFile("bin.bmp"); // m_bin.LoadFromFile("C:\\bin.bmp"); } catch(…) { } try { } catch(…) { } /* //显示近景图 fp = fopen("C:\\near.jpg", "w+"); fwrite(pByteCarJpeg, dwCarJpegSize, 1, fp); fclose(fp); // Image7->Picture->LoadFromFile("C:\\near.jpg"); // m_picnear.LoadFromFile("C:\\near.jpg"); //显示车牌JPEG fp = fopen("C:\\plate.jpg", "w+"); fwrite(pBytePlateJpeg, dwPlateJpegSize, 1, fp); fclose(fp); // Image8->Picture->LoadFromFile("C:\\plate.jpg"); // m_plate.LoadFromFile("C:\\plate.jpg"); //显示二值图 GDW_WriteBinBmp("C:\\bin.bmp",pByteBinImage);//注意:此接口也已在动态库中,可直接调用 // m_bin.LoadFromFile("C:\\bin.bmp"); */ break; case 0×555: break; case 0×666: break; } } catch(…) { // } } void __fastcall TMain::Button9Click(TObject *Sender) { PostMessage(hWnd,0×444,0,0); //SendMessage(hWnd,0×444,0,0); }
使用PostMessage(hWnd,0×444,0,0);可以接收到消息0×444
但是使用SendMessage(hWnd,0×444,0,0);接受不到消息0×444
同步与不同步的问题
如何接收SendMessage的消息?
void __fastcall TMainForm::MainResponse(TMessage Message)
{
my_struct* tempstr;
if (tExcelThread!=NULL)
{
if ((unsigned)Message.LParam == tExcelThread->ThreadID)
{
//接收消息
tempstr = (my_struct *) Message.WParam;
———————–
.h
protected:
void __fastcall MainResponse(TMessage Message);
…..
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MYMESSAGE, TMessage, MainResponse)
END_MESSAGE_MAP(TForm)
声明处理函数:
void __fastcall OnYourMessage(TMessage Message);
使用宏来声明消息处理函数:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(0×444, TMessage, OnYourMessage)
END_MESSAGE_MAP(TForm)
谢谢回复,可是我有很多消息ID啊,不是只有0×444.
还有0×555,0×666,0×777……请问每个都要定义一个OnYourMessageX??都要
使用宏来声明消息处理函数:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(0×555, TMessage, OnYourMessage1)
END_MESSAGE_MAP(TForm)
使用宏来声明消息处理函数:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(0×666, TMessage, OnYourMessage2)
END_MESSAGE_MAP(TForm)
……
// 也不一定需要 // 你嫌那样麻烦的话,直接重载MainForm的WndProc函数 // 在这个窗口的窗口过程中处理所有的消息,处理时根据id来区分 // 就是直接在MainForm的头文件中声明下这个函数 // 一般是 void __fastcall TMainForm::WndProc(TMessage& Msg) ;
消息是可以带参数的。游戏操作可以通过参数进行定义。
游戏操作可以通过参数进行定义=》有些操作可以通过参数进行定义。