控件如何收到其他控件所引的按消息或事件
控件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);
}