Я написал надстройку Excel COM на C++ для автоматизации Excel с помощью VBA. Он содержит собственный диалог, показывающий некоторые общие сведения о Надстройке. Теперь я создаю кнопку в Excel, которая открывает диалог. Выход из диалогового окна с помощью клавиши escape приводит к сообщению Excel о прерывании сценария, а не просто закрытии диалога. Я мог подавить сообщение прерывания с:Диалоговое окно надстройки Excel COM прерывает сценарий
Application.EnableCancelKey = xlDisabled
Но это, кажется, не подходит, поскольку сценарий не может быть прервана больше.
Вот пример того, как я использовать VBA, чтобы открыть диалоговое окно:
Private Sub ShowAboutDialog_Click()
Dim oComAddIn As COMAddIn
Set oComAddIn = Application.COMAddIns.Item("MyComAddIn.Example")
oComAddIn.Connect = True
Call oComAddIn.Object.ShowAboutDlg
End Sub
Я думаю, что проблема находится где-то в обработчике сообщений диалога:
INT_PTR CALLBACK CAboutDialog::AboutDlg(
HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
...
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
// Here, the ESCAPE key should also be trapped?
EndDialog(hwndDlg, LOWORD(wParam));
return TRUE;
}
...
}
return FALSE;
}
диалоговом создается с :
DialogBox(g_hModule, MAKEINTRESOURCE(IDD_ABOUT), hWndParent, (DLGPROC)AboutDlg)
Большое спасибо!