Código fuente del seguidor de ventana
# incluir lttchar.h gt
# incluir ltassert.h gttchar * SZ question = text("¿Qué es 1000 * 10?"); p>
TCHAR * SZ respuesta = TEXT(" 10000 ");
WNDPROC oldEditProc = NULL
WNDPROC oldButtonProc = NULL
HFONT hFont = NULL
HWND hTestDlgWnd=NULL, hEditWnd=NULL, hButtonWnd = NULL
Devolución de llamada LRESULT TestDlgProc(HWND hWnd, mensaje UINT, WPARAM wParam, LPARAM LPARAM);
Devolución de llamada LRESULT MyEditProc(HWND hWnd, mensaje UINT, WPARAM wParam, LPARAM LPARAM);
Devolución de llamada LRESULT MyButtonProc(HWND hWnd, mensaje UINT, WPARAM wParam, LPARAM LPARAM);
Sistema BOOL reiniciar(); int WINAPI WinMain(h instancia h instancia, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
wnd class wnd class = { 0 };
TCHAR * SZ nombre de clase = TEXT(" TestDlg ");
MSG MSG = { 0 }; COLORREF COLOR = GetSysColor(COLOR _ borde activo);
HBRUSH HBRUSH = CreateSolidBrush(color);
assert(hBrush); hFont =(hFont)GetStockObject(DEFAULT _ GUI _ FONT);
log font log font = { 0 }; p> p>
GetObject(hFont, sizeof(LOGFONT), fuente amplog);
eliminar objeto(hFont);
hFont = NULL
log font .lf altura = 12;
_ tcscpy (logfont.
lffacename, text("Mi mundo"));
hFont = createfont indirect(amp;log font);
Assertion(hFont); wnd style = CS_no close;
clase wnd . h instancia = h instancia;
clase wnd . HBR fondo = HB rush;
clase wnd hcursor = cargar cursor (NULL, MAKEINTRESOURCE(. IDC_ARROW));
wndclass.hIcon=LoadIcon(NULL, MAKEINTRESOURCE(IDI_Application));
wnd clase cbwndextra = 0;
wnd clase . = 0;
clase wnd .lpfnwndproc = TestDlgProc;
wndclass.lpszMenuName = NULL
nombre de clase lpsz = nombre de clase SZ;
if (!register class(amp; wndclass))
{
MessageBox(NULL, TEXT("¡Error en el registro de la ventana!") ), TEXT ("advertencia " ), MB _ OK);
Devolver S _ FALSE
} Estilo DWORD = WS _ ventana superpuesta amp ~(WS _ maximizar cuadro | WS _ minimizar cuadro | WS _ grueso; frame);
int CX = getsystem metrics(SM_CX pantalla completa);
int cy = GetSystemMetrics(SM_cy pantalla completa);
int iTestDlgWidth = 500
int iTestDlgHeight = 230
hTestDlgWnd = CreateWindowEx(WS_EX_tool window,
szClassName,
p>
Text("Por favor responda la pregunta:"),
Estilo,
cx/2-iTestDlgWidth/2,
cy/2- iTestDlgHeight/2,
iTestDlgWidth,
iTestDlgHeight,
Vacío,
Vacío,
hInstance,
NULL);
assert(hTestDlgWnd);
* SendMessage(hTestDlgWnd, WM_SETFONT, (WPARAM)hFont, 1); estilo = WS _ CHILD | MULTILINE | AUTOHSCROLL | ES _ AUTOVSCROLL;
<p>hEditWnd=CreateWindow(
Texto("Editar"),
Texto(""),
Estilo,
10 ,
40,
iTestDlgWidth-20,
100,
hTestDlgWnd,
Vacío,
p>
p>
hInstance,
);
assert(hEditWnd);
oldEditProc = (WNDPROC)SetWindowLong(hEditWnd, GWL_WNDPROC). , (LONG)MyEditProc );
assert(oldEditProc);
* SendMessage(hedit wnd, WM_SETFONT, (WPARAM)hFont, 1); >
hButtonWnd = crear ventana(TEXT(" Botón "),
Texto("OK"),
Estilo,
10, p>
150,
60,
20,
hTestDlgWnd,
Vacío,
hInstance,
);
assert(hButtonWnd);
oldButtonProc =(WNDPROC)SetWindowLong(hButtonWnd, GWL_WNDPROC, (LONG)MyButtonProc);
asertar (oldButtonProc);
* SendMessage(hButtonWnd, WM_SETFONT, (WPARAM)hFont, 1); ShowWindow(hTestDlgWnd, SW _ SHOW); , SW _ SHOW) ;
ShowWindow(hButtonWnd, SW _ SHOW);
actualizar ventana(hTestDlgWnd); * SetFocus(hEditWnd); GetMessage( amp; msg , NULL, 0, 0))
{
Mensaje de traducción (amp; MSG
mensaje de envío (amp; MSG);
}
Frecuencia intermedia (hBrush)
eliminar objeto (HB rush);
Frecuencia intermedia (alta frecuencia)
eliminar objeto (hFont);
Devolver msg.wParam
}Devolución de llamada LRESULT TestDlgProc(HWND hWnd, mensaje UINT, WPARAM wParam, LPARAM lParam)
{
Cambiar (mensaje)
{
Caso WM_CLOSE:
{
Destruir ventana ( hWnd);
}
Pausa;
Caso WM_DESTROY:
{
PostQuitMessage(0);
}
Rotura;
Caso WM_PAINT:
p>
{
estructura de pintura PS = { 0 };
HDC hDC = NULL
hDC = comenzar pintura (hWnd amp; PS);
HFONT mantiene fuente =(HFONT)selecciona objeto(hDC, HFONT);
int oldMode=SetBkMode(hDC, TRANSPARENT);
TextOut(hDC, 10, 5, szQuestion,_TCS len(pregunta SZ));
SelectObject(hDC, mantener fuente);
SetBkMode(hDC, modo antiguo);
topcoat(hWnd&ps);
}
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}Devolución de llamada LRESULT MyEditProc(HWND hWnd, mensaje UINT, WPARAM wParam, LPARAM lParam)
{
return (*oldEditProc)( hWnd, mensaje, wParam , lParam);
}Devolución de llamada LRESULT MyButtonProc(HWND hWnd, mensaje UINT, WPARAM wParam, LPARAM lParam)
{
Switch (Mensaje)
{
Caso WM_LBUTTONDOWN:
{
TCHAR buf[512]= { 0 };
GetWindowText(hEditWnd , buf, 512); if (!_tcscmp(buf, szAnswer))
{
MessageBox(hWnd, TEXT("¡Respondiste correctamente!"), TEXT ("prompt " ), MB_OK);
* SendMessage(hTestDlgWnd, WM_CLOSE, 0, 0);
}
Otro
{ p>
MessageBox(hWnd, TEXT)("¡Respondiste mal! ¡¡Por favor, prepárate para aceptar el castigo!!"), TEXT ("prompt"), MB _ OK);
reiniciar el sistema. ();
}
}
Romper;
}
return (*oldButtonProc)(hWnd , mensaje, wParam, lParam);
}Reinicio del sistema BOOL()
{
Procesando hToken
TOKEN _ PRIVILEGES tkp
Si (! OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRVILEGES | TOKEN_QUERY, amphToken))
{
Retorno (falso);
}
LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, amptkp Permisos[0].
luid);
tkp. PrivilegeCount = 1;
tkp. Permisos[0]. Atributo = SE_PRIVILGE_ENABLED
AdjustTokenPrivileges(hToken, FALSE, amptkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); if (GetLastError()!=Error_Success)
{
Devolver FALSO
}if (!ExitWindowsEx(EWX_REBOOT, 0))
{
Devolver FALSO
}
Devolver VERDADERO
} Antes de responder al programa de trampa de cierre, debe crear un programa WIN32 y pegarlo.