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