rineo25jdia
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Привет нужна помощь, нужно сделать мишень(ну bitmap), и когда мышкой жмешь необходимо чтоб появлялась дырка(второй bitmap, причем этот bitmap должен перерисоваться,тоесть если сделать ещё выстрел предыдущий должен убраться), программирую на Win32 API Вот код, грузятся две картинки на левый и правый лик(одна исчезает, что не должно быть) Код: /*Операторы препроцессора*/ #include <windows.h> //Два файла с определениями, макросами #include <windowsx.h> //и прототипами функций Windows #include <stdio.h> HDC hdc,memdc; HBITMAP hBmp,hBmp1; HINSTANCE hInst; //Глобальная переменная - дескриптор приложения /*Прототип используемой в программе оконной функции */ LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM); /*Главная функция приложения WinMain*/ int X=1, Y=20, status1=0,status2=0, maxX=0,maxY=0; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode) { char szWinName[ ]="MyWindow"; //Произвольное имя класса/главного окна char szTitle[ ]="Программа 123"; //Произвольный заголовок окна MSG msg; //Структура msg типа MSG для получения сообщений Windows WNDCLASS wc; //Структура wc типа WNDCLASS для задания характеристик окна hInst=hInstance; /*Заполнение структуры wc типа WNDCLASS для описания класса главного окна*/ ZeroMemory(&wc,sizeof(wc)); //Обнуление всех членов /структуры wc wc.hInstance= hInstance; // Дескриптор приложения wc.lpszClassName=szWinName; // Имя класса окна wc.lpfnWndProc=WindowFunc; // Определяем оконную функцию wc.style=0; // Стиль по умолчанию wc.hIcon=LoadIcon(NULL,IDI_ASTERISK);//Стандартная пиктограмма wc.hCursor=LoadCursor(NULL,IDC_ARROW); //Стандартный /курсор мыши wc.hbrBackground=GetStockBrush(WHITE_BRUSH); // Белый фон окна wc.lpszMenuName="NULL"; // Без меню wc.cbClsExtra=0; // Без дополнительной информации wc.cbWndExtra=0; // Без дополнительной информации /*Регистрирация класс главного окна*/ if(!RegisterClass(&wc)) //Если класс окна не регистрируется, заканчиваем выполнение программы { MessageBox(NULL,"Окно нерегестрируется","Ошибка",MB_OK); return 1;} // возвращаем код ошибки /*Создание главного окна и отображение его на мониторе*/ HWND hwnd=CreateWindow(//Вызов функции API для создания окна szWinName, // имя класса главного окна szTitle, // заголовок окна WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,// Стиль окна 150, // x-координата левого угла окна 300, // y-координата левого угла окна 700, // Ширина окна 500, // Высота окна HWND_DESKTOP, // Без родительского окна NULL, // Без меню hInstance, // Дескриптор приложения NULL); // Без дополнительных аргументов ShowWindow (hwnd, SW_SHOWNORMAL); // Вызов функции API для отображения окна /*Организация цикла обнаружения сообщений*/ hBmp=LoadBitmap(hInstance,"MYBTP"); hBmp1=LoadBitmap(hInstance,"MYBTP1"); while(GetMessage(&msg,NULL,0,0)) // Если есть сообщение, передать его нашему приложению { if(!TranslateAccelerator(hwnd,hAccel,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); // вызвать оконную функцию WindowFunc } } return 0; //После выхода из цикла вернуться в Windows } //Окончание функции WinMain /*Оконная функция WindowFunc главного окна, вызываемая Windows */ LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT paintstruct; switch(message) {// выбор по значению сообщения (message) case WM_CREATE: maxX=GetSystemMetrics(SM_CXSCREEN); maxY=GetSystemMetrics(SM_CYSCREEN); hdc=GetDC(hwnd); memdc=CreateCompatibleDC(hdc); hBmp=CreateCompatibleBitmap(hdc,X,Y); hBmp1=CreateCompatibleBitmap(hdc,X,Y); SelectObject(memdc,hBmp); PatBlt(memdc,0,0,X,Y,SRCCOPY); ReleaseDC(hwnd,hdc); break; case WM_RBUTTONDOWN: X=LOWORD(lParam); Y=HIWORD(lParam); SelectObject(memdc, hBmp1); InvalidateRect(hwnd,NULL,1); break; case WM_LBUTTONDOWN: X=LOWORD(lParam); Y=HIWORD(lParam); SelectObject(memdc, hBmp); InvalidateRect(hwnd,NULL,1); break; case WM_PAINT: hdc=BeginPaint(hwnd,&paintstruct); BitBlt(hdc,X,Y,380,286,memdc,0,0,SRCCOPY); EndPaint(hwnd,&paintstruct); break; case WM_DESTROY: //При завершении приложения вызвать функцию API завершения приложения PostQuitMessage (0); break; default: // Все сообщения, не обрабатываемые функцией, направляются на обработку по умолчанию return DefWindowProc(hwnd,message,wParam,lParam); }// Окончание оператора switch return 0; }// Окончание функции WindowFunc | в menu.rc Код: #include <windows.h> MYBTP BITMAP bmp.bmp MYBTP1 BITMAP bmp1.bmp |
|