Главная arrow Программирование arrow PC arrow Microsoft Visual C++: как посылать сообщения контролам, или как программно нажать кнопку Sunday, April 23 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

Microsoft Visual C++: как посылать сообщения контролам, или как программно нажать кнопку Версия для печати
Написал microsin   
11.04.2008

Часто бывает нужно программно выбрать одну из радиокнопок, или прокрутить листбокс. Обычно это делается с помощью посылки сообщения хендлу окна нужного контрола (листбокс, чекбокс, кнопка, радиокнопка и т. д.).


В этом примере показывается, как программно выбрать нужную радиокнопку. Имя Button - название класса окна радиокнопки, а Radio2 - текстовая надпись, принадлежащая нужной радиокнопке.
CWnd *hTmp;
hTmp = FindWindowEx(theApp.m_pMainWnd->m_hWnd, 0, "Button", "Radio2");
::SendMessage(hTmp->m_hWnd, BM_CLICK, 0, 0);

Операции с многострочным окном редактирования 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;
}


Отлаживать сообщения можно удобным инструментом Visual Studio - Spy++ (доступен через меню Tools\Spy++). У него в меню сначала выбираем Spy\Log Messages, где на первой закладке Windows с помощью Finder Tool выбираем контрол, у которого отслеживаем сообщения. Потом переключаемся на закладку Messages, где галочками отфильтровываем сообщения, которые надо показывать. Потом жмем OK, и жмем на тестируемые контролы. В окне Spy++ можно просматривать появляющиеся сообщения.
Последнее обновление ( 18.04.2008 )
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017