Я написал Excel COM-надстройку в C ++ для автоматизации Excel с VBA. Он содержит собственный диалог, показывающий некоторые общие сведения о надстройке.
Теперь я создаю кнопку в Excel, которая открывает диалоговое окно. Выход из диалогового окна с помощью клавиши escape приводит к сообщению Excel о том, что сценарий прерывается, а не просто закрывается диалоговое окно. Я мог бы подавить сообщение прерывания с помощью:
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)
Большое спасибо!