2009-05-15 20 views
7

He creado una caja de edición como:¿Cómo podemos alinear verticalmente el texto en el cuadro de edición?

m_EditWnd.Create(m_hWnd, rect, NULL, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | 
            WS_OVERLAPPED | WS_VISIBLE, 
       WS_EX_CLIENTEDGE | WS_EX_LEFT | WS_EX_LTRREADING); 

Hay un estilo para la alineación horizontal ES_CENTER para la alineación horizontal del texto, pero puede que alinear el texto centrado verticalmente?

Respuesta

0

no es posible hasta donde yo sé. Pero puedes implementar tu propio control para hacerlo posible.

Eche un vistazo a this article.

Espero que ayude.

Por cierto, este es el tipo de pregunta que vale la pena hacer antes de publicar en Google. Puedes encontrar muchas cosas de este tipo en la web.

+6

En realidad, haciendo preguntas Google-able es muy aconsejable. Queremos que StackOverflow se convierta en una reposición amplia y profunda de todo el conocimiento de programación, una "Wikipedia" de programación. –

+0

No he dicho que no pueda publicar su pregunta en esta página. Incluso creo que le di una buena pista para resolver su problema. Pero realmente creo que no tiene sentido hacer una pregunta que ya ha sido respondida cientos de veces antes. No me importa la reputación ... Acabo de leer este sitio porque lo disfruto y me ayuda a mejorar mi conocimiento. Pero realmente creo que no merezco un voto negativo aquí. –

+0

Escuche StackOverflow podcat # 53, Jeff y Joel responden a preguntas de los oyentes sobre preguntas básicas y fáciles de realizar al decir que queremos TODAS las preguntas para que podamos desarrollar un conjunto de conocimientos útiles desde los conceptos básicos hasta el tema experto. –

6

Aquí es una clase que hereda CEdit y permite la alineación vertical

/// HEADER ////////////////////////////////////////// 

class CEditVC : public CEdit 
{ 
public: 
    CEditVC(); 

protected: 
    CRect m_rectNCBottom; 
    CRect m_rectNCTop; 

public: 
    virtual ~CEditVC(); 

protected: 
    afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp); 
    afx_msg void OnNcPaint(); 
    afx_msg UINT OnGetDlgCode(); 

    DECLARE_MESSAGE_MAP() 
}; 

/// IMPLEMENTATION ///////////////////////////////////////// 

CEditVC::CEditVC() 
    : m_rectNCBottom(0, 0, 0, 0) 
    , m_rectNCTop(0, 0, 0, 0) 
{ 
} 

CEditVC::~CEditVC() 
{ 
} 

BEGIN_MESSAGE_MAP(CEditVC, CEdit) 
    ON_WM_NCCALCSIZE() 
    ON_WM_NCPAINT() 
    ON_WM_GETDLGCODE() 
END_MESSAGE_MAP() 

void CEditVC::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) 
{ 
    CRect rectWnd, rectClient; 

    //calculate client area height needed for a font 
    CFont *pFont = GetFont(); 
    CRect rectText; 
    rectText.SetRectEmpty(); 

    CDC *pDC = GetDC(); 

    CFont *pOld = pDC->SelectObject(pFont); 
    pDC->DrawText("Ky", rectText, DT_CALCRECT | DT_LEFT); 
    UINT uiVClientHeight = rectText.Height(); 

    pDC->SelectObject(pOld); 
    ReleaseDC(pDC); 

    //calculate NC area to center text. 

    GetClientRect(rectClient); 
    GetWindowRect(rectWnd); 

    ClientToScreen(rectClient); 

    UINT uiCenterOffset = (rectClient.Height() - uiVClientHeight)/2; 
    UINT uiCY = (rectWnd.Height() - rectClient.Height())/2; 
    UINT uiCX = (rectWnd.Width() - rectClient.Width())/2; 

    rectWnd.OffsetRect(-rectWnd.left, -rectWnd.top); 
    m_rectNCTop = rectWnd; 

    m_rectNCTop.DeflateRect(uiCX, uiCY, uiCX, uiCenterOffset + uiVClientHeight + uiCY); 

    m_rectNCBottom = rectWnd; 

    m_rectNCBottom.DeflateRect(uiCX, uiCenterOffset + uiVClientHeight + uiCY, uiCX, uiCY); 

    lpncsp->rgrc[0].top +=uiCenterOffset; 
    lpncsp->rgrc[0].bottom -= uiCenterOffset; 

    lpncsp->rgrc[0].left +=uiCX; 
    lpncsp->rgrc[0].right -= uiCY; 

} 

void CEditVC::OnNcPaint() 
{ 
    Default(); 

    CWindowDC dc(this); 
    CBrush Brush(GetSysColor(COLOR_WINDOW)); 

    dc.FillRect(m_rectNCBottom, &Brush); 
    dc.FillRect(m_rectNCTop, &Brush); 
} 

UINT CEditVC::OnGetDlgCode() 
{ 
    if(m_rectNCTop.IsRectEmpty()) 
    { 
     SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOMOVE | SWP_FRAMECHANGED); 
    } 

    return CEdit::OnGetDlgCode(); 
} 
Cuestiones relacionadas