Vraag & Antwoord

Programmeren

[C++] Tekenen met de Win32 api

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

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

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