Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[C++] Tekenen met de Win32 api

h4xX0r
5 antwoorden
  • Hier is mijn source:

    [code:1:a4aa85c8f4]
    #include <windows.h>
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASS WndClass;

    WndClass.style = 0;
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.lpfnWndProc = WndProc;
    WndClass.hInstance = hInstance;
    WndClass.hbrBackground = (HBRUSH) (COLOR_WINDOW);
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.lpszMenuName = 0;
    WndClass.lpszClassName = "WinProg";
    RegisterClass(&WndClass);
    HWND hWindow;
    hWindow = CreateWindow("winprog", "Window", WS_OVERLAPPEDWINDOW, 0, 0, 400, 400, NULL, NULL, hInstance, NULL);
    ShowWindow(hWindow, nCmdShow);
    UpdateWindow(hWindow);
    MSG Message;
    while(GetMessage(&Message, NULL, 0, 0)) {
    DispatchMessage(&Message);
    }
    return (Message.wParam);
    }
    LRESULT CALLBACK WndProc (HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam) {
    switch(uiMessage) {
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    case WM_PAINT:
    HDC hdc;
    HPEN hPen;
    HPEN hPenalt;
    HBRUSH hBrush;
    HBRUSH hBrushalt;
    hBrush = CreateSolidBrush(RGB(255, 100, 0));
    hPen = CreatePen(PS_SOLID, 2, RGB(0, 255, 255));
    PAINTSTRUCT ps;
    hdc = BeginPaint(hWnd, &ps);
    hBrushalt = SelectObject (hdc, hBrush); //hier geeft hij errors
    hPenalt = SelectObject (hdc, hPen); //hier geeft hij ook errors
    //Hier wil ik gaan tekenen…
    EndPaint(hWnd, &ps);
    return 0;
    default:
    return DefWindowProc (hWnd, uiMessage, wParam, lParam);
    }
    }
    [/code:1:a4aa85c8f4]

    De errors die hij geeft zijn bij beide regels hetzelfde:

    cannot convert 'HDC__*' to 'HDC__*' for argument 1 to 'void*

    Weet iemand raad?
  • Ik ken de syntax niet meer helemaal uit mijn hoofd, maar hij zegt dat hij een pointe-naar pointer niet kan converteren naar een pointer :)

    Je geeft het adres van je device context mee, als je device context al een pointer is krijg je het adres van een pointer = dus een pointer-naar-een-pointer.

    Waarschijnlijk moet je dus je adrestekens bij je device context weghalen. ;)
  • Dat werkt ook niet (de code en de foutmelding zijn aangepast in mijn 1e post)
  • SelectObject geeft een HGDIOBJ terug en dat is feitelijk een void*. In C++ mag je niet zomaar een void* niet-explicit-casten naar een andere type, in C mag dit overigens wel.

    oplossing met een c-style-cast:
    [code:1:858589d4a1]
    hBrushalt = (HBRUSH) SelectObject (hdc, hBrush);
    hPenalt = (HPEN) SelectObject (hdc, hPen);
    [/code:1:858589d4a1]

    oplossing met de C++ manier van casten:
    [code:1:858589d4a1]
    hBrushalt = static_cast<HBRUSH>(SelectObject (hdc, hBrush));
    hPenalt = static_cast<HPEN>(SelectObject (hdc, hPen));
    [/code:1:858589d4a1]

    Andreas

    "Are you challenging my constitutional right to make nude phone calls?" -Bill McNeal
  • LOL dat staat het in mn boek verkeerd :lol: . Bedankt.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.