Autor
|
Tema: [SOLUCIONADO] ¿Cómo añadir dos botones al formulario? (Leído 12,482 veces)
|
Meta
|
Buenas: No se ni donde poner ese código. aaaa.cpp: // aaaa.cpp: define el punto de entrada de la aplicación. // #include "stdafx.h" #include "aaaa.h" #define MAX_LOADSTRING 100 // 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_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // ###################################################################### HWND hwndButton = CreateWindow( L"BUTTON", // Predefined class; Unicode assumed L"OK", // Button text WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // Styles 10, // x position 10, // y position 100, // Button width 100, // Button height m_hwnd, // Parent window NULL, // No menu. (HINSTANCE)GetWindowLong(m_hwnd, GWL_HINSTANCE), NULL); // Pointer not needed. // ###################################################################### // // 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_COMMAND: { int wmId = LOWORD(wParam); // Analizar las selecciones de menú: switch (wmId) { 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; }
Hay dos códigos más, el del botón: HWND hwndButton = CreateWindow( L"BUTTON", // Predefined class; Unicode assumed L"OK", // Button text WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // Styles 10, // x position 10, // y position 100, // Button width 100, // Button height m_hwnd, // Parent window NULL, // No menu. (HINSTANCE)GetWindowLong(m_hwnd, GWL_HINSTANCE), NULL); // Pointer not needed.
Que lo dice aquí, y el punto de coordenada que lo dice aquí como han puesto. Coordenada. void CMyApp::OnHideApplication() { //m_pMainWnd is the main application window, a member of CMyApp ASSERT_VALID(m_pMainWnd); // hide the application's windows before closing all the documents m_pMainWnd->ShowWindow(SW_HIDE); m_pMainWnd->ShowOwnedPopups(FALSE); // put the window at the bottom of z-order, so it isn't activated m_pMainWnd->SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE); }
Saludos.
|
|
|
En línea
|
|
|
|
srWhiteSkull
|
Puedes meter la función en la misma función de instancia. Jo que tampoco es nada del otro mundo : BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hInstance; // Almacenar identificador de instancia en una variable global HWND hWnd = CreateWindowW( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // AQUI POR EJEMPLO!!! pos : (100,100), size(600,400) SetWindowPos(hWnd, 0, 100, 100, 600, 400, NULL); return TRUE; }
|
|
|
En línea
|
|
|
|
Meta
|
Muchas gracias campeón. Aún así me dice algo más de un error. #include "stdafx.h" #include "aaaa.h" #define MAX_LOADSTRING 100 // 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_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // ###################################################################### BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hInstance; // Almacenar identificador de instancia en una variable global HWND hWnd = CreateWindowW( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // AQUI POR EJEMPLO!!! pos : (100,100), size(600,400) SetWindowPos(hWnd, 0, 100, 100, 600, 400, NULL); 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_COMMAND: { int wmId = LOWORD(wParam); // Analizar las selecciones de menú: switch (wmId) { 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; }
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido Error C2084 la función 'BOOL InitInstance(HINSTANCE,int)' ya tiene un cuerpo aaaa c:\users\usuario\documents\visual studio 2017\projects\aaaa\aaaa\aaaa.cpp 130
|
|
|
En línea
|
|
|
|
srWhiteSkull
|
A ver Mc fly, no deberías tener dos funciones de instancia
|
|
|
En línea
|
|
|
|
Meta
|
Buenas: El como lo hice me funciona pero no aparece botón ni cambio de tamaño del formulario. // aaaa.cpp: define el punto de entrada de la aplicación. // #include "stdafx.h" #include "aaaa.h" #define MAX_LOADSTRING 100 // 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_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; // ###################################################################### hInst = hInstance; // Almacenar identificador de instancia en una variable global HWND hWnd2 = CreateWindowW( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd2) { return FALSE; } ShowWindow(hWnd2, nCmdShow); UpdateWindow(hWnd2); // AQUI POR EJEMPLO!!! posición(100,100), tamaño(600,400) SetWindowPos(hWnd2, 0, 100, 100, 600, 400, NULL); 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_COMMAND: { int wmId = LOWORD(wParam); // Analizar las selecciones de menú: switch (wmId) { 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; }
|
|
|
En línea
|
|
|
|
srWhiteSkull
|
Es algún tipo de broma? BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { // de verdad esto es serio? hInst = hInstance; // Almacenar identificador de instancia en una variable global HWND hWnd = CreateWindowW( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; // me estas vacilando o algo asi? // ###################################################################### hInst = hInstance; // Almacenar identificador de instancia en una variable global HWND hWnd2 = CreateWindowW( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd2) { return FALSE; } ShowWindow(hWnd2, nCmdShow); UpdateWindow(hWnd2); // AQUI POR EJEMPLO!!! posición(100,100), tamaño(600,400) SetWindowPos(hWnd2, 0, 100, 100, 600, 400, NULL); return TRUE; // ###################################################################### } Simplemente te tienes que deshacer de las primeras líneas de la instancia... y si en verdad esto es serio creo que lo primero que deberías hacer es aprender a programar C en la consola y luego pasar a cosas mayores.
|
|
|
En línea
|
|
|
|
Meta
|
Ejecuta pero no hace nada, misma pantalla, el tamaño, aunque lo varíe, no hace nada. #include "stdafx.h" #include "aaaa.h" #define MAX_LOADSTRING 100 // 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) { // de verdad esto es serio? hInst = hInstance; // Almacenar identificador de instancia en una variable global HWND hWnd = CreateWindowW( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; // me estas vacilando o algo asi? // ###################################################################### hInst = hInstance; // Almacenar identificador de instancia en una variable global HWND hWnd2 = CreateWindowW( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd2) { return FALSE; } ShowWindow(hWnd2, nCmdShow); UpdateWindow(hWnd2); // AQUI POR EJEMPLO!!! posición(100,100), tamaño(600,400) SetWindowPos(hWnd2, 0, 50, 50, 100, 100, NULL); 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_COMMAND: { int wmId = LOWORD(wParam); // Analizar las selecciones de menú: switch (wmId) { 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; }
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
No se programa copiando y pegando código. Ni el código de srWhiteSkull leíste...
Lo mejor es que intentes otro tipo de proyecto de consola, como dice srWhiteSkull. WinAPI no es complicada, pero hay que saber C para usarla. Y saber C no es copiar y pegar trozos de código de la MSDN. Saber C es saber hacer ese código tú; saberlo leer e interpretar, o por lo menos, esforzarse en entenderlo.
Te podemos hacer el código nosotros con un botón. Pero dime tú que utilidad tendría eso.
|
|
|
En línea
|
|
|
|
Meta
|
Hola: Leer, leer y leer he leído hasta las cejas. Quiero redimensionar el formulario a 300 x 300 o al menos por ahí de ese tamaño. En cuanto a los dos botones, lo que quiero hacer, es ponerlo en el formulario. Lo que hace el botón, simplemente es abrir la bandeja del disco o lector y el otro cerrar. En Win32 modo consola C++ es así. #include "stdafx.h" #include "Windows.h" #include "iostream" using namespace std; int main() { // Título de la ventana. SetConsoleTitle(L"Consola C++ Win32 2017"); // Variable. char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola. while (true) { // Muestra en pantalla textos. cout << "Control bandeja del lector: " << endl << endl; cout << "A - Abrir bandeja." << endl; cout << "C - Cerrar bandeja." << endl; cout << "==========================" << endl; cin >> entrada; // Aquí introduces letras A, a, C, y c. cout << "\n" << endl; // Abrir bandeja. if ((entrada[0] == 'a') || (entrada[0] == 'A')) { cout << "Abriendo..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door open", nullptr, 0, nullptr); cout << "Abierto." << endl << endl; // Muestra en pantalla textos. } // Cerrar bandeja. else if ((entrada[0] == 'c') || (entrada[0] == 'C')) { cout << "Cerrando..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr); cout << "Cerrado." << endl << endl; // Muestra en pantalla textos. } // Si haz pulsado otro caracter distinto de A, C, a, y c aparece else { cout << "Solo pulsar A o C." << endl << endl; // este mensaje. } } return EXIT_SUCCESS; }
Consola C++ CLR .net: #include "stdafx.h" using namespace System; using namespace System::Runtime::InteropServices; using namespace System::Text; [DllImport("winmm.dll")] extern Int32 mciSendString(String^ lpstrCommand, StringBuilder^ lpstrReturnString, int uReturnLength, IntPtr hwndCallback); static void DoEvents() { Console::SetCursorPosition(0, 6); Console::Write("Abriendo..."); } static void DoEvents2() { Console::SetCursorPosition(0, 6); Console::Write("Cerrando..."); } int main(array<System::String ^> ^args) { StringBuilder^ rt = gcnew StringBuilder(127); // Título de la ventana. Console::Title = "Consola C++ CLR 2017"; // Tamaño ventana consola. Console::WindowWidth = 29; // X. Ancho. Console::WindowHeight = 8; // Y. Alto. // Cursor invisible. Console::CursorVisible = false; // Posición del mansaje en la ventana. Console::SetCursorPosition(0, 0); Console::WriteLine("Control bandeja del lector : \n\n" + "A - Abrir bandeja. \n" + "C - Cerrar bandeja. \n" + "========================== \n"); ConsoleKey key; //Console::CursorVisible = false; do { key = Console::ReadKey(true).Key; String^ mensaje = ""; //Asignamos la tecla presionada por el usuario switch (key) { case ConsoleKey::A: mensaje = "Abriendo..."; Console::SetCursorPosition(0, 6); DoEvents(); mciSendString("set CDAudio door open", rt, 127, IntPtr::Zero); mensaje = "Abierto."; break; case ConsoleKey::C: mensaje = "Cerrando..."; Console::SetCursorPosition(0, 6); DoEvents2(); mciSendString("set CDAudio door closed", rt, 127, IntPtr::Zero); mensaje = "Cerrado."; break; } Console::SetCursorPosition(0, 6); Console::Write(" "); Console::SetCursorPosition(0, 6); Console::Write(mensaje); } while (key != ConsoleKey::Escape); return 0; }
Formulario C++ CLR .net: (Sólo pongo una imagen, si quieren el código lo subo). Lo quiero que salga como abajo en formulario pero en Win32. Para dejarlo más claro. Para abrir bandeja se usa este código. mciSendString(L"set cdaudio door open", nullptr, 0, nullptr);
Cerrar bandeja. mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr);
Dejando claro que el Winmm.lib está cargado en el Visual Studio. Es todo lo que quiero saber, antes que nada, crear botones y redimensionar formulario como quiera. Saludos. Edito:Lo que he hecho. De este código que viene predeterminado. HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
De los 0 le puse 300 ya que quiero 300 x 300 y no funciona. HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 300, CW_USEDEFAULT, 300, nullptr, nullptr, hInstance, nullptr);
Tuve que cambiar el orden del CW_USEDEFAULT y 300 como indica abajo y por fin funciona la redimensión. HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, nullptr, nullptr, hInstance, nullptr);
Por fin funciona esa parte. La otra parte de los botones no.
|
|
« Última modificación: 8 Abril 2018, 22:10 pm por Meta »
|
En línea
|
|
|
|
srWhiteSkull
|
Si has leído y no has revisado el código y ves normal que una función retorne impidiendo que parte del código repetido no se ejecute, donde se incluye la función de redimensionar y posicionar, entonces no hay mucho que hacer... a lo mejor en otra vida puede que te des cuenta
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
botones de (alta,baja, modificacio) para un formulario con datagrid
Ejercicios
|
kanaka
|
1
|
6,647
|
6 Noviembre 2004, 23:19 pm
por soplo
|
|
|
ayuda VB 6: Redibujar botones del formulario al maximizar.
Programación Visual Basic
|
jimmy_jazz
|
8
|
8,130
|
14 Enero 2007, 16:18 pm
por ~~
|
|
|
como añadir un fondo de escritorio a un formulario en java
Java
|
inforelectro
|
1
|
4,869
|
2 Agosto 2008, 00:00 am
por ~~
|
|
|
Definir estilo css a botones de formulario
Desarrollo Web
|
estebanjd
|
2
|
3,964
|
5 Noviembre 2011, 19:29 pm
por estebanjd
|
|
|
Como hacer que al oprimir botones del teclado se opriman botones especificos
.NET (C#, VB.NET, ASP)
|
hassuni
|
3
|
4,138
|
9 Diciembre 2012, 16:47 pm
por Keyen Night
|
|