我正在创建一个插件框架,我的应用程序加载了一系列插件DLL,然后创建一个新窗口并将这个新窗口的句柄传递给插件。然后,插件可以使用此句柄创建自己的GUI。
一切似乎都运转良好。唯一的问题是当我在插件小部件(例如编辑框)上按TAB时,它不会跳转到另一个小部件。我发现有些Windows消息已经通过,有些则没有通过。为其他键传递WM_KEYDOWN,因为我可以在编辑框上键入,但此消息不处理TAB键。
希望有人有提示。
我正在使用Boru VCL和CBuilder,但我想我可以使用WIN32下的任何框架来创建这些插件,因为他们永远不知道他们的父窗口是如何创建的。
答案 0 :(得分:1)
这确实非常复杂。
当您点击TAB时,只有当这些控件属于“模态”对话框时,焦点才会跳转到另一个控件。实际上有一些按钮,如ESC,LEFT,RIGHT,DOWN,UP,TAB,模态对话框消息功能以特殊方式处理。如果您希望这些键的行为方式与无模式对话框或任何其他窗口类似,则应更改消息处理功能并在内部使用IsDialogMessage。您还可以在MSDN中找到有关IsDialogMessage功能的更多信息,以便更好地了解您可以查看的内容Dialog Boxes部分。
并且,如前所述,您应该在需要时设置WS_TABSTOP和WS_GROUP样式。
祝你好运!答案 1 :(得分:0)
我相信你必须采取以下步骤:
确保您处理编辑控件是多行的情况,因为您可能希望显示真正的制表符而不是移动到下一个控件。
希望有所帮助!
答案 2 :(得分:0)
我相信你在每个dll和exes中都有不同的VCL实例。来自dll的类与exe中的类不同,即使它们被称为相同。全局变量(应用程序,屏幕)也不会在它们之间共享。也没有内存,因为他们都有自己的内存管理器。
解决方案是让dll和exe共享VCL库和内存管理器。我不是BCB开发人员,而是Delphi开发人员。在Delphi中,我们只使用rtl和vcl作为运行时包。也许你可以做同样的BCB。
答案 3 :(得分:0)
DLL有自己的TApplication对象。
提供统一的密钥处理。当DLL加载时。 将DLL :: TApplication分配给EXE :: TApplication 请务必在退出时执行相反操作。
-
迈克尔