我看了这个问题,虽然它会有所帮助,但 WndProc 不会触发
所以我有一个游戏板,它是一个带有图片框的用户控件。在 mouseClick 事件期间,我进行了一次点击测试以确定板的哪个部分被点击并将一块放在相关区域中。然后,我创建了一个游戏片段,并将其从宿主窗体边缘动画到棋盘上的适当位置。所以游戏块不是游戏板的孩子
这一切都很好。但是,如果用户单击游戏块,则下方棋盘的 mouseClick 不会引发事件。我有点明白,就像按钮下的按钮。
我的问题是我可以“通过”游戏的点击事件,所以只有棋盘是“可点击的”
public enum PieceColor
{
Blue=0,
Yellow,
Red,
Green
}
public class GamePiece : PictureBox
{
PieceColor _color;
public PieceColor Color {
get {
return _color;
}
set
{
_color = value;
if (_color == PieceColor.Blue)
this.Image = global::GameEntities.Properties.Resources.pieceBlue;
}
}
protected override void WndProc(ref Message m)
{
const int WM_NCHITTEST = 0x0084;
const int HTTRANSPARENT = (-1);
if (m.Msg == WM_NCHITTEST) //<-- this never fires
{
m.Result = (IntPtr)HTTRANSPARENT;
}
else
{
base.WndProc(ref m);
}
}
}