Red de conocimiento informático - Conocimiento informático - Dibujar un círculo con centro y radio conocidos, implementado en C (mfc)

Dibujar un círculo con centro y radio conocidos, implementado en C (mfc)

MFC es un paquete API.

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))

{

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.