小编Aci*_*dic的帖子

防止可聚焦控件窃取键盘输入

我正在制作一个简单的游戏,它通过覆盖OnPaint方法在表单上绘制.游戏需要键盘输入,并且工作正常,直到我决定增强GUI并在表单中添加一些按钮.

在我添加这些按钮的那一刻,表单停止接收任何键盘输入,无论我多么努力,焦点总是在按钮上.可以通过在窗体上放置任何可聚焦控件来复制此行为.(即TextBox)

我不需要任何Kayboard与这些按钮的交互,我希望用户只用鼠标与它们进行交互.

我尝试了以下技术来尝试解决这个问题 - 这些都不起作用:

  • 1)表格的正常KeyDownKeyUp事件.(这是我在放置按钮之前捕获键盘输入的方式.)
  • 2)覆盖表格OnKeyDownOnKeyUp事件.
  • 3)覆盖ProcessCmdKey- 工作,但无法区分KeyUp和KeyDown事件,因此对我来说不够.

我也尝试为应用程序创建一个MessageFilter,但我无法强制它只捕获我需要的键盘键.

我已经研究了好几个小时了,找不到合适的解决方案.非常感谢帮助.

.net c# visual-studio-2010 winforms

1
推荐指数
1
解决办法
2543
查看次数

Eclipse - 我自己的进口类?

我有一些我想在许多应用程序中使用的类,所以我的问题很简单:

问:如何将我自己的类添加到Eclipse(或JDK?)中,并像默认的Java库一样轻松/自动导入它们?

提前致谢.

java eclipse

0
推荐指数
1
解决办法
138
查看次数

静态初始化模式

通过静态init方法初始化静态字段的最佳方法是什么,然后确保永远不再调用该方法?(在计划有效期内不超过一次)

这是我目前想到的一个例子,对我来说似乎很简单,但我找不到任何类似模式的例子来解决这个问题:

class Entity
{
    static Manager manager;
    static bool isInitialized;

    public static void Initialize(Manager manager)
    {
        if (isInitialized)
            throw Exception("Class Entity already initialized."
                 + "Do not call Entity.Initialize() twice.");
        isInitialized = true;
        Entity.manager = manager;

    }
}
Run Code Online (Sandbox Code Playgroud)

c# initialization

0
推荐指数
1
解决办法
348
查看次数

为什么指针不能转换为引用?

我在多个来源中读到,C++引用只不过是一个带有编译时间限制的指针.

如果这是真的,为什么我被迫取消引用一个指针,以便将它传递给一个需要参数的函数?

void FooRef(const int&);
void FooPointer(const int*);

int main()
{
    int* p = new int(5);
    FooPointer(p);
    FooRef(*p); // why do I have to dereference the pointer?

    ...
}
Run Code Online (Sandbox Code Playgroud)

据我了解,如果我要传递intFooRef编译器将为我创建变量地址的指针(引用),但如果该类型已经是指针,那么解除引用它似乎毫无意义.在我看来,我正在取消引用一个指针,只是为了让编译器从取消引用的值创建另一个指针,这对我来说似乎毫无意义.
仅复制指针而不仅仅是引用+引用该值是不是更简单/更高效?(也许这真的发生了什么?)

我在这里错过了什么吗?调用FooRef这种情况比调用慢FooPointer吗?
在编译期间,引用和指针是否真的产生相同的代码?

c++ pointers reference

0
推荐指数
1
解决办法
297
查看次数