nxopen c++ 在apply_cb()中调用带对话框的dll时出现无法启动对话框
时间: 2024-03-02 17:47:54 浏览: 130
在使用nxopen c++中调用带有对话框的dll时,可能会出现无法启动对话框的问题。这通常是由于在apply_cb()函数中调用dll时,由于没有正确的消息循环和窗口句柄,导致无法显示对话框。
解决这个问题的方法是在apply_cb()函数中创建一个模式对话框,并将其设置为应用程序的主窗口。这样,当调用dll时,对话框就可以正确地显示出来。
以下是一个示例代码:
```
#include <uf_ui.h>
extern "C" DllExport void my_function()
{
HWND parent = (HWND)UF_UI_ask_application_window();
HINSTANCE hInstance = GetModuleHandle(NULL);
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MY_DIALOG), parent, MyDialogProc);
}
INT_PTR CALLBACK MyDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
// Handle dialog messages here
}
return FALSE;
}
extern "C" DllExport void apply_cb()
{
// Create a modeless dialog and set it as the application's main window
HWND parent = (HWND)UF_UI_ask_application_window();
HINSTANCE hInstance = GetModuleHandle(NULL);
HWND hDialog = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_MY_DIALOG), parent, MyDialogProc);
UF_UI_set_application_window(hDialog);
// Call the DLL function that displays the dialog
my_function();
}
```
在这个示例中,apply_cb()函数首先创建一个模式对话框,并将其设置为应用程序的主窗口。然后,它调用包含对话框的dll的函数my_function()。在my_function()函数中,对话框将会正确地显示出来。
阅读全文