En que cabecera encuentro los #define ID_EJEMPLO de Windows.h?

Iniciado por @XSStringManolo, 12 Junio 2019, 05:19 AM

0 Miembros y 1 Visitante están viendo este tema.

@XSStringManolo

Es para ver el listado de todas las opciones posibles e ir probándolas. En el codeblocks no me salen.
En visual studio me imagino que los nombres de las cabeceras serán parecidos. A ver si alguien me puede mirar o sabe donde los puedo encontrar. Estoy mirando en Codeblocks\MinGW\Include

Encontré un ejemplo por google y lo estoy modificando para hacer mi programa mientras aprendo.
Para hacer la gui a mi gusto más o menos le he dado la forma que me gustaría a cada ventana. Le añadi 2 edit box y las hice multilinea y que el enter salte de linea usando las flags correspondientes. Despues puse 2 botones. Uno para enviar texto y otro para separar los 2 editbox. En el ejemplo venian las macros  de los ID_BUTTON e ID_EDIT definidos en el propio programa.

Ahora mismo lo que quiero hacer es substituir un EDIT por un control que muestre texto plano para mostrar el resultado del cifrado. Estoy usando provisionalmente otro EDIT mientras no encuentro los #define ID_LOQUESEA 111 para poder saber todas las opciones disponibles y elegir la que me convezca y la correcta para ello.
El mismo problema tengo con el boton que puse en el centro para hacer un separador entre los EDIT box para que quedase mejor. Si pudiese mirar los define buscaría algun borde adecuado para ello.

Después solo me faltaría buscar como obtener el input en un string para aplicarle el cifrado. Y como mostrar el string en el control adecuado. Esto aún no lo miré porque estoy intentando hacer lo anterior de substituir el boton y el editbox por un borde y un texto estatico o algo así.

Aquí dejo el código por si quereis compilarlo y ver la ventana para entender mejor lo que intento explicar.

Sé que no estoy usando los handlers correctamente para los botones y los edit box, de momento ni lo cambie. Lo puse de cualquier manera para ir probando y moldeando la ventana sin distraerme con otras cosas. Cuando acabe el programa repasare el código línea por línea dejándolo mejor formateado comentado, etc.

Código (cpp) [Seleccionar]
/*
Code::Blocs 17.12
Other Linker Settings:
-lmingw32 -mwindows
*/

#include <windows.h>

#define ID_EDIT 1
#define ID_BUTTON 2

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{

MSG msg;
WNDCLASSW wc = {0};
wc.lpszClassName = L"Edit control";
wc.hInstance = hInstance;
wc.hbrBackground = GetSysColorBrush(COLOR_3DDKSHADOW);
wc.lpfnWndProc = WndProc;
wc.hCursor = LoadCursor(0, IDC_ARROW);

RegisterClassW(&wc);
CreateWindowW(wc.lpszClassName, L"CIFRADO CESAR ASCII",
  WS_OVERLAPPEDWINDOW | WS_VISIBLE,
  250, 170, 430, 380, 0, 0 , hInstance, 0);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return (int) msg.wParam;

}


LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HWND hwndEdit;
HWND hwndButton;
HWND hwndButton2;

switch (msg)
{
case WM_CREATE:
{
    hwndEdit = CreateWindowW(L"Edit", L"Texto Cifrado.", WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_MULTILINE | ES_WANTRETURN,
10, 154, 404, 160, hwnd, (HMENU)ID_EDIT, NULL, NULL);

hwndEdit = CreateWindowW(L"Edit", L"Escribe aqui tu texto a cifrar.", WS_CHILD | WS_VISIBLE | WS_BORDER |
            ES_MULTILINE | ES_WANTRETURN,
10, 10, 404, 138, hwnd, (HMENU)ID_EDIT, NULL, NULL);

hwndButton = CreateWindowW(L"button", L"ENTER", WS_VISIBLE | WS_CHILD,
335, 320, 80, 25, hwnd, (HMENU)ID_BUTTON, NULL, NULL);

            hwndButton2 = CreateWindowW(L"button", NULL, WS_VISIBLE | WS_CHILD,
11, 150, 403, 3, hwnd, (HMENU)ID_BUTTON, NULL, NULL);
} break;


case WM_COMMAND:
{
if (HIWORD(wParam) == BN_CLICKED)
{
int len = GetWindowTextLengthW(hwndEdit) + 1;
wchar_t text[len];

GetWindowTextW(hwndEdit, text, len);
SetWindowTextW(hwnd, text);
}
} break;

case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
}
return DefWindowProcW(hwnd, msg, wParam, lParam);
}

RayR

Creo que tienes una confusión. Estos #defines:

Código (cpp) [Seleccionar]
#define ID_EDIT 1
#define ID_BUTTON 2


no los vas a encontrar en ninguna cabecera. Esos los pone el programador, y sirven para identificar a cada control individual, no el tipo de control. Esto es un error:

Código (cpp) [Seleccionar]
hwndButton = CreateWindowW(L"button", L"ENTER", WS_VISIBLE | WS_CHILD, 335, 320, 80, 25, hwnd, (HMENU)ID_BUTTON, NULL, NULL);

hwndButton2 = CreateWindowW(L"button", NULL, WS_VISIBLE | WS_CHILD, 11, 150, 403, 3, hwnd, (HMENU)ID_BUTTON, NULL, NULL);


Porque estás creando dos botones, y a ambos les pones el mismo identificador (ID_BUTTON). No vas a tener forma de distinguirlos al procesar sus mensajes. Debes hacer algo tipo:
Código (cpp) [Seleccionar]
#define ID_EDIT1 1
#define ID_EDIT2 2
#define ID_BUTTON1 3
#define ID_BUTTON2 4


O podrías poner nombres más significativos (ID_BUTTON_SALIR, etc.), y asignarles el valor que quieras, pero debe ser único para cada control. Al crear cada control, a CreateWindow le pasas el valor correspondiente. Lo que determina el tipo de control es el primer parámetro que le pasas a esta función ("Edit", "Button", etc.). Esos son los que debes buscar, pero no en una cabecera sino en la documentación. Por ejemplo, aquí tienes la de los Button: https://docs.microsoft.com/en-us/windows/desktop/controls/buttons y a la izquierda tienes un listado con otros. El nombre de la clase para pasar a CreateWindow suele ser el del control: "Button", "Edit", etc., o también puedes pasar una constante que identifica la clase del control: https://docs.microsoft.com/en-us/windows/desktop/controls/common-control-window-classes . Y fíjate que algunos tipos de controles en realidad son "subtipos" de un mismo control. Como en el link de Button que te puse; hay una sección "Button types" donde puedes ver que, por ejemplo, el checkbox es en realidad un Button con el estilo BS_CHECKBOX o BS_AUTOCHECKBOX.

@XSStringManolo

Sí, ya vi que lo que preguntaba no tenía mucho sentido. Disculpas. Ya encontré lo que buscaba acerca de eso y avance un poco el programa.
Prepararé el nuevo código para subirlo ya que me surjen varios problemas.

Lo que me comentas de los botones ya lo sabía, pero no conocia el control static que era el que iba a usar en lugar del button.

Uilizo los diversos handlers para trabajar con las ventanas. No creo que necesite diferenciar los controles quw eatoy usando de momento. Ya lo pondré todo correcto. Muchas gracias!

En el nuevo código entre otras cosas tengo problemas para hacer un cast de un string que sé que solo tiene numeros a un int. U obtener directamente los numeros introducidos en el control edit como ints en vez de como texto. En un rato subo el código en un nuevo hilo, ya que los problemas son distintos.