如何从本机C DLL显示简单的无模式窗口

我必须在本机C DLL中创建一个简单的提示。 我从来没有用C创建窗口,所以我不知道存在什么可能性。

窗口应包含文本框和按钮。 当用户按下按钮时,我应该能够获得该文本框的值。 如图所示,窗口不应该中断程序流程,它应该是无模式的。 我必须能够从DLL中的代码关闭窗口。

我想到使用MFC,直到我意识到它是用于C ++。 所以我认为我可以编写一个包装器然后像这样使用它,但显然必须重新构建项目的某些部分以便它可以工作(比如更改入口点)。 我对如何使用任何“GUI-Frameworks”感到有点困惑,但是如果有一个简单的解决方案会很棒。

解决方案应该尽可能简单。

编辑:

DLL用于什么……

我们有一个使用SCC接口的应用程序套件(我将其称为IDE)。 我们有一个SVN存储库,因此我们使用PushOk将查询从IDE转换为SVN命令。 PushOk和IDE对SCC接口的定义并不总是一致的,因此IDE会因某些操作而崩溃。 由于我们没有PushOk的源代码,我们编写了自己的代理DLL来修复我们遇到的具体问题。

现在,PushOk没有选项来获取文件,同时指定修订版(它确实在我们的情况下不起作用)。 所以我们必须自己实现它。 所提到的窗口将是可以输入修订版本的窗口,然后我们将获得该修订版本的文件。

您不应该使用DLL中的GUI框架,这是一个灾难的处方。 坚持普通的win32 api(CreateDialog()和朋友们都应该很好)。

(那个短语是从评论中复制出来的,所以我会详细说明)。

这个function实际上退出了易于使用:

  • 首先,您需要将一个DIALOG资源编译到您的DLL中。 VisualStudio集成资源编辑器在这里很方便。

  • 然后编写DLGPROC函数

 BOOL CALLBACK MyDialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: /* ... */ default: return FALSE; } } 
  • 在导出的函数中只需调用,并保存句柄以供日后使用:

  HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(ID_MY_DIALOG), NULL); 
  • 如果要销毁对话框,只需调用:

 DestroyWindow(hWnd); 

在此处找到您想要了解的有关Win32对话框的所有内容(以及更多内容)。