Vierecke, Kreise ...
-
Hi @ All.
ich wollte jetzt ein Viereck/Kreis... (is egal) zeichnen.
Rectangle(hdc,left,top,right,bottom)so. wie kann ich die Farbe bestimmen?
und wie kann ich die maximale breite/höhe (pixeln) des bildschirm s ermitteln?
mein code: (funktioniert nicht.)
// At first define for including the windows headers #define _WIN32_WINNT 0x0500 #include <windows.h> // C RunTime Header Files #include <stdlib.h> #include <malloc.h> #include <memory.h> #include <tchar.h> // Local Header Files #include <commdlg.h> #include <ocidl.h> #include <olectl.h> #include <crtdbg.h> // The Window Procedure LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; switch (msg) { case WM_CREATE: break; case WM_PAINT: hdc = GetDC(hwnd); Rectangle(hdc,0,0,500,500); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hwnd; MSG Msg; static char appName[] = "Your Application"; // Registering the Window Class wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = NULL; wc.lpszClassName = appName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if (!RegisterClassEx(&wc)) { MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONERROR | MB_OK); return 0; } // Creating the Window hwnd = CreateWindowEx( WS_EX_CLIENTEDGE | WS_EX_LAYERED, appName, "Your Window Title", WS_BORDER, CW_USEDEFAULT, CW_USEDEFAULT, 400, 400, NULL, NULL, hInstance, NULL); if (hwnd == NULL) { MessageBox(NULL, "Window Creation Failed!", "Error", MB_ICONERROR | MB_OK); return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // The Message Loop while (GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return int(Msg.wParam); }danke..
-
Script-Styler schrieb:
so. wie kann ich die Farbe bestimmen?
bestimmen oder vielmehr die zu zeichnende Farbe festlegen?
SelectObject(hdc, hpen); SelectObject(hdc, hbrush); Rectangle(...);Script-Styler schrieb:
und wie kann ich die maximale breite/höhe (pixeln) des bildschirm s ermitteln?
So wie es in deinem Code aussieht, meinst du sicherlich die Dimensionen des Clientbereichs des Fensters
GetClientRect(hwnd, &rc);Beispiel:
case WM_PAINT: RECT rc; PAINTSTRUCT ps; HDC hdc; HPEN hpen; HBRUSH hbrush; GetClientRect(hwnd, &rc); hdc = BeginPaint(hwnd, &ps); hpen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); hbrush = CreateSolidBrush(RGB(0, 0, 255)); SelectObject(hdc, hpen); SelectObject(hdc, hbrush); Rectangle(hdc, rc.left + 10, rc.top + 10, rc.right - 10, rc.bottom - 10); EndPaint(hwnd, &ps); DeleteObject(hbrush); DeleteObject(hpen); break; }Nicht vergessen bei Bearbeitung der Message WM_PAINT, BeginPaint und EndPaint verwenden.
-
Nicht vergessen: Alle Objekte, die in ein HDC via SelectObject eingesetzt werden, müssen nicht nur gelöscht werden..., sondern der alte Inhalt muss (oder besser 'sollte' - eben guter Programmierstil) für den jeweiligen Objekttyp auch wieder hergestellt werden
. Siehe MSDN zu SelectObject.