我正在制作一个简单的游戏,它通过覆盖OnPaint方法在表单上绘制.游戏需要键盘输入,并且工作正常,直到我决定增强GUI并在表单中添加一些按钮.
在我添加这些按钮的那一刻,表单停止接收任何键盘输入,无论我多么努力,焦点总是在按钮上.可以通过在窗体上放置任何可聚焦控件来复制此行为.(即TextBox)
我不需要任何Kayboard与这些按钮的交互,我希望用户只用鼠标与它们进行交互.
我尝试了以下技术来尝试解决这个问题 - 这些都不起作用:
KeyDown和KeyUp事件.(这是我在放置按钮之前捕获键盘输入的方式.)OnKeyDown和OnKeyUp事件.ProcessCmdKey- 工作,但无法区分KeyUp和KeyDown事件,因此对我来说不够.我也尝试为应用程序创建一个MessageFilter,但我无法强制它只捕获我需要的键盘键.
我已经研究了好几个小时了,找不到合适的解决方案.非常感谢帮助.
我有一些我想在许多应用程序中使用的类,所以我的问题很简单:
问:如何将我自己的类添加到Eclipse(或JDK?)中,并像默认的Java库一样轻松/自动导入它们?
提前致谢.
通过静态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++引用只不过是一个带有编译时间限制的指针.
如果这是真的,为什么我被迫取消引用一个指针,以便将它传递给一个需要参数的函数?
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)
据我了解,如果我要传递int给FooRef编译器将为我创建变量地址的指针(引用),但如果该类型已经是指针,那么解除引用它似乎毫无意义.在我看来,我正在取消引用一个指针,只是为了让编译器从取消引用的值创建另一个指针,这对我来说似乎毫无意义.
仅复制指针而不仅仅是引用+引用该值是不是更简单/更高效?(也许这真的发生了什么?)
我在这里错过了什么吗?调用FooRef这种情况比调用慢FooPointer吗?
在编译期间,引用和指针是否真的产生相同的代码?