Есть задача:
автоматизировать тестирование приложения, написанного в С++ MFC.
дополнительно есть ActiveX контролы, но только аналоги Button и StaticText.
Автотест тулза еще не выбрана, и один из главных критериев - чтобы тулза или сама хорошо работала с MFC, или было легко реализовать воркэраунд.
Вопрос: Какие есть способы реализовать воркэраунд для C++ MFC контрола ?
1. MFC контролы отзываються на SendMessage
Большинство средств автоматизации позволяют подгружать dll, брать handle обьекта и вызывать что-то типа
::SendMessageW(hWnd, WM_GETTEXT, lParam, (LPARAM)pStr);Но даже стандартные MFC контролы поддерживают не все мессаги.
Пример:
Генерим в VisualStudio (2008 trial) MFC MDI application
И пытаемся работать с CMFCToolBar из TestComplete (7, trial) и AutoIt.
TestComplete 7 (в отличие от TestComplete 5) может и записать клики на кнопки тулбара, и брать проперти wButtonBounds.
AutoIt может работать с "обычным" тулбаром через функции _GUICtrlToolbar_, реализованные через SendMessage. Но CMFCToolBar не берет.
Например TB_GETRECT возвращает пустой RECT
Та же проблема и если делать вызов из какого-нибудь C++ приложения
wParam = 35809; //TB button id UINT Msg = TB_GETRECT; RECT * tRect = new RECT(); LPARAM lp = (LPARAM)tRect; ::SendMessageW(hWnd, Msg, wParam, lp);
Хотя может неправильно отсылаю мессагу.
(Можно еще заставить программистов реазовать/исправить обработку нужной мессаги.
Но это может не получиться, например программистам пока не удается реализовать обработку WM_GETTEXT для custom CComboBox, мессага где-то теряется)
2. Может быть можно написать какие-то другие wrappers в C++ или в чем то еще ?
3. Любые другие способы
Спасибо
PS: этот же вопрос уже задан программистам конкретного приложения, пока думают