, поэтому я только начал программировать Windows на C ++.Сначала я нарисовал несколько линий, и это было нормально, затем я попытался создать класс для рисования некоторых фигур, и он работает нормально, когда я использую обычный метод для создания объекта (в коде эти части закомментированы), но когдаЯ использую указатель для создания нового объекта, я получаю ошибку Access violation
.
Вот мой класс (я удалил часть кода, поэтому он может показаться слишком упрощенным в некоторых частях):
class shapes {
public:
shapes(void);
void setstartp( POINT& p0);
void setendp( POINT& p1);
void draw(HDC hdc);
~shapes(void);
POINT x0;
POINT x1;
};
shapes::shapes(){}
void shapes::setstartp( POINT& p0){
x0=p0;
}
void shapes::setendp( POINT& p1){
x1=p1;
}
void shapes::draw(HDC hdc){
MoveToEx(hdc,x0.x ,x0.y ,0);
LineTo(hdc ,x1.x ,x1.y);
}
shapes::~shapes(void) {}
И это моя программа,или хотя бы часть winproc
:
//shapes sh;
shapes* sh =0;
bool mousdown =false;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
POINT p0;
POINT p1;
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_LBUTTONDOWN :
SetCapture(hWnd);
mousdown = true;
p0.x = LOWORD(lParam);
p0.y = HIWORD(lParam);
// sh.setstartp(p0);
sh = new shapes();
sh->setstartp(p0);
break;
case WM_MOUSEMOVE :
if(mousdown) {
p1.x = LOWORD(lParam);
p1.y = HIWORD(lParam);
// sh.setendp(p1);
sh->setendp(p1);
InvalidateRect(hWnd ,0,true);
}
break;
case WM_LBUTTONUP :
ReleaseCapture();
mousdown = false;
p1.x = LOWORD(lParam);
p1.y = HIWORD(lParam);
// sh.setendp(p1);
sh->setendp(p1);
InvalidateRect(hWnd ,0,true);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
//sh.draw(hdc);
sh->draw(hdc);
EndPaint(hWnd, &ps);
break;
case WM_COMMAND:
Вот моя Access violation
ошибка:
Необработанное исключение в 0x00411fda в NEWWIN.exe: 0xC0000005: Доступнарушение чтения местоположения 0x00000004.
И ошибки указывают на реализацию класса:
void shapes::draw(HDC hdc) {
MoveToEx(hdc,x0.x ,x0.y ,0);
LineTo(hdc ,x1.x ,x1.y);
}
Видимо, есть проблема с моими свойствами класса x0
и x1
:
это 0x00000000 {x0 = {...} x1 = {...}} формы * const
x0 {x = ???y = ???} tagPOINT
x CXX0030: Ошибка: выражение не может быть оценено
y CXX0030: Ошибка: выражение не может быть оценено
x1 {x = ???y = ???} tagPOINT
x CXX0030: Ошибка: выражение не может быть оценено
y CXX0030: Ошибка: выражение не может быть оценено