国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

對于捕獲VCL沒有處理的Windows消息

對于捕獲VCL沒有處理的Windows消息

更新時間:2022-05-04 文章作者:未知 信息來源:網絡 閱讀次數:

對于C++ Builder的程序員來說,VCL以其靈活、高效的特點令人喜愛。因為VCL是在Windows API的基礎上進行了封裝,同時舍棄了一些不常用的功能,所以,VCL在功能上是Windows API 的子集。VCL提供了對大多數Windows消息的處理機制,但是對于沒有處理的Windows消息呢,在需要是如何捕獲呢?C++ Builder采用了消息映射標機制,通過消息映射表將特定的Windows消息于代碼中的函數聯系起來,當窗口捕獲到消息時就會調用這個函數。
C++ Builder消息映射表定義形式如下:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(<message> , <message structure> , <message handler>)
END_MESSAGE_MAP(ClassName)
其中:
BEGIN_MESSAGE_MAP:消息映射定義起始語句
MESSAGE_HANDLER:消息處理定義
END_MESSAGE_MAP:消息映射定義結束語句
ClassName:是要接受消息的類名
message:是要截獲的Windows消息
message handler:消息處理函數名稱
message structure:是用于傳遞給VCL消息的結構名稱,此結構里包含有處理消息時所需的全部參數,不同的消息所對應的消息結構是不同的。
由于每一個VCL控件(無論是窗體還是按鈕)都可以獨立的接收Windows消息,并且進行獨立的響應,所以一定要注意消息定一種的ClassName參數。
現在舉例說明消息定義、傳遞的應用。現在一個窗體FormMain,和2個TperformanceGraph控件(不能響應鼠標事件),現在我要對2個TperformanceGraph控件定義鼠標單擊事件,對FormMain也重定義鼠標單擊事件,過程如下(假定工程文件為Message.bpr,程序文件為main.cpp、main.h):
源代碼如下:
//----main.h--------------------------------------------------------------
#ifndef mainH
#define mainH
//----------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "PERFGRAP.h"
//-----------------------------------------------------------
class TFormMain : public TForm
{
__published: // IDE-managed Components
//----2個標準TperformanceGraph控件
TPerformanceGraph *PerformanceGraph1;
TPerformanceGraph *PerformanceGraph2;
TEdit *Edit2;
TEdit *Edit1;
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
//----自定義的消息處理函數,其中MESSAGE可以不寫
MESSAGE void __fastcall LButtonDown(TMessage &message);
//----用戶定義的函數(處理消息,具體使用見.cpp文件)
void __fastcall MyWndProc1(TMessage &message);
void __fastcall MyWndProc2(TMessage &message);
//----函數指針,用來保存2個TperformanceGraph控件的消息處理函數的指針
TWndMethod OldWndProc1 , OldWndProc2;
public: // User declarations
__fastcall TFormMain(TComponent* Owner);
//----窗體的消息定義
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_LBUTTONDOWN , TMessage , LButtonDown)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TFormMain *FormMain;
//---------------------------------------------------------------------------
#endif

