Ver Mensaje Individual
  #3  
Antiguo 10-04-2018
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 454
Reputación: 21
REHome Va por buen camino
Buenas:

He hecho partes siguiendo tus consejos más lo que he encontrado por internet. Al menos ya me crea los botones y un label. He empezado todo otra vez.


Lo que me falta es añadir comandos, tanto como escribir mensajes en dicho label que es un STATIC, no EDIT que también funciona.

Cita:
Si pulso un botón Abrir, lo que hace es esto.
Mensaje = Abriendo...
// Está abriendo la bandeja del lector.
mciSendString("set CDAudio door open", rt, 127, IntPtr::Zero);
Mensaje = Abierto.
// Cuando ya abrió del todo la bandeja.
Antes que nada hay que configurar.




Código completo hasta ahora es este. Muestra los botones pero no se mostrar los mensajes que dije arriba ni abrir ni cerrar l abandeja del lector.
Código:
#include "stdafx.h"
#include "Bandeja_Form_Win32_cpp.h"
#include "mmsystem.h" // No olvidar.

#define MAX_LOADSTRING 100
#define IDC_BUTTON_1 201 // No olvidar.
#define IDC_BUTTON_2 202 // No olvidar.
#define IDC_STATIC_1 303 // No olvidar.

// 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_BANDEJAFORMWIN32CPP, 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_BANDEJAFORMWIN32CPP));

    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_BANDEJAFORMWIN32CPP));
    wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_BANDEJAFORMWIN32CPP);
    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

   // ################################################################### Begin.
   // Redimensionar formulario a 300 x 300.
   HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, nullptr, nullptr, hInstance, nullptr);
   // #################################################################### End.

   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)
    {
		// ################################################################### Begin.
		// Crear botones Abrir y Cerrar.
	case WM_CREATE:
	{
		HWND btnOK = CreateWindowW(
			L"BUTTON",		// Clase del control.
			L"Abrir",		// Etiqueta del botón.
			WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, // Estilo del control. La clase button puede ser checkbox, radio, etc.
			45, 135,		// Posición respecto del client area del parent.
			75, 23,			// Dimensiones del control.
			hWnd,			// --> Este es el handle de la ventana principal.
			(HMENU)201,		// Este es el identificador del control. De modo predefinido 1 = IDOK, 2 = IDCANCEL
			hInst,
			nullptr);

		HWND btnOK2 = CreateWindowW(
			L"BUTTON",		// Clase del control.
			L"Cerrar",		// Etiqueta del botón.
			WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, // Estilo del control. La clase button puede ser checkbox, radio, etc.
			165, 135,		// Posición respecto del client area del parent.
			75, 23,			// Dimensiones del control.
			hWnd,			// --> Este es el handle de la ventana principal.
			(HMENU)202,		// Este es el identificador del control. De modo predefinido 1 = IDOK, 2 = IDCANCEL
			hInst,
			nullptr);

		// Label o etiqueta.
		HWND edit = CreateWindowW(
			L"STATIC",		// Clase del control.
			L"Hola.",		// Etiqueta del botón.
			WS_CHILD | SS_SIMPLE | WS_VISIBLE, // Estilo del control. La clase button puede ser checkbox, radio, etc.
			125, 55,		// Posición respecto del client area del parent.
			75, 23,			// Dimensiones del control.
			hWnd,			// --> Este es el handle de la ventana principal.
			(HMENU)303,		// Este es el identificador del control. De modo predefinido 1 = IDOK, 2 = IDCANCEL
			hInst,
			nullptr);
	}

	break;
	// #################################################################### End.

    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // Analizar las selecciones de menú:
            switch (wmId)
            {
			// #################################################################### Begin.
			case IDC_BUTTON_1:
				// MessageBox(hWnd, L"Botón 1 pulsado", L"Ejemplo", MB_OK | MB_ICONINFORMATION);

				// He añadido una etiqueta IDC_STATIC_1 con el id 303.
				// Mostrar mensaje Abriendo... al IDC_STATIC_1. Que es un label que está en
				// el formulario. Se muestra en el momento cuando está abriendo la bandeja.

				// Aquí quiero añadir este comando para que abra la bandeja del lector.
				// mciSendString("set CDAudio door open", rt, 127, IntPtr::Zero);

				// Mostrar mensaje Abierto. Que es cuando ya finalizó.
				break;
			case IDC_BUTTON_2:
				// Aquí quiero añadir este comando para que abra la bandeja del lector.
				// mciSendString("set CDAudio door closed", rt, 127, IntPtr::Zero);

				// Lo mismo que arriba.
				break;
			// #################################################################### End.
            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;
}
Tengo instalado el CBuilder Started C++ con Delphi 10.2. Por supuesto que le hecharé un ojo.

Nadie quiere programar con Win32 o siempre tirando de la API de Windows, ajjajajajajajja.

Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita