Djony1987
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Abs62 Спасибо! Начал токо недавно осваивать API (в ВУзе всмысле). Поэтому прошу сильно не пинать. Задание было следующие: Углы рабочей области окна приложения полностью занимают 4 временных окна одного класса. Если нажать левую клавишу мыши над временным окном, то это окно выдает сообщение о своем заголовке. Листинг моей проги: Код: //--------------------------------------------------------------------------- #include <windows.h> #include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- LRESULT CALLBACK HelloWorldWndProc(HWND, UINT, UINT, LONG); HWND hChildWind_1, hChildWind_2, hChildWind_3, hChildWind_4; char szClassName[]="Hello World!"; char nameWnd[4][18]={"Временное окно №1","Временное окно №2","Временное окно №3","Временное окно №4"}; MSG Msg; RECT R; int x1,x2,y1,y2; TPoint p; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; WNDCLASS WndClass; WndClass.style=CS_HREDRAW | CS_VREDRAW; WndClass.lpfnWndProc=HelloWorldWndProc; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hInstance=hInstance; WndClass.hIcon=LoadIcon(NULL, IDI_APPLICATION); WndClass.hCursor=LoadCursor(NULL, IDC_ARROW); WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.lpszMenuName=NULL; WndClass.lpszClassName=szClassName; if(!RegisterClass(&WndClass)) { MessageBox(NULL, "Невозможно зарегистрировать класс", "Ошибка!!", MB_OK); return 0; } hWnd=CreateWindow(szClassName, "Прога №1", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if(!hWnd) { MessageBox(NULL, "Невозможно создать окно", "Ошибка!!", MB_OK); return 0; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); int w=GetSystemMetrics(SM_CYCAPTION); GetWindowRect(hWnd,&R); x1=R.left; y1=R.top+w; x2=R.right; y2=R.bottom; hChildWind_1=CreateWindow(szClassName, nameWnd[0], WS_OVERLAPPEDWINDOW | WS_POPUP, x1, y1, (x2-x1)/2, (y2-y1)/2, hWnd, NULL, hInstance, NULL); if(!hChildWind_1) { MessageBox(NULL, "Невозможно создать окно", "Ошибка!!", MB_OK); return 0; } ShowWindow(hChildWind_1, SW_SHOW); UpdateWindow(hChildWind_1); hChildWind_2=CreateWindow(szClassName, nameWnd[1], WS_OVERLAPPEDWINDOW | WS_POPUP, x1+(x2-x1)/2, y1+(y2-y1)/2, (x2-x1)/2, (y2-y1)/2, hWnd, NULL, hInstance, NULL); if(!hChildWind_2) { MessageBox(NULL, "Невозможно создать окно", "Ошибка!!", MB_OK); return 0; } ShowWindow(hChildWind_2, SW_SHOW); UpdateWindow(hChildWind_2); hChildWind_3=CreateWindow(szClassName, nameWnd[2], WS_OVERLAPPEDWINDOW | WS_POPUP, x1, y1+(y2-y1)/2, (x2-x1)/2, (y2-y1)/2, hWnd, NULL, hInstance, NULL); if(!hChildWind_3) { MessageBox(NULL, "Невозможно создать окно", "Ошибка!!", MB_OK); return 0; } ShowWindow(hChildWind_3, SW_SHOW); UpdateWindow(hChildWind_3); hChildWind_4=CreateWindow(szClassName, nameWnd[3], WS_OVERLAPPEDWINDOW | WS_POPUP, x1+(x2-x1)/2, y1, (x2-x1)/2, (y2-y1)/2, hWnd, NULL, hInstance, NULL); if(!hChildWind_4) { MessageBox(NULL, "Невозможно создать окно", "Ошибка!!", MB_OK); return 0; } ShowWindow(hChildWind_4, SW_SHOW); UpdateWindow(hChildWind_4); while(GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; } LRESULT CALLBACK HelloWorldWndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam) { HDC hDC; PAINTSTRUCT PaintStuct; RECT Rect; switch(Message) { case WM_LBUTTONDOWN: { GetCursorPos(&p); int xm=p.x; int ym=p.y; //AnsiString a,b; GetWindowRect(hChildWind_1, &Rect); //a=IntToStr(xm)+" "+IntToStr(ym); //ShowMessage(a); //b=IntToStr(Rect.left)+" "+IntToStr(Rect.right)+" "+IntToStr(Rect.top)+ " "+IntToStr(Rect.bottom); //ShowMessage(b); if((xm>Rect.left) && (xm<Rect.right) && (ym>Rect.top) && (ym<Rect.bottom)) MessageBox(NULL, nameWnd[0], "Прога №1", MB_OK); GetWindowRect(hChildWind_2, &Rect); if((xm>Rect.left)&&(xm<Rect.right)&&(ym>Rect.top)&&(ym<Rect.bottom)) MessageBox(NULL, nameWnd[1], "Прога №1", MB_OK); GetWindowRect(hChildWind_3, &Rect); if((xm>Rect.left)&&(xm<Rect.right)&&(ym>Rect.top)&&(ym<Rect.bottom)) MessageBox(NULL, nameWnd[2], "Прога №1", MB_OK); GetWindowRect(hChildWind_4, &Rect); if((xm>Rect.left)&&(xm<Rect.right)&&(ym>Rect.top)&&(ym<Rect.bottom)) MessageBox(NULL, nameWnd[3], "Прога №1", MB_OK); return 0; } case WM_DESTROY: if (hWnd != hChildWind_1 && hWnd !=hChildWind_2 && hWnd !=hChildWind_3 && hWnd !=hChildWind_4) PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd, Message, wParam, lParam); } return 0; } //--------------------------------------------------------------------------- | Почему то кажется что я не совсем правильно сделал то, что требуется в задании. Если подскажите буду очень благодарен!! |