Cita:
Empezado por REHome
Se me genera códigos pero no se ve el formulario. Lo que demuestra se un engorro programar así hoy en día, pero hay empresas que si programan así y enseñan en algunas universidades les gusten a los alumnos o no.
|
Suerte tienen a los que les enseñen esto (o se tomen el tiempo de aprenderlo), ya que es precisamente lo que le cuesta más a los programadores actuales, que con tanta abstracción/frameworks al final no saben qué es esto lo que está por debajo, y es bueno conocerlo creo yo.
Tienes más formas de hacerlo en VC++ (ya que las capturas que pones son de ese compilador), pero te pongo la que intentas.. para no complicarlo solo he modificado el archivo "aaaa.cpp" que veo que en tus capturas es el archivo principal del proyecto, es el código que genera el asistente que has usado, y las líneas que yo he añadido o modificado comienzan por /*>*/
Te pongo una captura del resultado para que veas si es lo que necesitas:
Código PHP:
// aaaa.cpp: define el punto de entrada de la aplicación. //
#include "stdafx.h" #include "aaaa.h"
#define MAX_LOADSTRING 100
/*>*/ #define IDC_BUTTON_1 201 /*>*/ #define IDC_BUTTON_2 202
// Variables globales: HINSTANCE hInst; // Instancia actual WCHAR szTitle[MAX_LOADSTRING]; // Texto de la barra de título WCHAR szWindowClass[MAX_LOADSTRING]; // nombre de clase de la ventana principal
// Declaraciones de funciones adelantadas incluidas en este módulo de código: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: colocar código aquí.
// Inicializar cadenas globales LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadStringW(hInstance, IDC_AAAA, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance);
// Realizar la inicialización de la aplicación: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; }
HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_AAAA));
MSG msg;
// Bucle principal de mensajes: while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
return (int) msg.wParam; }
// // FUNCIÓN: MyRegisterClass() // // PROPÓSITO: registrar la clase de ventana. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXW wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_AAAA)); wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_AAAA); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassExW(&wcex); }
// // FUNCIÓN: InitInstance(HINSTANCE, int) // // PROPÓSITO: guardar el identificador de instancia y crear la ventana principal // // COMENTARIOS: // // En esta función, se guarda el identificador de instancia en una variable común y // se crea y muestra la ventana principal del programa. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hInstance; // Almacenar identificador de instancia en una variable global
/*>*/ HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX, /*>*/ CW_USEDEFAULT, 0, 300, 300, nullptr, nullptr, hInstance, nullptr);
if (!hWnd) { return FALSE; }
ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
return TRUE; }
// // FUNCIÓN: WndProc(HWND, UINT, WPARAM, LPARAM) // // PROPÓSITO: procesar mensajes de la ventana principal. // // WM_COMMAND - procesar el menú de aplicaciones // WM_PAINT - Pintar la ventana principal // WM_DESTROY - publicar un mensaje de salida y volver // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { /*>*/ case WM_CREATE: /*>*/ CreateWindowEx(0, L"BUTTON", L"Botón 1", WS_CHILD | WS_VISIBLE, /*>*/ 10, 50, 130, 130, hWnd, (HMENU)IDC_BUTTON_1, hInst, nullptr); /*>*/ CreateWindowEx(0, L"BUTTON", L"Botón 2", WS_CHILD | WS_VISIBLE, /*>*/ 145, 50, 130, 130, hWnd, (HMENU)IDC_BUTTON_2, hInst, nullptr); /*>*/ break; case WM_COMMAND: { int wmId = LOWORD(wParam); // Analizar las selecciones de menú: switch (wmId) { /*>*/ case IDC_BUTTON_1: /*>*/ MessageBox(hWnd, L"Botón 1 pulsado", L"Ejemplo", MB_OK | MB_ICONINFORMATION); /*>*/ break; /*>*/ case IDC_BUTTON_2: /*>*/ MessageBox(hWnd, L"Botón 2 pulsado", L"Ejemplo", MB_OK | MB_ICONINFORMATION); /*>*/ break; case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // TODO: Agregar cualquier código de dibujo que use hDC aquí... EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
// Controlador de mensajes del cuadro Acerca de. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE;
case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; }
Cita:
Empezado por REHome
La verdad, no sabía que fuera tan coñazo, pesado, complicado en hacer lo que estoy pidiendo.
|
No es que sea complicado, es que lo estas preguntando en un foro sobre C++Builder, y precisamente la gracia de este es evitar estas "complicaciones" ;-)
Tienes una versión de C++Builder gratuita llamada "Starter", trae menos cosas que la de pago, pero es totalmente funcional (no es una demo):
https://www.embarcadero.com/es/produ...uilder/starter
Última edición por _Leo fecha: 09-04-2018 a las 19:19:37.
|