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