Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Регистрация класса окна и Создание окна
Содержание книги
- Структура классов ППП для решения задач оптимизации
- virtual void function() = 0;. class CAbstractProblem. чисто виртуальная функция. class CRealProblem: public CAbstractProblem. входные данные задачи. конструктор. деструктор. функции доступа к переменным класса. class CAbstractResult. чисто виртуальная фун
- Решение задач лп с помощью пакета ilog OPL Studio
- sum(j in Products) a[i,j]*x[j]>=b[i];
- forall(i in Parameters : i <> Calories)
- Тестирование программного обеспечения
- Тестирование в итеративном жизненном цикле проекта
- Принципы поиска ошибок при тестировании
- Проверка в нормальных условиях предполагает тестирование на данных, которые характерны для реальных условий функционирования программы.
- Дж. Шеферд. Программирование на Microsoft VIsual C++. Net
- Система, управляемая сообщениями
- By byte (8-битовое целое без знака)
- h дескриптор (handle) - обычно DWORD
- quot;SubSystem"->"/SUBSYSTEM:WINDOWS" или "/SUBSYSTEM:CONSOLE"
- Include "windows. H". Lresult callback windowproc(. Lparam lparam). Paintstruct PS;. HDC hdc;. Char lpszhello[]="hello, World. ";. Switch (wmessage). HDC = beginpaint(hwnd, &ps);. Rect RT;. Getclientrect(hwnd, &rt);. Amp;rt,dt_
- Подготавливаем данные класса окна и регистрируем его
- LPARAM lParam; // конкретный смысл которой зависит от
- Регистрация класса окна и Создание окна
- BOOL InitInstance(HINSTANCE hInstance, int nCmdShow,
- Оконная процедура регистрируется в системе и вызывается всякий раз, когда Windows выполняет какую-либо операцию над окном приложения.
- GetClientRect(hWnd, &rt);. DrawText(hdc,lpszHello,strlen(lpszHello),&rt,DT_LEFT);. EndPaint(hWnd, &ps);. case WM_DESTROY: PostQuitMessage(0); break;. return DefWindowProc(hWnd,wMessage,wParam,lParam);. return 0;
- Общие сведения о сообщениях Win32
- Аппаратные (входные данные от мыши, клавиатуры и таймера);
- Список (list Box) –элемент отображения списка элементов, позволяющий пользователю выбрать один или несколько из них.
- пиктограммы (icons) – битовые массивы, использующиеся для визуального представления различных объектов в системе.
- CCmdTarget - базовый класс для всех объектов, которые могут получать и отправлять сообщения.
- Шаг2. Выбираем «An empty project»
- Макросы-компоненты карты сообщений
- afx_msg void OnLButtonUP(UINT nFlags, CPoint point);
- Nmhdr *pnotifystruct, //указатель на структуру с данными
- Посылает сообщение в объект класса cwnd или его потомка, непосредственно вызывая оконную процедуру, и не выходит из нее, пока та не обработает сообщение;
- strMessageText.Format("Error number %d", nError);
- Архитектура «Документ-представление» и MDI-приложения
- HMENU CMDIChildWnd::m_hMenuShared
- дескриптор меню, ассоциированного с окном “MDI child”.
- CDocument* CView:: GetDocument()
- Динамическое создание с помощью конструктора
- virtual POSITION CDocument::GetFirstViewPosition()
- Класс шаблона cdoctemplate в приложении отвечает за взаимодействие документов, их представлений и фреймов. В MDI приложении используется его потомок cmultidoctemplate.
- CMultiDocTemplate* pDocTemplate;
- CFrameWnd* pFrame,CDocument* pDoc, BOOL bMakeVisible=TRUE);
- POSITION CWinApp::GetFirstDocTemplatePosition()
- Документ, связанный с активным представлением
- AFX_THREADPROC pfnThreadProc, // Глобальная функция потока
- UINT Msg, // идентификатор сообщения
- Solver* pSolver; //Solver to use
- virtual CDocument* CFrameWnd::GetActiveDocument()
- SendMessage(WM_COMMAND,ID_FILE_SAVE,0);
- while (::GetMessage(&msg, NULL,0,0))
- Объекты, объявленные как volatile, не подвержены оптимизации и временному хранению в регистрах, но читаются и записываются каждый раз напрямую в память.
Регистрация класса окна и создание окна
Теперь можно вернуться к разбору программы "Hello, World!". Одна из задач функции WinMain() заключается в регистрации класса окна приложения.
Класс окна содержит комбинацию выбранных пользователем свойств окна, дескрипторы значка и указателя мыши, а также прочие атрибуты и выступает в роли шаблона при создании соответствующих окон приложения.
Примечание. В Windows 95/98/NT требуется, чтобы не только приложения, но и все экземпляры одного приложения регистрировали собственные классы окон.
BOOL RegisterMyWindow(HINSTANCE hInstance,
const char * lpszName)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW; // тип отображаемого окна
wc.lpfnWndProc = (WNDPROC) WindowProc; // адрес оконной процедуры
wc.cbClsExtra = 0; //extra field
wc.cbWndExtra = 0; //extra field
wc.hInstance = hInstance; // номер приложения
wc.hIcon = LoadIcon(hInstance,IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground= (HBRUSH) (COLOR_WINDOW+1); // фон окна
wc.lpszMenuName = NULL;
wc.lpszClassName= lpszName;
//определяет имя класса совпадающим с именем приложения
return RegisterClass(&wc);
}
В функции RegisterMyWindow с этой целью заполняется стандартная структура WNDCLASS wc, имеющая такой вид:
typedef struct _WNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
Ниже описываются различные поля структуры wndclass:
.style определяет свойства окна. С помощью операции побитового ИЛИ можно задать комбинацию из нескольких свойств. Все возможные свойства поля style перечислены в MSDN в разделе "Platform SDK". Отметим здесь только, что CS_HREDRAW задает операцию перерисовки окна при изменении горизонтального размера, а CS_VREDRAW – при изменении вертикального размера.
.lpfnWndProc содержит указатель на оконную процедуру, которая будет обрабатывать все сообщения, посылаемые окну.
.cbClsExtra содержит информацию о количестве байтов, выделяемых системой после структуры класса окна. Значение этого параметра может быть равным NULL.
.cbWndExtra содержит информацию о количестве байтов, выделяемых системой после создания экземпляра окна (некоторым типам окон, например, диалоговым, требуется дополнительная память). Этот параметр может быть равным NULL.
.hInstance содержит дескриптор экземпляра приложения, регистрирующего класс окна.
.hIcon содержит дескриптор значка приложения. Этот параметр может быть равным NULL – тогда будет использована стандартная пиктограмма по умолчанию (как раз она и грузится в нашем примере явно) – она выглядит как флажок с эмблемой Windows.
.hCursor содержит дескриптор указателя мыши, используемого в окне приложения. Этот параметр может быть равным NULL. В нашем примере создается указатель мыши idc_arrow (соответствует обычному указателю мыши в виде наклоненной стрелки), дескриптор которого возвращается функцией LoadCursor().
.hbrBackground определяет кисть, используемую для заливки фона окна. Может содержать дескриптор реальной кисти или одну из стандартных констант (к задаваемой константе следует прибавить 1). В частности, COLOR_WINDOW – однотонный фон окна по умолчанию. Если значение параметра hbrBackground равно NULL, то приложение должно самостоятельно управлять заливкой фона окна при получении сообщения WM_ERASEBKGND.
.lpszMenuName содержит указатель на строку, завершающуюся нулевым символом и представляющую собой имя ресурса меню. Этот параметр может быть равным NULL.
.lpszClassName содержит указатель на строку, завершающуюся нулевым символом и представляющую собой имя класса окна.
В WinAPI -функцию RegisterClass() передается указатель на только что созданную структуру класса окна. Если Windows не может зарегистрировать новый класс (скажем, в случае нехватки памяти), функция возвращает 0, вследствие чего выполнение программы завершается.
|