Red de conocimiento informático - Conocimiento del nombre de dominio - Pregunta urgente C: ¿Cómo crear una nueva ventana para dibujar?

Pregunta urgente C: ¿Cómo crear una nueva ventana para dibujar?

No puedo publicar todo el código. Es fácil crearlo usted mismo usando VC.

Abra VC-gt; menú Archivo-gt; Nuevo-gt; seleccione Aplicación Win32 en Proyecto, ingrese 5471 en Nombre del proyecto, siguiente paso-gt; . Copie mi código a continuación en su archivo 5471.cpp para reemplazar el 5471 original. archivo cpp.

// 5471.cpp: Define el punto de entrada para la aplicación.

//

#include "stdafx.h"

#include "resource.h"

#define MAX_LOADSTRING 100

// Variables globales:

HINSTANCE hInst; // instancia actual

TCHAR szTitle[MAX_LOADSTRING]; // El texto de la barra de título

TCHAR szWindowClass[MAX_LOADSTRING]; // El texto de la barra de título

void DrawPixel(HWND hWnd);

// Declaraciones directas de funciones incluidas en este módulo de código:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LLAMADA DE RESULTADO WndProc(HWND, UINT, WPARAM, LPARAM);

LLAMADA DE RESULTADO Acerca de(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

// TODO: Colocar código aquí.

MSG msg;

HACCEL hAccelTable;

// Inicializar cadenas globales

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING );

LoadString(hInstance, IDC_MY5471, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance

// Realizar la inicialización de la aplicación:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE

}

hAccelTable = LoadAccelerators(hInstance) , (LPCTSTR)IDC_MY5471);

<

p> // Bucle de mensaje principal:

while (GetMessage(amp;msg, NULL, 0, 0))

{

if (!TranslateAccelerator( msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(amp;msg);

DispatchMessage(amp;msg);

}

}

return msg.wParam

}

//

/ / FUNCIÓN: MyRegisterClass()

//

// PROPÓSITO: Registra la clase de ventana.

//

// COMENTARIOS :

//

// Esta función y su uso solo son necesarios si desea que este código

// sea compatible con los sistemas Win32 anteriores a la 'RegisterClassEx'

// función que se agregó a Windows 95. Es importante llamar a esta función

// para que la aplicación tenga pequeños íconos 'bien formados' asociados

// con él.

//

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex ;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

p>

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstancia = hInstancia

wcex; .hIcon = LoadIcon( hInstance, (LPCTSTR)IDI_MY5471);

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW 1);

wcex.lpszMenuName = (LPCSTR)IDC_MY5471;

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance,

(LPCTSTR)IDI_SMALL);

return RegisterClassEx(amp;wcex);

}

//

// FUNCIÓN: InitInstance (HANDLE, int)

//

// PROPÓSITO: Guarda el identificador de instancia y crea la ventana principal

//

// COMENTARIOS:

//

// En esta función, guardamos el identificador de instancia en una variable global y

// creamos y mostramos la ventana principal del programa. .

//

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Almacena el identificador de instancia en nuestra variable global

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)

{

return FALSE;

}

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

devuelve VERDADERO;

// FUNCIÓN: WndProc(HWND, unsigned, WORD, LONG)

//

// PROPÓSITO: Procesa mensajes para la ventana principal.

//

// WM_COMMAND - procesa el menú de la aplicación

// WM_PAINT - pinta la ventana principal

// WM_DESTROY - publica un mensaje de salida y regresa

//

//

LRESULT CALLBACK WndProc(HWND hWnd, mensaje UINT, WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc

TCHAR szHello[MAX_LOADSTRING]

Cargar cadena (

hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

cambiar (mensaje)

{

caso WM_COMMAND:

wmId = LOWORD(wParam) );

wmEvent = HIWORD(wParam);

// Analiza las selecciones del menú:

switch (wmId)

{

caso IDM_ABOUT:

DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)Acerca de

break

caso; IDM_EXIT:

DestroyWindow(hWnd);

break;

predeterminado:

return DefWindowProc(hWnd, mensaje, wParam, lParam) ;

}

descanso;

caso WM_PAINT:

hdc = BeginPaint(hWnd, amp; ps);

EndPaint(hWnd, amp; ps);

descanso

caso WM_DESTROY:

PostQuitMessage(0); romper;

caso WM_LBUTTONDOWN:

DrawPixel(hWnd);

romper

predeterminado:

regresar; DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

// Controlador de mensaje para aproximadamente box.

LLAMADA DE RESULTADO Acerca de(HWND hDlg, mensaje UINT, WPARAM wParam, LPARAM lParam)

{

switch (mensaje)

{

caso WM_INITDIALOG:

devuelve VERDADERO

caso WM_COMMAND:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));

devuelve VERDADERO

}

romper;

}

devolver FALSO

}

anular Sorteo;

Pixel(HWND hWnd)

{

// Consigue un DC para dibujar, aquí solo usaré el escritorio

HDC hdc = GetWindowDC( hWnd );

// Crea un pincel de línea sólida roja con un ancho de 1 píxel

HPEN hpen1 = CreatePen( PS_SOLID, 1, RGB(255, 0, 0)

// Crea un pincel de guión verde de 5 píxeles de ancho. Si deseas crear otros tipos de pinceles, consulta MSDN

HPEN hpen2 = CreatePen( PS_DASH, 5, RGB(0, 255, 0 ) );

// Crea un pincel azul sólido

HBRUSH hbrush1 = CreateSolidBrush( RGB(0, 0, 255) );

// Crea un pincel transparente Si desea crear otros tipos de pinceles, consulte MSDN

HBRUSH hbrush2 = (HBRUSH)GetStockObject( NULL_BRUSH

// Combinar hpen1 y hbrush1 Seleccionar). HDC y guarde los pinceles y pinceles originales de HDC

HPEN hpen_old = (HPEN)SelectObject( hdc, hpen1

HBRUSH hbrush_old = (HBRUSH)SelectObject( hdc, hbrush1 );

// Dibuja un rectángulo con un ancho de 200 píxeles y una altura de 50 píxeles en (40, 30)

Rectángulo ( hdc, 40, 30, 40 200, 30 50 );

// Reemplaza hpen1 y hbrush1, y luego dibuja un rectángulo en (40, 100) para ver la diferencia

SelectObject(hdc, hpen2);

p >

SelectObject(hdc, hbrush2);

Rectángulo(hdc, 40, 100, 40 200, 100 50

// Dibuja una elipse y mira p>

Ellipse(hdc, 40, 200, 40 200, 200 50);

// Dibuja una línea recta desde (0, 600) hasta (800, 0)

MoveToEx(hdc, 0, 600, NULL);

LineTo(hdc, 800, 0);

// Dibuja un punto amarillo en (700, 500), pero este punto tiene solo un tamaño de píxel, puedes encontrarlo si miras con atención

SetPixel(hdc, 700, 500, RGB(255, 255, 0));

// Restaurar los pinceles y pinceles originales

SelectObject(hdc, hpen_old);

SelectObject(hdc, hbrush_old);

ReleaseDC(hWnd, h

corriente continua);

}