mensaje bip
Lo hice usando la API de C++, ¡lo cual es un poco problemático!
#include
#include "resource.h"
#include "stdlib.h"
# define BUFFER(x,y)*(pBuffer+y*cxBuffer+x)//Predefinir para solicitar un nuevo espacio de memoria
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
p>char szAppName[]="first";
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)//función principal de winmain
{
// static char szAppName[]="Instancia";// Nombre de clase de ventana
HWND hwnd;// Identificador de ventana
MSG msg;/ / Mensajes de Windows
WNDCLASSEX wndclass;//Clase de ventana
wndclass.cbSize=sizeof(wndclass);
wndclass.style=CS_HREDRAW|CS_VREDRAW; p >
wndclass.lpfnWndProc=WndProc;//Función de procesamiento de ventanas
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass hInstance=hInstance;
wndclass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(MYICON1));
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=MAKEINTRESOURCE(IDR_MENU1);
wndclass.lpszClassName=szAppName;
/ / wndclass.hIconSm=LoadIcon(NULL,MAKEINTRESOURCE(MYICON2));
wndclass.hIconSm=LoadIcon(hInstance,MAKEINTRESOURCE(MYICON2));
if(!RegisterClassEx(&wndclass) ) //Emitir una advertencia si falla el registro
{
MessageBeep(0);
return FALSE;
}
HMENU hMenu;
hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));
hwnd=CreateWindow(szAppName,
"Mi instancia 9 -1 primera ventana",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
> CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstancia, p>
NULL);
ShowWindow(hwnd,iCmdShow);//Mostrar ventana
UpdateWindow(hwnd);//Dibujar área de usuario
while(GetMessage(&msg,NULL,0,0))//Bucle de mensajes
{
TranslateMessage(&msg);//Traducir mensaje
DispatchMessage( &msg); // Pasa el mensaje a la función de procesamiento
}
return msg.wParam;
}
LRESULT CALLBACK WndProc ( HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam)//Función de procesamiento de ventanas|Función de procesamiento de mensajes
{
static char *pBuffer=NULL;
estático int cxChar,cyChar,cxClient,cyClient,cxBuffer,cyBuffer,xCaret,yCaret;
HDC hdc;
int x,y,i;
PAINTSTRUCT ps;
TEXTMETRIC tm;
static int iColorID[5]={WHITE_BRUSH,LTGRAY_BRUSH,GRAY_BRUSH,DKGRAY_BRUSH,BLACK_BRUSH};
static int iSelection= ID_MENUITEM40013 ;
HMENU hMenu;
cambiar(iMsg)
{
caso WM_COMMAND:
hMenu= GetMenu (hwnd);
switch(LOWORD(wParam))
{
caso ID_MENUITEM40001:
caso ID_MENUITEM40002:
caso ID_MENUITEM40003:
MessageBeep(0);
devuelve 0;
caso ID_MENUITEM40004:
SendMessage(hwnd, WM_CLOSE ,0,0L);
devuelve 0;
caso ID_MENUITEM40005:
caso ID_MENUITEM40006:
caso ID_MENUITEM40007:
caso ID_MENUITEM40008:
caso ID_MENUITEM40018:
caso ID_MENUITEM40019:
caso ID_MENUITEM40020:
caso ID_MENUITEM40021:
caso ID_MENUITEM40022:
CheckMe
nuItem(hMenu,iSelection,MF_UNCHECKED);
iSelection=LOWORD(wParam);
CheckMenuItem(hMenu,iSelection,MF_CHECKED);
SetClassLong(hwnd, GCL_HBRBACKGROUND,(LONG)GetStockObject(iColorID[LOWORD(wParam)-ID_MENUITEM40018]));
InvalidateRect(hwnd,NULL,TRUE);
devuelve 0;
caso ID_MENUITEM40011:
MessageBox(hwnd,"¡Ayuda aún no implementada!",szAppName,MB_ICONEXCLAMATION|MB_OK);
devuelve 0;
caso ID_MENUITEM40012 :
MessageBox(hwnd, "Este bloc de notas se produce utilizando tecnología C++. Los derechos de autor pertenecen al equipo Pili de nuestra empresa. ¡Los infractores serán procesados!", szAppName, MB_ICONINFORMATION|MB_OK);
devolver 0;
}
descanso;
/* caso WM_TIMER:
MessageBeep(0);
return 0;
case WM_DESTROY:
PostQuitMessage(0);//Llama a la función postquitmessage para salir del programa
return 0;
caso WM_CREATE:
hdc=GetDC(hwnd);
SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
GetTextMetrics(hdc,&tm) ;
p>cxChar=tm.tmAveCharWidth;
cyChar=tm.tmHeight;
ReleaseDC(hwnd,hdc);
devolver 0;
p>caso WM_SIZE:
cxClient=LOWORD(lParam);
cyClient=HIWORD(lParam);
cxBuffer=max(1,cxClient /cxChar);
cyBuffer=max(1,cyClient/cyChar);
if(pBuffer!=NULL)
free(pBuffer);
p>if((pBuffer=(char*)malloc(cxBuffer*cyBuffer))==NULL)
MessageBox(hwnd, "La ventana es demasiado grande y no hay suficiente memoria. Responda adecuadamente." Redúzcalo un poco","Typer",MB_ICONEXCLAMATION|MB_OK);
else
for(y=0;y. for( x=0;x B UFFER(x,y)=' '; xCaret=0; yCaret=0; if(hwnd==GetFocus())// Obtener foco SetCaretPos(xCaret*cxChar,yCaret*cyChar);//Establecer el cursor return 0; case WM_SETFOCUS: CreateCaret(hwnd,NULL,cxChar,cyChar); SetCaretPos(xCaret*cxChar,yCaret*cyChar); ShowCaret(hwnd); devolver 0; caso WM_KILLFOCUS: HideCaret(hwnd); DestroyCaret(); devolver 0; case WM_KEYDOWN: switch(wParam)//El código de escaneo se traduce en un código virtual y el código virtual se almacena en el parámetro wparam del teclado { caso VK_HOME ://tecla de inicio xCaret=0; descanso; caso VK_END://tecla de fin p> xCaret=cxBuffer- 1; ruptura; caso VK_PRIOR://clave de página arriba yCaret=0; ruptura; caso VK_NEXT://clave de página abajo yCaret=cyBuffer-1; ruptura; caso VK_LEFT: //tecla de flecha izquierda xCaret=max(xCaret-1,0); break; case VK_RIGHT://tecla de flecha derecha xCaret=min(xCaret +1,0); descanso; caso VK_UP://tecla de flecha hacia arriba yCaret=max( yCaret-1,0); break; case VK_DOWN://Tecla de flecha hacia abajo yCaret=min(yCaret+1,cyBuffer- 1); break ; case VK_DELETE://del key for(x=xCaret;x BUFFER(x,yCaret)= BUFFER(x+1,yCaret); BUFFER(cxBuffer-1,yCaret)=' '; HideCaret(hwnd) ; hdc=GetDC (hwnd); SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT)); TextOut(hdc,xCaret*cxChar,yCaret*cyChar ,&BUFFER(xCaret,yCaret),cxBuffer-xCaret ); ShowCaret(hwnd); > ReleaseDC(hwnd,hdc); break; } SetCaretPos(xCaret*cxChar,yCaret*cyChar); devolver 0; case WM_CHAR:// for(i=0;i<(int)LOWORD(lParam);i++) { p> cambiar(wParam) { caso '\b': if(xCaret>0) { xCaret--; SendMessage(hwnd,WM_KEYDOWN,VK_DELETE,1L); } descanso; caso '\t': hacer { SendMessage(hwnd,WM_CHAR,' ',1L); } while(xCaret % 8!=0); break; case '\n': si (++yCaret==cyBuffer) yCaret=0; descanso; caso '\r': xCaret= 0; if(++yCaret==cyBuffer) yCaret=0; break; case '\x1B' : for(y=0;y for(x=0;x BUFFER(x, y)=' '; xCaret=0; yCaret=0; InvalidateRect(hwnd,NULL,FALSE); romper; predeterminado: BUFFER(xCaret,yCaret)=(char)wParam; HideCaret(hwnd); hdc=GetDC(hwnd); SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT)); TextOut(hdc,xCaret*cxChar,yCaret*cyChar,&BUFFER(xCaret,yCaret), 1); ShowCaret(hwnd); ReleaseDC(hwnd,hdc); if(++xCaret==cxBuffer) { xCaret=0; if(++yCaret==cyBuffer) yCaret=0; } descanso; } } SetCaretPos(xCaret*cxChar, yCaret*cyChar); return 0; caso WM_PAINT: hdc=BeginPaint(hwnd,&ps); SelectObject( hdc,GetStockObject(SYSTEM_FIXED_FONT)); for(y=0;y TextOut(hdc,0,y*cyChar,&BUFFER(0,y) ,cxBuffer); EndPaint(hwnd,&ps); devuelve 0;*/ } devuelve DefWindowProc(hwnd, iMsg,wParam,lParam); }