Dibujar un círculo con centro y radio conocidos, implementado en C (mfc)
Por supuesto, también puede escribir la biblioteca usted mismo, es decir, ajustar la DLL del sistema. En resumen, la tarjeta gráfica que opera usted mismo es demasiada.
Diferentes tarjetas gráficas requieren códigos diferentes... ¿Puedes soportarlo? Dejemos estos detalles al sistema...
Ajustar la API es barato y fácil.
MoveToEx(hdc, xBeg, xBeg, NULL);
LineTo(hdc, xEnd, yEnd)//Línea recta
Arc(hdc, xLeft, yTop , xRignt, yBottom, xStart, yStart, xEnd, yEnd); //arc
Rectangle(hdc, xLeft, yTop, xRignt, yBottom); //rectángulo
Elipse( hdc, xLeft, yTop, xRignt, yBottom); //círculo o elipse
Las anteriores son funciones geométricas básicas, ¿verdad? ,,,,, también puedes consultar más.
El código específico publicado es el código en "Programación de Windows". Está un poco desactualizado, pero aún es bueno.
HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("LineDemo"); > HWND hwnd;
mensaje MSG;
WNDCLASS wndclass;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if (!RegisterClass (amp; wndclass))
{
MessageBox (NULL, TEXT ("¡El programa requiere Windows NT!"),
szAppName, MB_ICONERROR
Devuelve 0;
hwnd = CreateWindow ( szAppName, TEXT ("Demostración de línea"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hwnd = CreateWindow (USEDEFAULT,
NULL, NULL, hInstance, NULL);
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);
while (GetMessage (amp; msg, NULL, 0, 0)) p>
{
TranslateMessage (amp; msg);
DispatchMessage (amp; msg
}
return); msg.wParam;
El mensaje es un mensaje nuevo.
p>}
LRESULT CALLBACK WndProc (HWND hwnd, mensaje UINT, WPARAM wParam, LPARAM lParam)
{
static int cxClient, cyClient;
HDC hdc;
PAINTSTRUCT ps;
cambiar (mensaje)
{
caso WM_SIZE:
cxClient = LOWORD (lParam);
cyClient = HIWORD (lParam);
devuelve 0
caso WM_PAINT:
hdc = BeginPaint (hwnd, & ps);
Rectángulo (hdc, cxClient/8, cyClient/8,
7 * cxClient/8, 7 * cyClient/8);
MoveToEx (hdc, 0, 0, NULL)
LineTo (hdc, cxClient, cyClient)
MoveToEx (hdc, 0, cyClient, NULL);
LineTo (hdc, cxClient, 0);
Elipse (hdc, cxClient/8, cyClient/8,
7 * cxClient/8 , 7 * cyClient / 8
RoundRect (hdc, cxClient cxClient / 4, cyClient / 4,
3 * cxClient / 4, 3 * cyClient / 4,
);cxClient/4, cyClient/4);
EndPaint (hwnd, amp;ps
devuelve 0;)
caso WM_DESTROY:
PostQuitMessage (0);
devuelve 0;
}
devuelve DefWindowProc (hwnd, mensaje, wParam, lParam); p>
}
Espero que te sea de utilidad.