读书人

控件怎么收到其他控件所引的按

发布时间: 2014-01-03 14:10:51 作者: rapoo

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

读书人网 >C++ Builder

热点推荐