如何在C++Builder中手动获取TMouseButton
How to manually get TMouseButton in C++Builder
我正在使用 Embarcadero Technology 的 C++Builder。内置的 OnClick 事件处理程序无法识别鼠标单击是左键还是右键。有没有我可以调用的函数来手动填充 TMouseButton 的值。下面是 OnClick 事件处理程序?
void __fastcall TForm::ListBox1Click(TObject *Sender)
{
TMouseButton Button;
Button = ???
}
用于鼠标单击事件详细信息的正确事件是 OnMouseDown
(还有 OnMouseUp
和 OnMouseMove
)。
覆盖事件然后像这样实现 MouseDown 事件
void __fastcall TMyListView::MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y)
{
if (Button == mbLeft){
}
if (Button == mbRight){
}
}
另请参阅 Embarcadero 文档中的 Vcl.Controls.TControl.OnMouseDown。
正如其他人提到的,您可以使用 OnMouseDown
事件来记住当前鼠标按钮状态,以便在 OnClick
中使用,例如
private:
bool LButtonDown;
bool RButtonDown;
...
void __fastcall TForm1::ListBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
switch (Button) {
case mbLeft:
LButtonDown = true;
break;
case mbRight:
RButtonDown = true;
break;
}
}
void __fastcall TForm1::ListBox1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
switch (Button) {
case mbLeft:
LButtonDown = false;
break;
case mbRight:
RButtonDown = false;
break;
}
}
void __fastcall TForm::ListBox1Click(TObject *Sender)
{
if (LButtonDown) ...
if (RButtonDown) ...
}
如果不想那样做,可以用Win32的APIGetKeyState()
or GetAsyncKeyState()
函数查询鼠标左右键当前状态,使用VK_LBUTTON
和 VK_RBUTTON
虚拟键码,例如:
void __fastcall TForm::ListBox1Click(TObject *Sender)
{
if (GetKeyState(VK_LBUTTON)) ...
if (GetKeyState(VK_RBUTTON)) ...
}
我正在使用 Embarcadero Technology 的 C++Builder。内置的 OnClick 事件处理程序无法识别鼠标单击是左键还是右键。有没有我可以调用的函数来手动填充 TMouseButton 的值。下面是 OnClick 事件处理程序?
void __fastcall TForm::ListBox1Click(TObject *Sender)
{
TMouseButton Button;
Button = ???
}
用于鼠标单击事件详细信息的正确事件是 OnMouseDown
(还有 OnMouseUp
和 OnMouseMove
)。
覆盖事件然后像这样实现 MouseDown 事件
void __fastcall TMyListView::MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y)
{
if (Button == mbLeft){
}
if (Button == mbRight){
}
}
另请参阅 Embarcadero 文档中的 Vcl.Controls.TControl.OnMouseDown。
正如其他人提到的,您可以使用 OnMouseDown
事件来记住当前鼠标按钮状态,以便在 OnClick
中使用,例如
private:
bool LButtonDown;
bool RButtonDown;
...
void __fastcall TForm1::ListBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
switch (Button) {
case mbLeft:
LButtonDown = true;
break;
case mbRight:
RButtonDown = true;
break;
}
}
void __fastcall TForm1::ListBox1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
switch (Button) {
case mbLeft:
LButtonDown = false;
break;
case mbRight:
RButtonDown = false;
break;
}
}
void __fastcall TForm::ListBox1Click(TObject *Sender)
{
if (LButtonDown) ...
if (RButtonDown) ...
}
如果不想那样做,可以用Win32的APIGetKeyState()
or GetAsyncKeyState()
函数查询鼠标左右键当前状态,使用VK_LBUTTON
和 VK_RBUTTON
虚拟键码,例如:
void __fastcall TForm::ListBox1Click(TObject *Sender)
{
if (GetKeyState(VK_LBUTTON)) ...
if (GetKeyState(VK_RBUTTON)) ...
}