Часто бывает нужно программно выбрать одну из радиокнопок, или прокрутить листбокс. Обычно это делается с помощью посылки сообщения хендлу окна нужного контрола (листбокс, чекбокс, кнопка, радиокнопка и т. д.).
[Управление радиокнопкой]
В этом примере показывается, как программно выбрать нужную радиокнопку. Имя Button - название класса окна радиокнопки, а Radio2 - текстовая надпись, принадлежащая нужной радиокнопке.
CWnd *hTmp;
hTmp = FindWindowEx(theApp.m_pMainWnd->m_hWnd, 0, "Button", "Radio2");
::SendMessage(hTmp->m_hWnd, BM_CLICK, 0, 0);
[Управление CEdit]
Операции с многострочным окном редактирования CEdit. В этом примере переменная edVar привязана н контролу многострочного поля редактирования. Чтобы прокрутить текст, например, до конца:
::SendMessage(edVar.m_hWnd, WM_VSCROLL, SB_BOTTOM, 0);
Чтобы прокрутить текст на одну строку:
::SendMessage(edVar.m_hWnd, WM_VSCROLL, SB_LINEDOWN, 0);
[Управление закладками]
Пример манипулирования закладками. Переменная m_Tabs привязана к набору закладок CTabCtrl.
NMHDR hdr;
hdr.code = TCN_SELCHANGE;
hdr.hwndFrom = m_Tabs.m_hWnd;
SendMessage ( WM_NOTIFY, m_Tabs.GetDlgCtrlID(), (LPARAM)&hdr );
[Запуск программы, манипулирование окном программы]
В следующем примере запускается программа putty и автоматически вводится логин и пароль:
bool TelnetLogon (tDevParam cisco)
{
HWND hTmp;
bool bTelnetFinded = false;
char ch;
CString csSendText;
WinExec(csTelnetPath + " -telnet " + cisco.csIPadmin,SW_SHOW);
for (int iTimeOut=10;iTimeOut!=0;iTimeOut--)
{
Sleep(100);
hTmp = FindWindowEx(NULL, 0, "PuTTY", cisco.csIPadmin + " - PuTTY");
if (NULL != hTmp)
{
bTelnetFinded = true;
break;
}
}
//посылаем логин
csSendText = cisco.csUserLogin + "\n";
if (bTelnetFinded)
{
for (int iCharIdx=0;iCharIdx<csSendText.GetLength();iCharIdx++)
{
ch = csSendText[iCharIdx];
::SendMessage(hTmp, WM_CHAR, ch, 0x00000001);
Sleep(10);
}
}
else
return false;
//посылаем пароль
csSendText = cisco.csUserPassword + "\n";
for (int iCharIdx=0;iCharIdx<csSendText.GetLength();iCharIdx++)
{
ch = csSendText[iCharIdx];
::SendMessage(hTmp, WM_CHAR, ch, 0x00000001);
Sleep(10);
}
return true;
}
[Отладка сообщений Windows]
Отлаживать сообщения можно удобным инструментом Visual Studio - Spy++ (доступен через меню Tools\Spy++). У него в меню сначала выбираем Spy\Log Messages, где на первой закладке Windows с помощью Finder Tool выбираем контрол, у которого отслеживаем сообщения. Потом переключаемся на закладку Messages, где галочками отфильтровываем сообщения, которые надо показывать. Потом жмем OK, и жмем на тестируемые контролы. В окне Spy++ можно просматривать появляющиеся сообщения. |