控件怎么收到其他控件所引發的按鍵觸發消息或事件
控件如何收到其他控件所引發的按鍵觸發消息或事件
當控件A鍵入 上.下.左.右.Tab 按鍵時將焦點移至控件B時...請問控件B如何接收到控件A所引發的按鍵觸發消息或事件呢?
------解决方案--------------------
焦点移至控件B时,控件B会收到WM_SETFOCUS消息。子类化控件B,拦截一下这个消息就行了。示例代码:
.h 文件中:
.cpp 文件中:
------解决方案--------------------
你是说B获得焦点后,要知道上一个获得焦点的控件是什么吧?
------解决方案--------------------
俺貌似又看懂了。。。
WM_SETFOCUS 消息的 WPARAM 是上个失去焦点的控件的 HWND,例如焦点从A->B,
WM_SETFOCUS 的 WPARAM 就是 A 的 HWND
另外也可以自己定义消息来处理吧,比如A控件按下 -> 键后就发消息给B,把当前的按键放到消息参数中,B如果收到消息并且自己获得了焦点,就从消息参数中获取按键的信息
------解决方案--------------------
當控件A鍵入 上.下.左.右.Tab 按鍵時將焦點移至控件B時...請問控件B如何接收到控件A所引發的按鍵觸發消息或事件呢?
------解决方案--------------------
焦点移至控件B时,控件B会收到WM_SETFOCUS消息。子类化控件B,拦截一下这个消息就行了。示例代码:
.h 文件中:
private: // User declarations
void __fastcall NewProc(TMessage &Message);
.cpp 文件中:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Edit1->WindowProc = NewProc;
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::NewProc(TMessage &Message)
{
if (Message.Msg == WM_SETFOCUS)
{
Memo1->Lines->Add("获得焦点");
}
Edit1->Dispatch(&Message);
}
------解决方案--------------------
你是说B获得焦点后,要知道上一个获得焦点的控件是什么吧?
------解决方案--------------------
俺貌似又看懂了。。。
WM_SETFOCUS 消息的 WPARAM 是上个失去焦点的控件的 HWND,例如焦点从A->B,
WM_SETFOCUS 的 WPARAM 就是 A 的 HWND
另外也可以自己定义消息来处理吧,比如A控件按下 -> 键后就发消息给B,把当前的按键放到消息参数中,B如果收到消息并且自己获得了焦点,就从消息参数中获取按键的信息
------解决方案--------------------
void __fastcall TForm1::NewProc(TMessage &Message)
{
if (Message.Msg == WM_SETFOCUS)
{
HWND h = (HWND)Message.WParam;
TControl *p = FindControl(h);
Memo1->Lines->Add(String().sprintf(
"获得焦点, 上一个焦点来自: %s",
p? p->Name: String("未知")));
}
Edit1->Dispatch(&Message);
}