Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [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);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)