Дъщерни контроли в Windows среда
| Информационни технологии | 2009-12-04 | 63 сваляния |
17 Дъщерни контроли в Windows среда. Принзипи на обработка на събития в дъщерни контроли.Класически и общи контроли.Статични, бутони, контроли за редактиране и листване.Обвивка с класовете на MFC. Методика на разширяване функционалността на стандартен контрол.
Дъщерни контроли
определяне на родител: hwndParent = GetParent(hwndChild);
съобщения към родител: SendMessage(hwndParent,message,wParam,lParam);
Бутони (pushbutton, check box, radio, group box)
WM_COMMAND
SendMessage(hwndButton, BM_SETSTATE,1,0); // симулира натиск.
Това е прозорец, който има някаква специфика при обработването и се явява дъщерен на един по общ прозорец, най-често съобщения към родителя и най-честото съобщение е window command.
Прихващане на функции (Windows subclassing)
1. lpfnScrollProc=MakeProcInstance((FARPROC)ScrollProc, hInstance);
2.Чрез GetWindowLong() се извлича адреса на стандартната функция.
3.Чрез SetWindowLong() се установява новия адрес .
4. Връщане към стандартната Windows функция :
CallWindowProc(lpfnStandart, hwnd, message, wParam, lParam);
Контрол за редактиране (edit )
CreateWindow(edit, );
бутонът изпраща WM_COMMAND с нотификационен код ( в lParam).
Контроли в 32 битови версии
над 20 типа.
6 са класически- от първите версии. Имат поддръжка на MFC:
CButton, CListBox; CEdit; CComboBox; CScrollBar; CStatic.
ето създаване на бутон:
CButton m_wndPushButton;
m_wndPushButton.Create(_T(Start), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, rect, this, IDC_BUTTON);
CEdit
CEdit::SetMargins() // задава размерите на полетата вляво и дясно
CEdit::SetRect() // задава редакторската област в контрола
CEdit::SetLimitText() // задава макс. брой символи (подрзабират се 30000.
CEdit::SetWindowText()
CEdit::GetWindowText() ф-иите са наследени от CWnd
:
:Clear()
::Cut() за селектиран текст
::Copy()
::Paste()
Пример: edit контрол, който приема само числови стойности:
class CNumEdit : public CEdit
{ protected:
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CNumEdit, CEdit)
ON_WM_CHAR()
END_MESSAGE_MAP()
void CNumEdit::OnChar((UINT nChar, UINT nRepCnt, UINT nFlags)
{
if((( nChar >= _T(0)) && (nChar <= _T(9)))) CEdit::OnChar(nChar, nRepCnt, nFlags);
}
Тагове от реферата: Windows, контрол, среда











