2009-05-15 56 views
7

Tôi đã tạo ra một editbox như:Làm cách nào để căn chỉnh theo chiều dọc văn bản trong hộp chỉnh sửa?

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); 

Có một phong cách cho sự liên kết ngang như ES_CENTER cho sự liên kết văn bản theo chiều ngang, nhưng chúng ta có thể sắp xếp văn bản theo chiều dọc làm trung tâm?

Trả lời

0

không thể thực hiện được như tôi biết. Nhưng bạn có thể thực hiện kiểm soát của riêng bạn để làm cho nó có thể.

Hãy xem this article.

Hy vọng điều đó sẽ hữu ích.

BTW, đây là loại câu hỏi mà nó xứng đáng với google trước khi đăng. Bạn có thể tìm thấy rất nhiều thứ như thế này trên web.

+6

Trên thực tế, đặt câu hỏi Google có thể được khuyến khích. Chúng tôi muốn StackOverflow trở thành một kho lưu trữ rộng và sâu của tất cả kiến ​​thức lập trình, một "Wikipedia" về lập trình. –

+0

Tôi chưa nói anh ấy không thể đăng câu hỏi của mình trong trang này. Thậm chí tôi nghĩ tôi đã cho anh ta một gợi ý tốt để giải quyết vấn đề của mình. Nhưng tôi thực sự nghĩ rằng không có vấn đề gì khi hỏi một câu hỏi đã được trả lời hàng trăm lần trước đó. Tôi không quan tâm đến danh tiếng ... Tôi chỉ đọc trang này vì tôi thích nó và giúp tôi cải thiện kiến ​​thức của mình. Nhưng tôi thực sự nghĩ rằng tôi không xứng đáng được bỏ phiếu tiêu cực ở đây. –

+0

Nghe StackOverflow podcat # 53, Jeff và Joel trả lời một câu hỏi về việc hỏi các câu hỏi cơ bản, dễ tìm kiếm bằng cách nói rằng chúng tôi muốn TẤT CẢ các câu hỏi để chúng tôi có thể phát triển một kiến ​​thức hữu ích từ những điều cơ bản đến vấn đề chuyên môn. –

6

Đây là một lớp kế thừa CEdit và cho phép liên kết dọc

/// 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(); 
} 
Các vấn đề liên quan