| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C++Builder->WinAPI] Работа с окнами |
| Автор: radist 23.4.2008, 19:04 |
| Здравствуйте! Пишу программу где создаются дочерние и временные окна (этот кусок программы я написал), нужно: 1) после нажатия правой кнопки мыши - 3 раза "мигает" дочернее окно; 2) после нажатия левой клавиши мыши 4 раза "мигает" временное окно; 3) при этом окна выдают различные звуковые сигналы Вот мой кусок программы: #include <windows.h> #include <stdio.h> #pragma hdrstop //Задание //В левом верхнем (правом нижнем) углу рабочей области окна создать временное //(дочернее) окно. После нажатия левой клавиши мыши 4 раза "мигает" временное //окно, а после нажатия правой - 3 раза "мигает" дочернее окно. При этом окна //выдают различные звуковые сигналы. //--------------------------------------------------------------------------- #pragma argsused LRESULT CALLBACK HelloWorldWndProc (HWND,UINT,UINT,LONG); WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hWnd; // дискриптор окна 1 HWND hWnd1; // дискриптор временного окна HWND hWnd2; // дискриптор дочернего окна WNDCLASS WndClass; //структура содержащая набор ресурсов класса MSG Msg; //стуктура в которую помещается сообщения из очереди char szClassName[]="helloWord"; int x, y, x1,y1; //создаем и регестрируем класс //заполняем структуру типа 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.lpszClassName=NULL; WndClass.lpszClassName=szClassName; //регистрируем созданный класс if (!RegisterClass(&WndClass)) {MessageBox (NULL,"невозможно зарегестрировать класс","Ошибка!!!", MB_OK); return 0; } //создаем окно hWnd=CreateWindow (szClassName, "Домашняя работа №1",WS_OVERLAPPEDWINDOW, 0, 0, 600,600, NULL, NULL, hInstance,NULL); if (!hWnd) {MessageBox (NULL,"невозможно создать ГЛАВНОЕ окно","Ошибка!!!", MB_OK); return 0;} //вывод окна ShowWindow (hWnd, nCmdShow); UpdateWindow (hWnd); RECT Rect; GetWindowRect (hWnd, &Rect); x=Rect.left; y=Rect.top; //создаем временное окно hWnd1=CreateWindow (szClassName, "Окно №2",WS_OVERLAPPEDWINDOW, x,y,200,200, NULL,NULL, hInstance,NULL); if (!hWnd1) {MessageBox (NULL,"невозможно создать временное окно","Ошибка!!!", MB_OK); return 0;} //вывод временного окна ShowWindow (hWnd1, nCmdShow); UpdateWindow (hWnd1); //создаем дочернее окно GetWindowRect (hWnd, &Rect); char S[200]; x1=Rect.right; y1=Rect.bottom; sprintf(S,"x=%d y=%d",x1,y1); MessageBox (NULL,S,"коорд пр ниж угла", MB_OK) ; int w,h; w=200;h=200; x1=x1-w-5; y1=y1-h-34; hWnd2=CreateWindow (szClassName, "Окно №3",WS_CHILDWINDOW|WS_CAPTION, x1,y1, w,h, hWnd,NULL, hInstance,NULL); if (!hWnd2) {MessageBox (NULL,"невозможно создать дочернее окно","Ошибка!!!", MB_OK); return 0;} //вывод дочернего окна ShowWindow (hWnd2, nCmdShow); UpdateWindow (hWnd2); //запуск while (GetMessage (&Msg,NULL, 0,0)) {TranslateMessage (&Msg); DispatchMessage(&Msg);} return Msg.wParam;} //реализация оконной функции LRESULT CALLBACK HelloWorldWndProc (HWND hWnd, UINT Message, UINT wParam, LONG IParam) {HDC hDC; PAINTSTRUCT PaintStruct; RECT Rect; switch (Message) {case WM_PAINT: hDC=BeginPaint (hWnd, &PaintStruct); GetClientRect (hWnd,&Rect); DrawText (hDC, "Привет!!!",-1, &Rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint (hWnd,&PaintStruct); return 0; case WM_DESTROY: PostQuitMessage (0); return 0; } return DefWindowProc (hWnd, Message,wParam,IParam); } |