//----main.cpp------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "PERFGRAP"
#pragma resource "*.dfm"
TFormMain *FormMain;
//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Owner)
: TForm(Owner)
{}
//---------------------------------------------------------------------------
void __fastcall TFormMain::LButtonDown(TMessage &message)
{
//----如果鼠標在窗體內(控件外)被單擊,則此事件被激活
if(GetAsyncKeyState(VK_LBUTTON) < 0)
{
Application->MessageBoxA("Form Get Messsge" , "Message" , MB_OK);
//----向Edit2發送鼠標消息,則Edit2將產生單擊獲得焦點的現象
SendMessage(FormMain->Edit2->Handle ,
message.Msg ,
message.WParam ,
message.LParam);
}
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormCreate(TObject *Sender)
{
//----替換2個TperformanceGraph控件的消息處理函數句柄
OldWndProc1 = PerformanceGraph1->WindowProc;
OldWndProc2 = PerformanceGraph2->WindowProc;
PerformanceGraph1->WindowProc = MyWndProc1;
PerformanceGraph2->WindowProc = MyWndProc2;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::MyWndProc1(TMessage &message)
{
if (message.Msg == WM_LBUTTONDOWN)
//----如果消息是“鼠標單擊消息”,則顯示信息
ShowMessage("PerformanceGraph1 Get Message ");
else
//----如果消息是其他消息,則交給控件原來的處理
OldWndProc1(message);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::MyWndProc2(TMessage &message)
{
if (message.Msg == WM_LBUTTONDOWN)
ShowMessage("PerformanceGraph 2 get Message");
else
OldWndProc2(message);
}
如果在TFormMain::FormCreate()函數中加入以下兩句語句:
OldWndProc3 = FormMain->WindowProc;
FormMain->WindowProc = MyWndProc3;
再添加函數:
void __fastcall TFormMain::MyWndProc3(TMessage &message)
{
if (message.Msg == WM_LBUTTONDOWN)
//----如果消息是“鼠標單擊消息”,則顯示信息
ShowMessage(“FormMain Get the Message ");
else
//----如果消息是其他消息,則交給控件原來的處理
OldWndProc1(message);
}
則把FormMain的鼠標消息響應函數進行了改裝,此時窗體就會截獲鼠標消息,而2個TperformanceGraph控件將不會得到消息。這是因為窗體將先于控件得到消息。
從上面的例子可以看出:
1、 窗體將先于控件得到消息;
2、 對于響應某一消息的控件,可以用SendMessage想起發送消息;
3、 對于不響應某一消息的控件,可以用重載其WindowProc屬性獲得你想要的效果。
實際上,掌握了利用Windows的消息傳遞機制才是掌握C++ Builder的第二階段,任重而道遠。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        亚洲一区免费在线观看| 中文子幕无线码一区tr| 日韩一区二区三区四区五区六区| 亚洲国产成人tv| 欧美久久婷婷综合色| 婷婷丁香久久五月婷婷| 欧美一激情一区二区三区| 青青国产91久久久久久| 精品99一区二区| 成人性生交大片免费看在线播放| 国产精品美女一区二区在线观看| 懂色中文一区二区在线播放| 一区二区在线看| 欧美变态tickling挠脚心| 国产福利91精品| 亚洲精品videosex极品| www久久精品| 国产东北露脸精品视频| 国产精品久久久久久久久快鸭| 91影视在线播放| 蜜桃视频一区二区三区在线观看| 国产亚洲一区二区在线观看| 91行情网站电视在线观看高清版| 热久久久久久久| 亚洲欧美日韩一区二区| 日韩欧美高清一区| 色视频成人在线观看免| 久久国产欧美日韩精品| 亚洲综合丝袜美腿| 欧美国产成人精品| 日韩精品一区二区三区视频| 91福利国产成人精品照片| 国产高清不卡一区| 青青国产91久久久久久| 亚洲一级二级三级在线免费观看| 国产午夜精品理论片a级大结局| 欧美日韩成人激情| 93久久精品日日躁夜夜躁欧美| 精品一区二区三区免费播放 | 日本高清免费不卡视频| 老司机午夜精品| 亚洲高清在线视频| 国产精品国产三级国产专播品爱网| 欧美日韩免费电影| 成人精品亚洲人成在线| 免费观看30秒视频久久| 亚洲一区在线播放| 亚洲人成网站在线| 中文字幕制服丝袜一区二区三区 | 91视频com| 国产成人精品www牛牛影视| 老司机免费视频一区二区三区| 亚洲免费观看高清完整版在线观看熊| 久久女同性恋中文字幕| ww亚洲ww在线观看国产| 亚洲精品在线观| 精品免费99久久| 精品国产乱码久久久久久牛牛| 欧美人妇做爰xxxⅹ性高电影| 一本久道久久综合中文字幕| av在线不卡电影| 91免费在线看| 91国产免费观看| 精品视频一区 二区 三区| 精品国产乱码久久久久久久| 欧美mv日韩mv亚洲| 26uuu另类欧美| 久久噜噜亚洲综合| 欧美极品aⅴ影院| ㊣最新国产の精品bt伙计久久| 国产精品久久久久婷婷二区次| 国产视频在线观看一区二区三区| 久久久精品人体av艺术| 国产精品卡一卡二卡三| 国产精品久久久久久福利一牛影视| 国产精品视频你懂的| 亚洲欧美中日韩| 亚洲一二三四在线| 蜜臀国产一区二区三区在线播放| 久久国产精品一区二区| 岛国一区二区在线观看| 91丨porny丨国产入口| 91国偷自产一区二区使用方法| 欧美精品九九99久久| 精品国产露脸精彩对白| 亚洲欧洲成人av每日更新| 婷婷久久综合九色综合绿巨人| 久久99精品一区二区三区三区| 国产成人精品亚洲午夜麻豆| 色偷偷成人一区二区三区91| 日韩一区二区三区在线视频| 国产精品无圣光一区二区| 亚洲h动漫在线| 国产高清在线精品| 欧美日韩免费观看一区二区三区 | 毛片av一区二区| 风间由美一区二区av101| 色婷婷av久久久久久久| 日韩免费高清电影| 国产精品久久久久久户外露出| 亚洲成在人线在线播放| 国产中文字幕精品| 欧美日韩国产成人在线91| 久久久久久久久一| 亚洲成人动漫在线观看| 99re亚洲国产精品| 精品国产制服丝袜高跟| 亚洲午夜免费视频| 不卡的电影网站| 精品sm捆绑视频| 五月天激情小说综合| 91在线免费看| 久久久久国产精品厨房| 老司机精品视频导航| 在线日韩国产精品| 中文字幕一区二区三区乱码在线| 极品少妇一区二区三区精品视频| 欧美日韩免费电影| 国产精品久久久久久亚洲伦| 久久成人免费电影| 国产精品无人区| 国内精品伊人久久久久影院对白| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 日韩美女视频一区二区在线观看| 亚洲精品中文在线影院| 国产一区二区三区在线观看精品| 欧美性极品少妇| 综合在线观看色| 国产丶欧美丶日本不卡视频| 9191久久久久久久久久久| 亚洲毛片av在线| 成人免费av在线| 国产欧美一区二区在线| 国产成人一级电影| 久久色在线观看| 国内精品免费**视频| 精品久久五月天| 久久国产精品色| 精品av综合导航| 国产激情一区二区三区| 久久久不卡网国产精品二区| 国产一区二三区| 国产无一区二区| 粉嫩一区二区三区性色av| 欧美国产一区视频在线观看| 国产精品一二三区在线| 国产性色一区二区| www.欧美色图| 亚洲摸摸操操av| 日本精品一区二区三区高清| 亚洲一区二区三区四区中文字幕| 欧洲视频一区二区| 日韩中文字幕91| 精品国产髙清在线看国产毛片| 狠狠久久亚洲欧美| 国产精品网站在线观看| 一本一道久久a久久精品综合蜜臀| 亚洲精品乱码久久久久久日本蜜臀| 欧美性猛片xxxx免费看久爱| 日韩av二区在线播放| 久久久99精品久久| 91成人国产精品| 久久精品国产在热久久| 欧美激情一区二区| 欧美日韩精品一区二区| 国产在线国偷精品产拍免费yy| 成人免费一区二区三区视频 | 3d成人动漫网站| 国产一区激情在线| 亚洲视频在线一区| 日韩视频在线观看一区二区| 成人黄色777网| 五月天网站亚洲| 久久久久久久久久久久电影| 欧美性大战xxxxx久久久| 国产综合色精品一区二区三区| 一区在线播放视频| 精品国产一区二区国模嫣然| 91官网在线观看| 国产成人精品影视| 日本不卡一区二区三区高清视频| 国产精品国产三级国产aⅴ中文| 亚洲国产精品精华液2区45| 在线观看日产精品| 国产精品亚洲人在线观看| 亚洲一区二区三区四区不卡| 久久久久久久久久久99999| 欧美色视频在线| 91在线国产观看| 国产成人亚洲综合a∨猫咪| 午夜精品一区在线观看| 国产精品短视频| 国产亚洲精品免费| 在线不卡免费av| 色噜噜狠狠成人网p站| 国产精品综合网| 日韩制服丝袜先锋影音| 亚洲自拍偷拍综合| 中文字幕一区日韩精品欧美| 久久丝袜美腿综合|