Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2017, 16:43   #1
Maray
Форумчанин
 
Регистрация: 03.01.2015
Сообщений: 160
Восклицание Ошибки в коде

Добрый день!

Помогите, пожалуйста. Запускаю проект и выдает непонятные ошибки. Подскажите, что не так?

Код:
#include <Windows.h>
#include<windowsx.h>
#include<CommCtrl.h>
#include<tchar.h>
#include<Psapi.h>
#include<strsafe.h>
#include<sstream>
#include<gdiplus.h>
#include<gdiplusflat.h>
#include<memory>
#include"Math.h"
 
 
using namespace Gdiplus;
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct);
void OnDestroy(HWND hwnd);
void Draw();
void Think(HWND hwnd);
 
HWND mainWnd;
Bitmap* Bm;
 
int totalFrames;
int currentFrame;
Image* gif;
HDC ToDraw = NULL;
 
struct State
{
 
    PointF Position;
    float Angle;
    float deltaFrame;
};
 
State AnimStates[5];
int setState = 1;
int currFrame = 0;
int lastStateFrame = 0;
PointF Cntr(500, 300);
PointF Pivot(500, 300 + 250);
int wndX = 0;
int wndY = 0;
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    GdiplusStartupInput GDIPSI{ 0 };
    GDIPSI.GdiplusVersion = 1;
    GDIPSI.SuppressBackgroundThread = FALSE;
    GDIPSI.DebugEventCallback = NULL;
    GDIPSI.SuppressExternalCodecs = FALSE;
    ULONG_PTR TokenGDI;
    GdiplusStartup(&TokenGDI, &GDIPSI, NULL);
 
    
    State NwState1;
    NwState1.Position = PointF(500, 300);
    NwState1.Angle = 0;
    NwState1.deltaFrame = 0;
    AnimStates[0] = NwState1;
    State NwState2;
    NwState2.Position = PointF(500, 250);
    NwState2.Angle = 25;
    NwState2.deltaFrame = 25;
    AnimStates[1] = NwState2;
    State NwState3;
    NwState3.Position = PointF(500, 250);
    NwState3.Angle = 0;
    NwState3.deltaFrame = 25;
    AnimStates[2] = NwState3;
    State NwState4;
    NwState4.Position = PointF(500, 300);
    NwState4.Angle = -25;
    NwState4.deltaFrame = 25;
    AnimStates[3] = NwState4;
    State NwState5;
    NwState5.Position = PointF(500, 300);
    NwState5.Angle = 0;
    NwState5.deltaFrame = 25;
    AnimStates[4] = NwState5;
    
 
    WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };
    wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
    wcex.lpfnWndProc = WndProc;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = TEXT("NewWndClass");
    wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 
    if (RegisterClassEx(&wcex) == 0)
        return -1;
    LoadLibrary(TEXT("ComCtl32.dll"));
    LoadLibrary(TEXT("Msftedit.dll"));
 
    mainWnd = CreateWindowEx(0, TEXT("NewWndClass"), TEXT("Lab2"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 
    if (mainWnd == NULL)
        return -1;
    
    ShowWindow(mainWnd, nCmdShow);
 
    SetTimer(mainWnd, 1, 50, NULL);
 
    Bm = new Bitmap(L"C:\\Program Files (x86)\\1131.jpg");
 
    MSG msg;
    BOOL bRet;
    
    Cntr = PointF(500, 300);
    for (;;) {
        while (!PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
            Think(mainWnd);
        }
 
        bRet = GetMessage(&msg, NULL, 0, 0);
 
        if (bRet == -1) {
            
        }
        else if (bRet == FALSE) {
            break;
        }
        else if (true) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        
    }
    delete Bm;
    GdiplusShutdown(TokenGDI);
    return (int)msg.wParam;
 
}
 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
 
    switch (uMsg) {
        HANDLE_MSG(hWnd, WM_CREATE, OnCreate);
        HANDLE_MSG(hWnd, WM_DESTROY, OnDestroy);
        
    case WM_TIMER:{
                      if (totalFrames != 0){
                          currFrame++;
                          ToDraw = GetDC(mainWnd);
                          gif->SelectActiveFrame(&FrameDimensionTime, currentFrame++);
                          if (currentFrame >= totalFrames){
                              currentFrame = 0;
                          }
                          Draw();
                          ReleaseDC(mainWnd, ToDraw);
                      }
 
    }
    case WM_SIZE: {
                      RECT wndSz;
                      if (mainWnd != NULL) {
                          GetClientRect(mainWnd, &wndSz);
 
                          wndX = wndSz.right - wndSz.left;
                          wndY = wndSz.bottom - wndSz.top;
                      }
    }
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
 
}
 
 
int frame = 250;
 
float CurrAngle = 0;
 
 
PointF PointsChasis[13] = {
    PointF(260, 250) + Cntr,
    PointF(260, 210) + Cntr,
    PointF(250, 200) + Cntr,
    PointF(180, 200) + Cntr,
    PointF(160, 180) + Cntr,
    PointF(140, 170) + Cntr,
    PointF(100, 160) + Cntr,
    PointF(50, 160) + Cntr,
    PointF(-50, 200) + Cntr,
    PointF(-120, 200) + Cntr,
    PointF(-125, 205) + Cntr,
    PointF(-130, 210) + Cntr,
    PointF(-130, 250) + Cntr
};
 
 
PointF PointsWindow_Back[6] = {
    PointF(78, 198) + Cntr,
    PointF(176, 198) + Cntr,
    PointF(160, 182) + Cntr,
    PointF(140, 172) + Cntr,
    PointF(100, 162) + Cntr,
    PointF(78, 162) + Cntr
};
PointF PointsWindow_Front[4] = {
    PointF(72, 162) + Cntr,
    PointF(50, 162) + Cntr,
    PointF(-42, 198) + Cntr,
    PointF(72, 198) + Cntr
};
 
PointF PointsWindow_Front_0[4] = {
    PointF(72, 162) + Cntr,
    PointF(50, 162) + Cntr,
    PointF(-42, 198) + Cntr,
    PointF(72, 198) + Cntr
};
PointF PointsWindow_Front_1[4] = {
    PointF(72, 190) + Cntr,
    PointF(50, 190) + Cntr,
    PointF(-42, 198) + Cntr,
    PointF(72, 198) + Cntr
};
//End
PointF PointsWindow_Front_bck[4] = {
    PointF(72, 162) + Cntr,
    PointF(50, 162) + Cntr,
    PointF(-42, 198) + Cntr,
    PointF(72, 198) + Cntr
};
 
PointF PointsDoor_Back[7] = {
    PointF(77, 250) + Cntr,
    PointF(150, 250) + Cntr,
    PointF(150, 177) + Cntr,
    PointF(140, 172) + Cntr,
    PointF(100, 162) + Cntr,
    PointF(77, 162) + Cntr
};
 
PointF PointsDoor_Front[5] = {
    PointF(72, 162) + Cntr,
    PointF(50, 162) + Cntr,
    PointF(-42, 198) + Cntr,
    PointF(-42, 250) + Cntr,
    PointF(72, 250) + Cntr
};
 
PointF PointsLight_Front[4] = {
    PointF(-130, 210) + Cntr,
    PointF(-130, 222) + Cntr,
    PointF(-105, 222) + Cntr,
    PointF(-105, 210) + Cntr
};
 
PointF PointsLight_Back[4] = {
    PointF(260, 210) + Cntr,
    PointF(260, 222) + Cntr,
    PointF(235, 222) + Cntr,
    PointF(235, 210) + Cntr
};
 
PointF other[4]{
    Cntr,
        PointF(-90 + 25, 220 + 25) + Cntr,
        PointF(170 + 25, 220 + 25) + Cntr,
        Pivot
};
 
 
PointF Tween(const PointF &A, const PointF &B, float t) {
    return PointF(A.X*(1.f - t) + B.X*t, A.Y*(1.f - t) + B.Y*t);
}
Продолжение кода ниже
Изображения
Тип файла: jpg 133.jpg (117.6 Кб, 147 просмотров)
Maray вне форума Ответить с цитированием
Старый 18.05.2017, 16:43   #2
Maray
Форумчанин
 
Регистрация: 03.01.2015
Сообщений: 160
По умолчанию

Код:
void Draw() {
 
    Gdiplus::Graphics g(ToDraw);
    Rect sz;
    g.GetVisibleClipBounds(&sz);
 
    Bitmap TempImg(sz.Width, sz.Height, &g);
    Gdiplus::Graphics buff(&TempImg);
    buff.Clear(Color::White);
 
    buff.DrawImage(gif, 0, 0);
 
    float bmH = Bm->GetHeight();
    float bmW = Bm->GetWidth();
 
    float ratio = bmW / bmH;
 
 
    Gdiplus::LinearGradientBrush hBrsh_chasis(PointF(250, 0), PointF(500, 0), Color::MakeARGB(255, 220, 220, 0), Color::MakeARGB(255, 220, 220, 150));
    Gdiplus::LinearGradientBrush hBrsh_Lights_front(PointF(0, 0), PointF(30, 0), Color::MakeARGB(255, 255, 255, 0), Color::MakeARGB(255, 255, 255, 255));
    Gdiplus::LinearGradientBrush hBrsh_Lights_back(PointF(0, 0), PointF(30, 0), Color::MakeARGB(255, 255, 0, 0), Color::MakeARGB(255, 255, 255, 255));
    Gdiplus::LinearGradientBrush hBrsh_Window_front(PointF(0, 0), PointF(250, 0), Color::MakeARGB(255, 100, 100, 250), Color::MakeARGB(255, 200, 200, 255));
    hBrsh_chasis.SetWrapMode(WrapMode::WrapModeTileFlipX);
    hBrsh_Window_front.SetWrapMode(WrapMode::WrapModeTileFlipX);
    SolidBrush hBrsh_Window_front_bck(Color::White);
    Gdiplus::Pen Pn(Color::Black, 4.0);
    Gdiplus::Pen Pn_thin(Color::Black, 3.2);
 
    Pn.SetLineJoin(LineJoin::LineJoinRound);
 
    Gdiplus::Matrix Mat;
 
    float deltaAng;
    PointF deltaPos;
    State St;
    if (setState >= 3 && currFrame <= 75) {
        for (int i = 0; i < 4; i++) {
            PointsWindow_Front[i] = Tween(PointsWindow_Front_0[i], PointsWindow_Front_1[i], ((float)currFrame - 50) / 25);
        }
    }
    if (setState <= 4) {
 
        State St = AnimStates[setState];
 
 
        int relFrame = currFrame - lastStateFrame;
 
        deltaPos = (St.Position - Pivot);
        deltaPos.X /= St.deltaFrame;
        deltaPos.Y /= St.deltaFrame;
        deltaAng = (St.Angle - CurrAngle) / St.deltaFrame;
        CurrAngle += deltaAng;
        if (!IsZero(deltaAng, 1e-5f)) {
            Mat.RotateAt(deltaAng, Pivot);
        }
        if (!IsZero(deltaPos.X, 1e-2f) || !IsZero(deltaPos.Y, 1e-2f)) {
            Mat.Translate(deltaPos.X, deltaPos.Y);
        }
        Mat.TransformPoints(PointsChasis, 13);
        Mat.TransformPoints(PointsLight_Front, 4);
        Mat.TransformPoints(PointsLight_Back, 4);
        Mat.TransformPoints(PointsWindow_Front, 4);
        Mat.TransformPoints(PointsWindow_Front_0, 4);
        Mat.TransformPoints(PointsWindow_Front_1, 4);
        Mat.TransformPoints(PointsWindow_Front_bck, 4);
        Mat.TransformPoints(PointsWindow_Back, 6);
        Mat.TransformPoints(PointsDoor_Front, 5);
        Mat.TransformPoints(PointsDoor_Back, 6);
        Mat.TransformPoints(other, 4);
        Cntr = other[0];
        Pivot = other[3];
 
        if (relFrame == St.deltaFrame) {
            lastStateFrame = currFrame;
            setState++;
        }
    }
    int pointCnt = 13;
 
    buff.DrawPolygon(&Pn, PointsChasis, 13);
    buff.FillPolygon(&hBrsh_chasis, PointsChasis, 13);
 
    buff.ResetClip();
    buff.DrawPolygon(&Pn, PointsLight_Front, 4);
    buff.FillPolygon(&hBrsh_Lights_front, PointsLight_Front, 4);
 
    buff.DrawPolygon(&Pn, PointsLight_Back, 4);
    buff.FillPolygon(&hBrsh_Lights_back, PointsLight_Back, 4);
 
    buff.DrawPolygon(&Pn, PointsWindow_Front_bck, 4);
    buff.FillPolygon(&hBrsh_Window_front_bck, PointsWindow_Front_bck, 4);
 
    buff.DrawPolygon(&Pn, PointsWindow_Front, 4);
    buff.FillPolygon(&hBrsh_Window_front, PointsWindow_Front, 4);
 
 
 
    buff.DrawPolygon(&Pn, PointsWindow_Back, 6);
    buff.FillPolygon(&hBrsh_Window_front, PointsWindow_Back, 6);
 
    buff.DrawPolygon(&Pn_thin, PointsDoor_Front, 5);
    buff.DrawPolygon(&Pn_thin, PointsDoor_Back, 6);
 
    Rect WheelFront(other[1].X - 25, other[1].Y - 25, 50, 50);
    Rect WheelBack(other[2].X - 25, other[2].Y - 25, 50, 50);
    Gdiplus::Pen CompPen(Color::Black, 10);
 
    float compArr[6] = {
        0, 0.3,
        0.4, 0.8,
        0.9, 1
    };
 
    CompPen.SetCompoundArray(compArr, 6);
    CompPen.SetAlignment(PenAlignment::PenAlignmentInset);
 
    SolidBrush WheelBrush(Color::Gray);
 
    buff.FillEllipse(&WheelBrush, WheelFront);
    buff.DrawEllipse(&CompPen, WheelFront);
 
    buff.FillEllipse(&WheelBrush, WheelBack);
    buff.DrawEllipse(&CompPen, WheelBack);
 
    StringFormat stFr;
    stFr.SetAlignment(StringAlignmentCenter);
 
    g.DrawImage(&TempImg, sz);
    DeleteObject(&TempImg);
}
 
void Think(HWND hwnd) {
 
}
 
 
 
BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) {
 
 
 
    gif = Image::FromFile(L"C:\\Program Files (x86)\\111.gif");
 
    totalFrames = gif->GetFrameCount(&FrameDimensionTime);
 
    return true;
}
void OnDestroy(HWND hwnd) {
    PostQuitMessage(0);
    if (gif != NULL){
        delete gif;
    }
}
Maray вне форума Ответить с цитированием
Старый 18.05.2017, 16:46   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Либу Gdiplus.lib линкеру не подключили
p51x вне форума Ответить с цитированием
Старый 19.05.2017, 15:39   #4
__Игорь__
Пользователь
 
Регистрация: 25.04.2017
Сообщений: 26
По умолчанию

...............................
#include <GdiPlus.h>
using namespace Gdiplus;

#pragma comment(lib,"GdiPlus.lib")
__Игорь__ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Исправить ошибки в коде artilun Общие вопросы C/C++ 3 03.11.2016 10:39
ошибки в коде zaq2000 Помощь студентам 5 08.06.2015 22:44
Ошибки в коде.. arh42kem Windows Forms 10 10.04.2013 18:42
Ошибки в коде C++ BloodWolf Помощь студентам 3 28.11.2012 15:39
C++ ошибки в коде Straiker900 Помощь студентам 0 18.01.2012 19:48