Перейти к содержимому

abaj

Регистрация: 11 фев 2008
Offline Активность: 27 дек 2011 17:08
*****

Мои темы

Workarounds for C++ (MFC) controls

04 декабря 2009 - 17:19

Добрый день,

Есть задача:
автоматизировать тестирование приложения, написанного в С++ 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: этот же вопрос уже задан программистам конкретного приложения, пока думают