tamaño salir pantalla mas letras lenguaje las hacer grande fuente dev consola completa como color cambiar aumentar c++ mfc resize cbutton

salir - El botón C++ MFC desaparece al cambiar el tamaño de la ventana



como salir de pantalla completa en dev c++ (2)

Tengo un cuadro de diálogo en MFC C ++ que tiene un CButton adjunto. Quiero modificar OnSize () para que el botón se anclará a la esquina inferior izquierda.

if (btn.m_hWnd) { CRect winRect; GetWindowRect(&winRect); int width = winRect.right - winRect.left; int height = winRect.bottom - winRect.top; int x = width - wndWidth; int y = height - wndHeight; CRect rect; btn.GetWindowRect(&rect); rect.left += x; rect.top += y; btn.MoveWindow(&rect); ScreenToClient(&rect); btn.ShowWindow(SW_SHOW); }

xey son la diferencia de cuánto ha cambiado la ventana y se agregarán a las coordenadas de inicio del botón.

No estoy seguro de los últimos 2 comandos (también podría borrarlos) pero luego ejecuto el programa, el botón desaparece.

Necesito saber una forma de mover el botón por xey.


Básicamente, la respuesta debería ser hacer ScreenToClient antes de MoveWindow!

Más detalles: debe familiarizarse con la función que devuelve o utiliza las coordenadas del cliente (y en relación con las coordenadas de estos clientes) y qué coordenadas de pantalla; esta es una de las partes de MFC que puede ser realmente confusa. En cuanto a tu pregunta:

CWnd :: GetWindowRect devuelve coordenadas de pantalla; CWnd :: MoveWindow espera coordenadas relativas al CWnd padre (o a la pantalla si es una ventana de nivel superior). Entonces, antes de llamar a MoveWindow, debe convertir el rect devuelto por GetWindowRect a las coordenadas del cliente de su ventana principal; supongamos que pParent es CWnd * en la ventana primaria de btn , luego su código de movimiento debería verse así:

CRect rect; btn.GetWindowRect(&rect); pParent->ScreenToClient(&rect); // this line and it''s position is important rect.left += x; rect.top += y; btn.MoveWindow(&rect);

Si está en un método de la ventana principal (como creo que es, ya que menciona OnSize del diálogo), simplemente pParent-> el pParent-> . ¡De la forma en que lo hace con ScreenToClient en este momento, no tiene efecto en MoveWindow, ya que se ejecuta después de él!


El código original estaba utilizando el sistema de coordenadas incorrecto tanto para el cuadro de diálogo principal como para el botón.

Una forma correcta de atracar en la parte inferior izquierda sería así:

if (btn.m_hWnd) { CRect winRect; GetClientRect(&winRect); CRect rect; btn.GetWindowRect(&rect); ScreenToClient(&rect); int btnWidth = rect.Width(); int btnHeight = rect.Width(); rect.left = winRect.right-btnWidth; rect.top = winRect.bottom-btnHeight; rect.right = winRect.right; rect.bottom = winRect.bottom; btn.MoveWindow(&rect); }

O

if (btn.m_hWnd) { CRect winRect; GetClientRect(&winRect); CRect rect; btn.GetWindowRect(&rect); ScreenToClient(&rect); int btnWidth = rect.Width(); int btnHeight = rect.Width(); btn.SetWindowPos(NULL,winRect.right-btnWidth,winRect.bottom-btnHeight,0,0,SWP_NOSIZE|SWP_NOZORDER); }