面
面条
Unregistered / Unconfirmed
GUEST, unregistred user!
具体说就是怎么在CBuilder中继承祖先类中的方法和消息处理函数,以下代码是
我临时写的,不一定能编译,主要看意思。
例如在Delphi中我有这样一段代码:
type
TMyEdit=class(Edit)
protected
procedure WMChar(var Msg:TMessage);message WM_CHAR;
procedure Change;override;
end;
implementation
procedure TMyEdit.WMChar(var Msg:TMessage);
begin
ShowMessage('ok');
inherited;
end;
procedure TMyEdit.Change;
begin
inherited;
Beep;
end;
在CBuilder中我不知如何实现才是正确的
以下是我的代码
.HPP:
class THD_HZEdit : public TEdit
{
private:
protected:
void __fastcall WMCHAR(TMessage &Msg);
void __fastcall Change(void);
public:
__fastcall THD_HZEdit(TComponent* Owner);
__published:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_CHAR,TMessage,WMCHAR);
END_MESSAGE_MAP(TCustomEdit);
};
.CPP:
void __fastcall THD_HZEdit::Change(void)
{
TEDit::Change(); //调用祖先类的方法
Beep();
}
void __fastcall THD_HZEdit::WMCHAR(TMessage &Msg)
{
if (Msg.WParam<128)
Msg.WParam=0;
//因为祖先类的同名处理函数申明为私有,无法调用(与Delphi中不同,
//CBuilder所有消息处理函数都申明为私有,而不是保护)。
//所以我只能让祖先类重新分派消息
TCustomEdit:
ispatch(&Msg);
}
我临时写的,不一定能编译,主要看意思。
例如在Delphi中我有这样一段代码:
type
TMyEdit=class(Edit)
protected
procedure WMChar(var Msg:TMessage);message WM_CHAR;
procedure Change;override;
end;
implementation
procedure TMyEdit.WMChar(var Msg:TMessage);
begin
ShowMessage('ok');
inherited;
end;
procedure TMyEdit.Change;
begin
inherited;
Beep;
end;
在CBuilder中我不知如何实现才是正确的
以下是我的代码
.HPP:
class THD_HZEdit : public TEdit
{
private:
protected:
void __fastcall WMCHAR(TMessage &Msg);
void __fastcall Change(void);
public:
__fastcall THD_HZEdit(TComponent* Owner);
__published:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_CHAR,TMessage,WMCHAR);
END_MESSAGE_MAP(TCustomEdit);
};
.CPP:
void __fastcall THD_HZEdit::Change(void)
{
TEDit::Change(); //调用祖先类的方法
Beep();
}
void __fastcall THD_HZEdit::WMCHAR(TMessage &Msg)
{
if (Msg.WParam<128)
Msg.WParam=0;
//因为祖先类的同名处理函数申明为私有,无法调用(与Delphi中不同,
//CBuilder所有消息处理函数都申明为私有,而不是保护)。
//所以我只能让祖先类重新分派消息
TCustomEdit:
![Big Grin :D :D](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f600.png)
}