【问题标题】:Detect if event is taken - win32 [duplicate]检测是否发生事件-win32 [重复]
【发布时间】:2014-06-08 02:06:07
【问题描述】:

我想知道是否有人可以帮助我,因为我一直在四处寻找谷歌,我很可能找到了它,但不知道该怎么做。基本上这是我想要执行的例程。我有按钮'a'和按钮'b',如果按下按钮'a'然后打开一个消息框。如果按下按钮“b”,则打开一个新窗口并显示该窗口的内容。

抱歉,我的应用程序基本上有 2 个按钮。 1 标记为“a”,另一个标记为“b”。如何告诉我的应用程序运行某种循环以检查是否按下了这些按钮?如果单击第一个按钮,则打开一个消息框,如果单击第二个按钮,则打开另一个窗口类。然后,我将如何向在同一应用程序中打开的窗口类添加新属性?

我正在考虑在 switch 语句中采用WM_COMMAND 方法,但是 CASES 的 id 是什么,它们如何对应于每个按钮? -- 非常感谢我能在此问题上获得的任何帮助,更感谢代码示例!

干杯

【问题讨论】:

标签: c++ winapi events


【解决方案1】:

在 Win32 中,每个按钮都有一个数字 ID。为所有按钮提供不同的 id 是一种很好的做法。您有责任选择值并将这些数字分配给按钮。

根据环境:纯Win32、MFC、其他,定义值和赋值的细节会有所不同。您可以在创建窗口时指定 id:

HWND WINAPI CreateWindow
(
  _In_opt_  LPCTSTR lpClassName,
  _In_opt_  LPCTSTR lpWindowName,
  _In_      DWORD dwStyle,
  _In_      int x,
  _In_      int y,
  _In_      int nWidth,
  _In_      int nHeight,
  _In_opt_  HWND hWndParent,
  _In_opt_  HMENU hMenu,
  _In_opt_  HINSTANCE hInstance,
  _In_opt_  LPVOID lpParam
);

id 在 hMenu 参数中传递。在http://msdn.microsoft.com/en-us/library/windows/desktop/ms632679(v=vs.85).aspx 中查找详细信息。在带有 id 的 Windows 窗口中不能有菜单。听起来很有趣,但这就是他们在 80 年代中期实现此功能的方式。

分配 ID 后,您可以并且应该在 WM_COMMAND 处理程序中使用它们。

【讨论】:

  • 使用 Windows API 和 MFC 分配资源 ID 没有区别。它们要么在动态创建控件时传递给CreateWindow 的调用,要么在使用对话框模板时在 .rc 脚本中指定,通常由符号预处理器常量作为别名。
  • 所以通过分配 id,你的意思是像例如 HWND button1 = creatwindow() ... 并且 id 是 button1?变量实例?
  • Id 是一个数字,而不是标识符的名称。我修改了答案。
  • “带有 id 的窗口不能有菜单”。您的逻辑全部倒退。子窗口(即具有WS_CHILD 窗口样式的窗口)不能有菜单,而hMenu 参数被重用于表示子窗口标识符。正如您所暗示的那样,分配 ID 不会阻止窗口具有菜单。它是控制hMenu 参数如何解释的窗口样式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 2014-04-17
  • 2012-05-02
  • 1970-01-01
  • 2017-10-29
  • 2020-11-10
相关资源
最近更新 更多