|
|
|
Статья
//Демонстрация работы Button,Edit,SendMessage //Писал и коментировал - p0et //mail - p0et@bk.ru #include <windows.h> //Windows API функции #include <string> //Класс для работы со строками //Подключение пространства имен функций <string> using namespace std;
HINSTANCE hInst; //Будем хранить хэндл нашего приложения! HWND MyhWnd; //Handle Window HWND MyBtn1,MyBtn2,MyEdit; //Handle Button1,Button2,Edit BOOL flag=false; //Флаг состояния кнопки
//Регистрируем класс окна! ATOM MyRegisterClass(HINSTANCE hInstance); //А сдесь само окно! BOOL InitInstance(HINSTANCE, int); //Вызывается при приходе сообщений нашему окну LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //Вызывается при создании окна void MyCreate(HWND hWnd);
int APIENTRY WinMain(HINSTANCE hInstance, //hInstanse нашего приложения в памяти HINSTANCE hPrevInstance, //hInstanse приложения стоящего выше нашего приложения //по дереву связей приложений LPSTR lpCmdLine, //Командная строка :) int nCmdShow) //Состояние нашего окна(Развернуто,Свернуто) { MSG msg; //Структура сообщений в Windows
MyRegisterClass(hInstance); //В ней мы зарегистрируем класс нашего окна
if (!InitInstance (hInstance, //Нашего приложения nCmdShow //Состояние нашего окна - в котором нам надо его создать! )) //Создаем окно приложения //если не создалось-выход из программы return FALSE;
//Стандартный цикл обработки сообщений Windows while (GetMessage(&msg, NULL, 0, 0)) //Получаем первое сообщение из стэка сообщений в msg { //Обратите внимание! Из общего стэка сообщений Windows получаем TranslateMessage(&msg); //Транслируем сообщение дальше DispatchMessage(&msg); //Сообщение для нашего окна //А это сообщение мы отправляем сами нашему окну - // Сообщение от таймера(Эмулируем таймер) SendMessage(MyhWnd,WM_TIMER,0,0); }
return msg.wParam; }
ATOM MyRegisterClass(HINSTANCE hInstance) { //Класс нашего окна WNDCLASSEX wcex; //Заполняем его информацией о нашем окне wcex.cbSize = sizeof(WNDCLASSEX); Размер класса окна
wcex.style = CS_HREDRAW | CS_VREDRAW; //Стиль окна wcex.lpfnWndProc = (WNDPROC)WndProc; //Адрес функции обработки сообщений нашего окна wcex.cbClsExtra = 0; //Дополнительный класс окна wcex.cbWndExtra = 0; //Адрес функции рисования нашего окна, // т.к. NULL, то стандартная перерисовка окна wcex.hInstance = hInstance; //нашей программы wcex.hIcon = LoadIcon(NULL, IDI_ASTERISK);// загрузка хендла иконки(стандартная или из ресурсов) wcex.hCursor = LoadCursor(NULL, IDC_ARROW);// загрузка хендла курсора(стандартная или из ресурсов) wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW); // Цвет заднего фона окна wcex.lpszMenuName = NULL; // Название меню нашего окна wcex.lpszClassName = "WINCLASS"; // Имя класса нашего окна wcex.hIconSm = LoadIcon(NULL, IDI_ASTERISK);//хендл маленькой иконки(свернутое окно)
return RegisterClassEx(&wcex); //Регистрируем класс нашего окна - API }
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; //окна
hInst = hInstance; //Создаем окно! - API hWnd = CreateWindow( "WINCLASS", //Класс окна "Kill", //Информация в верней строке окна - Title Window WS_OVERLAPPEDWINDOW, //Стиль окна 100, //Координата Х верхневого левого угла окна (Глобальные координаты) 100, //Координата Y верхневого левого угла окна (Глобальные координаты) 300, //Координата X правого нижнего угла от левого верхнего(локальные) 200, //Координата Y правого нижнего угла от левого верхнего(локальные) NULL, //hWnd Родительского окна NULL, //Handle Menu hInstance, // нашей программы - привязываем окно к программе NULL // );
if (!hWnd) //Если окно не создано { MessageBox(NULL,"CreateWindow()","Error!",NULL); //MessageBox с сообщением о невозможности создания окна return FALSE; }
MyhWnd = hWnd; //Сохраняем hWnd нашего окна ShowWindow(hWnd, nCmdShow); //Показать окно UpdateWindow(hWnd); //Послать сообщение функции WinMain() о перерисовке окна!
return TRUE; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
char buf1[10]="Animation"; //Сообщения на кнопку char buf2[17]="Нажми на кнопку!"; //и едит switch (message) { case WM_CREATE: // данное сообщение приходит при создании нашей формы MyCreate(hWnd); break; case WM_COMMAND: //Приходит при сообщении от дочерних окон //Кстате кнопки и т.д. - дочерние окна switch(LOWORD(wParam)) //проверяем, какое сообщение пришло { case BN_CLICKED: //проверяем, от какого окна пришло сообщение if(MyBtn1 == (HWND)lParam) PostQuitMessage(0); //Сообщение нашей программе - завершить работу if(MyBtn2 == (HWND)lParam) { if(!flag) { //Посылаем сообщение нашему едиту - установить строку! SendMessage(MyEdit,WM_SETTEXT,20,(long)buf1); //Посылаем сообщение нашей кнопке - установить строку! SendMessage(MyBtn2,WM_SETTEXT,20,(long)buf2); flag=true; } else { //Посылаем сообщение нашему едиту - установить строку! SendMessage(MyEdit,WM_SETTEXT,20,(long)buf2); //Посылаем сообщение нашей кнопке - установить строку! SendMessage(MyBtn2,WM_SETTEXT,20,(long)buf1); flag=false; } } break; } break; case WM_DESTROY: //сообщение от windows о том, // что надо завершить работу нашей программы PostQuitMessage(0); //Сообщение нашей программе - завершить работу break; default: //Если пришло сообщение, которое мы не обработали, то дать возможность // windows обработать это сообщение return DefWindowProc(hWnd, message, wParam, lParam); }
return 0; }
void MyCreate(HWND hWnd) { //Создание дочернего окна типа BUTTON на API MyBtn1 = CreateWindow( "BUTTON", //Класс "Exit", //текст на кнопке WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,//дочернее|видимое|тип кнопки 210,150,80,20, //размеры hWnd, //HWND нашей формы. На которой будет кнопка NULL, hInst, //hInstanse нашей программы NULL); //Создание дочернего окна типа BUTTON на API MyBtn2 = CreateWindow( "BUTTON",//Класс "Animation",//текст на кнопке WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,//дочернее|видимое|тип кнопки 10,150,140,20,//размеры hWnd,//HWND нашей формы. На которой будет кнопка NULL, hInst, NULL); //Создание дочернего окна типа EDIT на API MyEdit = CreateWindow( "EDIT",//Класс "Нажми на кнопку!",//текст в EDIT WS_CHILD|WS_VISIBLE|WS_BORDER,//дочернее|видимое|в рамке 10,120,180,20,//размеры hWnd,//HWND нашей формы. На которой будет кнопка NULL, hInst, NULL); }
|
|
|