¿Cómo utilizar funciones API para generar un formulario en C?
La función CreateWindowEx se puede utilizar para generar un formulario.
Función Función: Esta función crea una ventana en cascada, ventana emergente o subventana con un estilo expandido. Otras son iguales que la función CreateWindow.
Prototipo de función:
La función CreateWindowEx crea una ventana emergente automática en cascada (pop-up) o una ventana secundaria a través de un formato extendido. Además, la función de esta función es la misma que la de la función CreateWindow. Para obtener más información sobre la creación de ventanas y una descripción detallada de los parámetros de la función CreateWindowEx.
Ver CreateWindow
HWND CreateWindowEx(
DWOR DdwExStyle, //Estilo extendido de la ventana
LPCTSTR lpClassName, //Puntero al nombre de clase registrada
LPCTSTR lpWindowName,? //Puntero al nombre de la ventana
DWORD dwStyle,? //Estilo de la ventana
int x,? //Posición horizontal de la ventana
int y,? //Posición vertical de la ventana
int nWidth, //Ancho de la ventana
int nHeight, //Altura de la ventana
HWND hWndParent, //El identificador de la ventana principal
HMENU hMenu, //El identificador del menú o el identificador de la ventana secundaria
HINSTANCE hInstance, / /El identificador de la instancia de la aplicación
p>LPVOID lpParam? //Apunta a los datos de creación de la ventana
);
Rutina: includelt; .hgt;
#includelt; stdio.hgt;
LRESULT?CALLBACK?WinDouProc(
HWND?hwnd,?//?handle?to?window
UINT?uMsg,?/ /?message?identifier
WPARAM?wParam,?//?first?message?parameter
LPARAM?lParam// ?segundo?mensaje?parámetro
);
clase?CWnd
{
público: CWnd() { m_hWnd?=? NULL; } BOOL?CreateEx( DWORD?dwExStyle,?/ /?extended?window?style LPCTSTR?lpClassName,?//?pointer?to?registered?class?name LPCTSTR?lpWindowName,?//?pointer?to?window ?nombre DWORD?dwStyle, //?ventana?estilo int ?x, //?posición?horizontal?de?ventana int?y, //?posición?vertical?de?ventana int?nAncho, //?ventana?ancho int?nHeight, ?//?window?height HWND? hWndParent,?//?handle?a?padre?o?propietario?ventana HMENU?hMenu,?//?handle?to?menú?o?ventana secundaria? identificador HANDLE?hInstance,?//?handle?to? aplicación?instancia LPVOID?lpParam//?pointer?to?window-creation?data ); BOOL?ShowWindow(?int?nCmdShow?);
público
c: HWND?m_hWnd;
};
BOOL?CWnd::CreateEx(DWORD?dwExStyle,?//?extended?window?style LPCTSTR?lpClassName,?//? puntero?a?nombre?de?clase?registrada?LPCTSTR?lpWindowName, ?//?puntero?a?nombre?de?ventana?DWORD?dwStyle, //?ventana?estilo int?x, //?posición?horizontal?de?ventana int? y, //?posición?vertical?de?ventana int?nAncho, //?ancho de ventana?int?nAltura,?//?altura de ventana?HWND?hWndParent,?//?mango?a?padre?o?propietario ?ventana HMENU?hMenu,?//?handle?to?menu?o?identificador de ventana secundaria?HANDLE?hInstance,?//?handle?to?application?instance LPVOID?lpParam//?pointer?to?window- Creation?data
)
{ m_hWnd?=?::CreateWindowEx?(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, (HINSTANCE )hInstance, lpParam); if(m_hWnd?!=?NULL) return?TRUE; si no, return?FALSE;
}
BOOL?CWnd::ShowWindow(int?nCmdShow)
{ return?::ShowWindow(m_hWnd, nCmdShow);
}
BOOL?CWnd::UpdateWindow()
{ return?::UpdateWindow(m_hWnd);
}
int?WINAPI?WinMain( HINSTANCE?hInstance,?//?handle?to?current?instance HINSTANCE?hPrevInstance,? //?handle?to?previous?instance LPSTR?lpCmdLine,?//?pointer?to?command?line int?nCmdShow?//?show?state?of?window
)
{
WNDCLASS?wndclass;?//Diseñe primero la clase de ventana
wndclass.cbClsExtra?=?0;
wndclass.cbWndExtra? = ?0;
wndclass.hbrBackground?=?(HBRUSH)GetStockObject(DKGRAY_BRUSH);
wndclass.hCurs
o?=?LoadCursor(NULL, IDC_HELP);
wndclass.hIcon?=?LoadIcon(NULL, IDI_WARNING);
wndclass.hInstance?=?hInstance;
wndclass.lpfnWndProc?=?WinDouProc;
wndclass.lpszClassName?=?"Magic_Maggie";
wndclass.lpszMenuName?=?0;
wndclass.style?=?CS_VREDRAW?|?CS_HREDRAW; //Para eliminar una característica de una determinada variable o varias variables, puede usar la inversión (~) y luego realizar el AND (amp;) //Por ejemplo: eliminar CS_NOCLOSE de estilo, puede diseñaramp;~CS_NOCLOSE;
RegisterClass(amp;wndclass);?/// Tenga cuidado de crear antes de registrarse
CWnd?wnd; wnd.CreateEx(NULL, "Magic_Maggie", "DouDou", WS_OVERLAPPEDWINDOW, 0, 0, 800, 600, NULL, NULL, hInstance, NULL); wnd.ShowWindow(SW_SHOWNORMAL); wnd.UpdateWindow(); (GetMessage(amp;msg, NULL, 0, 0))
{
TranslateMessage(amp;msg);
DispatchMessage(amp;msg); //Activar WinDouProc }
return?0;
}
LRESULT?CALLBACK?WinDouProc(
HWND?hwnd,?/ /?identificador de mensaje?
WPARAM?wParam,?//?primer?mensaje?parámetro
LPARAM?lParam// ?segundo?mensaje ?parametro
)
{ switch(uMsg) { case?WM_LBUTTONDOWN: MessageBox(hwnd, "Presionaste el botón izquierdo del mouse", "Programa de Doudou", MB_OK ); HDC?hdc; hdc?=?GetDC(hwnd); //La?función?GetDC?recupera?un?identificador?a?un?dispositivo?de?contexto?para?el?área?del?cliente?de?a? "ventana" especificada o para toda la pantalla. Puede usar el identificador devuelto en funciones GDI posteriores para dibujar en el contexto del dispositivo. hdc, 0, 0, "Gracias por su apoyo al programa Doudou", strlen("Gracias por su apoyo al programa Doudou"));
nd, hdc); break;
case?WM_CHAR: char?szChar[20]; sprintf(szChar, "Char?is?d", wParam(hwnd, szChar, "programa de Doudou"); , MB_OK);
case?WM_PAINT: PAINTSTRUCT?ps; HDC?hDc; hDc?=?BeginPaint(hwnd, amp;ps); redraw.", strlen("Esto es un redibujo")); EndPaint(hwnd, amp; ps); break;
case?WM_CLOSE: //Este caso es el mismo que el de destrucción a continuación Don' No cometa un error en este caso, de lo contrario la ventana no aparecerá, pero if(IDYES?==?MessageBox(hwnd, "¿Realmente desea salir?", "El programa de Doudou", MB_YESNO)) {
DestroyWindow(hwnd); } romper;
caso?WM_DESTROY: PostQuitMessage(0); ////////////////// //// ////////////////////? break;
predeterminado: return?DefWindowProc(hwnd, uMsg, wParam, lParam);?/ /?Don No olvides regresar } regresar?0;
}