Рисование мышью
В чём моя ошибка?
#include <Windows.h>
#include <malloc.h>
#include <stdio.h>
unsigned int VertexAmount=0;
struct Vertex
{
short X;
short Y;
};
Vertex *Vertexes;
void OnDraw(HWND hWnd)
{
PAINTSTRUCT ps;
char lpString[10];
HDC hDC=BeginPaint(hWnd, &ps);
SetBkColor(hDC, RGB(255, 0, 0));
SetTextColor(hDC, RGB(255, 255, 255));
for(unsigned int i=0; i<VertexAmount; i++)
{
sprintf(lpString, "%d", i);
TextOut(hDC, Vertexes.X, Vertexes.Y, lpString, strlen(lpString));
}
EndPaint(hWnd, &ps);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch (Message)
{
case WM_LBUTTONDOWN:
Vertexes=(Vertex*) realloc(Vertexes, (VertexAmount+1)*sizeof(Vertex));
Vertexes[VertexAmount].X=lParam;
Vertexes[VertexAmount].Y=lParam>>16;
VertexAmount++;
break;
case WM_RBUTTONDOWN:
Vertexes=(Vertex*) realloc(Vertexes, 0);
VertexAmount=0;
break;
case WM_PAINT:
OnDraw(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, Message, wParam, lParam);
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
char szWindowClass[]="Vertexes";
WNDCLASSEX wcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC) WndProc;
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor=LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName=NULL;
wcex.lpszClassName=szWindowClass;
wcex.hIconSm=NULL;
RegisterClassEx(&wcex);
HWND hWnd=CreateWindow(szWindowClass, szWindowClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
Vertexes=(Vertex*) malloc(VertexAmount*sizeof(Vertex));
MSG Msg;
while (GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
free(Vertexes);
return (int) Msg.wParam;
}
Добавь в обработчик сообщения WM_RBUTTONDOWN вызов UpdateWindow(hWnd);
Цитата:
Originally posted by (C)dragon
Вообще-то блоки case надо объединять в {}
Вообще-то блоки case надо объединять в {}
Вообще-то там break не просто так стоит!!!
Цитата:
Добавь в обработчик сообщения WM_RBUTTONDOWN вызов UpdateWindow(hWnd);
Я же сказал, что пробовал и так и сяк - не пашет зараза и всё тут!!!
Попробуй сам откомпилить и проверь!!!
InvalidateRect(hWnd, NULL, true);
тогда всё работает.