@Gokilla

Какое событие постоянно вызывается для окна?

Нужно чтобы код вызывался постоянно
SelectObject(hDC, hPen1); //но в одним момент времени может быть только 1
Rectangle(hDC, 10, 10, 100, 100); //рисуем фигуру соответствующим пером

Вот собственно обработчик я закинул в маузмув но отображается не постоянно
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        int wmId, wmEvent;
        PAINTSTRUCT ps;
        HDC hDC;
		hDC=GetDC(hWnd);
        RECT rect;
        static int i;
		HPEN hPen1; //объявляем сразу перо
        hPen1 = CreatePen(PS_DASH, 1, RGB(0,255, 0)); //создаём
		SelectObject(hDC, hPen1); //но в одним момент времени может быть только 1
		POINT pt;
        switch (message) 
        {
		case WM_PAINT:
			GetCursorPos (&pt);
			ScreenToClient (hWnd, &pt);
			Rectangle(hDC, pt.x, 400, pt.x+100, 450); //рисуем фигуру соответствующим пером
			Rectangle(hDC, 0, 0, 100, 50);
			Rectangle(hDC, 120, 0, 220, 50);
			Rectangle(hDC, 240, 0, 340, 50);
			Rectangle(hDC, 360, 0, 460, 50);
			Rectangle(hDC, 480, 0, 580, 50);
			Rectangle(hDC, 600, 0, 700, 50);
			Rectangle(hDC, 720, 0, 820, 50);
			Rectangle(hDC, 840, 0, 940, 50);
			break;
        case WM_COMMAND:
                wmId    = LOWORD(wParam); 
                wmEvent = HIWORD(wParam); 
                // Parse the menu selections:
                switch (wmId)
                {
                case IDM_ABOUT:
                        DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
                        break;
                case IDM_EXIT:
                        DestroyWindow(hWnd);
                        break;
                default:
                        return DefWindowProc(hWnd, message, wParam, lParam);
                }
                break;
		case WM_KEYDOWN:
			win32_key_down(wParam);
			break;
        case WM_KEYUP:
			win32_key_up(wParam);
		  	SelectObject(hDC, hPen1); //но в одним момент времени может быть только 1
			Rectangle(hDC, 10, 10, 100, 100); //рисуем фигуру соответствующим пером
            break;
        case WM_TIMER:
                //hDC = GetDC(hWnd);
                //GetClientRect(hWnd,&rect);
                //win32_DrawScreen(hDC,&rect);
                //ReleaseDC(hWnd,hDC);
                //Sleep(10);
                break;
        case WM_CREATE:
                AllocConsole();
                //SetTimer(hWnd,12345,20,NULL);
                break;
        case WM_DESTROY:
                main_End();
                KillTimer(hWnd,12345);
                FreeConsole();
                PostQuitMessage(0);
                exit(0);
                break;
        default:
                return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
}

Из-за этой функции не рисуется если её убрать то рисует моргая
hDC = BeginPaint(hWnd, &ps);
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos
Закиньте в событие отрисовки окна +в конце события помечайте окно как требующее перерисовки (SetDirty вроде)
Ответ написан
@res2001
Developer, ex-admin
Постоянно только таймер.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы