Red de conocimiento informático - Conocimientos de programación - Código fuente del seguidor de ventana

Código fuente del seguidor de ventana

# incluir ltWindows.h gt

# 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,

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

{

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.