Ga naar inhoud

[C++] Tekenen met de Win32 api


anoniem

Aanbevolen berichten

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?
Link naar reactie
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. ;)
Link naar reactie
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
Link naar reactie
[quote:6f0279d55c="microchip"] [code:1:6f0279d55c] hWindow = CreateWindow("winprog", "Window", WS_OVERLAPPEDWINDOW, 0, 0, 400, 400, NULL, NULL, hInstance, NULL); [/code:1:6f0279d55c][/quote:6f0279d55c] Het lijkt mij wel verstandig om het resultaat van een functie aanroep te controleren. [quote:6f0279d55c="microchip"][code:1:6f0279d55c] MSG Message; while(GetMessage(&Message, NULL, 0, 0)) { DispatchMessage(&Message); } return (Message.wParam); } [/code:1:6f0279d55c][/quote:6f0279d55c] Uit de Win32 documentatie: "Note that the function return value can be TRUE, FALSE, or -1. Thus, you should avoid code like this: while (GetMessage( lpMsg, hWnd, 0, 0)) ... The possibility of a -1 return value means that such code can lead to fatal application errors."
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...