Autor
|
Tema: [SOLUCIONADO] ¿Cómo añadir dos botones al formulario? (Leído 13,283 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 ![:rolleyes:](https://foro.elhacker.net/Smileys/navidad/rolleyes.gif)
|
|
|
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. ![;)](https://foro.elhacker.net/Smileys/navidad/wink.gif) ![](https://www.subeimagenes.com/img/captura-1852378.PNG) 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,698
|
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,248
|
14 Enero 2007, 16:18 pm
por ~~
|
|
|
como añadir un fondo de escritorio a un formulario en java
Java
|
inforelectro
|
1
|
4,958
|
2 Agosto 2008, 00:00 am
por ~~
|
|
|
Definir estilo css a botones de formulario
Desarrollo Web
|
estebanjd
|
2
|
4,131
|
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,286
|
9 Diciembre 2012, 16:47 pm
por Keyen Night
|
|