Сообщение от элементов на диалоговом окне

Идея данного примера в организации централизованной обработки сообщений от элементов управления в диалоговом окне.

gif/32_1.gif (2187 b)

Мною "созданы" два класса:

CEditButtom  - поле с кнопкой.
CMyButton    - сама кнопка.

В CEditButtom::OnCreate(LPCREATESTRUCT lpCreateStruct) при создании поля создаем и кнопу, вот только ParentWnd у нее не CEditButtom , а ParentWnd для CEditButtom. Насколько это правильно, вопрос остается открытым, но для меня было так проще. Если родителем выступает CEditButtom, то необходимо решить такую проблему, как закрашивание кнопки фоном текста при установлении на поле фокуса.

CMyButton имеет хитрый член класса с типом INT /*уникальный код родителя в диалоге родителе*/, а при нажатии на кнопу посылает сообщение:

void CMyButton::OnClicked() 
{
     CMyButton::GetParent()->SendMessage(CMyButton::m_Mothclick,(WPARAM)m_ParentBy,0);
}

В диалоге CTMP5Dlg заводим свое сообщение.

............
UINT WM_MOTHCLICK =  RegisterWindowMessage((LPCTSTR) "MESSAGE_MOTHCLICK");
///////////////////////////////////////
// CAboutDlg dialog used for App About
............
BEGIN_MESSAGE_MAP(CTMP5Dlg, CDialog)
	//{{AFX_MSG_MAP(CTMP5Dlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_REGISTERED_MESSAGE(WM_MOTHCLICK ,OnMothClick)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

Описываем реакцию на сообщение.

class CTMP5Dlg : public CDialog
{
.......
	CEditButtom m_DlgEditButtom3;
	afx_msg LRESULT OnMothClick(WPARAM wParam, LPARAM lParam);
// Dialog Data
.......
};

afx_msg LRESULT CTMP5Dlg::OnMothClick(WPARAM wParam, LPARAM lParam)
{
	CDialogEditClient a1;
	CDialogEditDetal a2;
	switch ((int) wParam)
	{
		case IDC_EDIT1 :

			if (a1.DoModal()==IDOK)
			{
				AfxMessageBox("Edit1");
			}
			break;
		case IDC_EDIT3 :
			
			if (a2.DoModal()==IDOK)
			{
				AfxMessageBox("Edit2");
			}
			
			break;
	}
	
	return 0;
}

Просто пример, вывод разных диалогов. Далее уже понятно.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Moth - 10.09.2000