Все стандартные элементы управления Windows используются при создании программ совершенно одинаково. Есть два способа: первое - это поместить их на диалоговую панель, и второй - написать весь код руками. При помещении на диалоговую панель происходит тоже самое, что при написании кода руками только все делает ClassWizard. Давайте с Вами посмотрим общую методику.
Создаем приложение на базе диалогового окга с именем TestCommon.
Сначала необходимо описать класс элемента управления в классе диалога. Вот так:
class CTestCommonDlg : public CDialog { // Construction public: ...... // Implementation CEdit m_Edit; CSpinButtonCtrl m_Spin; protected: ......
Вызывает функцию Create для создания элементов управления нужно из функции OnInitDialog класса диалога. Давайте создадим.
BOOL CTestCommonDlg::OnInitDialog() { ...... // TODO: Add extra initialization here m_Edit.Create(WS_CHILD | WS_VISIBLE | WS_BORDER,CRect(10,10,100,50),this,ID_EDIT); m_Spin.Create(WS_CHILD | WS_VISIBLE | WS_BORDER,CRect(200,200,300,250),this,ID_SPIN); return TRUE; // return TRUE unless you set the focus to a control }
Если сейчас запустить приложение, то оба элемента управления будут на диалоговом окне.
В ходе работы приложения все controls посылают извещения. Извещения обрабатываются в функции OnNotify, добавьте ее к классу диалога используя Add Virtual Function. Давайте перехватим извещенение о том, что происходит нажатие на SpinButton.
BOOL CTestCommonDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { // TODO: Add your specialized code here and/or call the base class if (wParam==ID_SPIN) { AfxMessageBox("Notification message"); } return CDialog::OnNotify(wParam, lParam, pResult); }
При запуске программы нажатие на SpinButton будет вызывать диалоговое окно. В wParam находится идентификатор элемента управления пославшего извещение. В lParam находится указатель на структуру сообщения NMHDR.