Hier ist eine Klasse, die ist sehr ermutigt CEdit und ermöglicht die vertikale Ausrichtung
/// 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();
}
Eigentlich fragen Google-able Fragen erbt. Wir möchten, dass StackOverflow zu einer breiten und tiefen Sammlung von Programmierkenntnissen wird, einer "Wikipedia" der Programmierung. –
Ich habe nicht gesagt, dass er seine Frage nicht auf dieser Seite veröffentlichen kann. Sogar ich denke, ich gab ihm einen guten Hinweis, um sein Problem zu lösen. Aber ich glaube wirklich, dass es keinen Sinn hat, nach einer Frage zu fragen, die schon hundert Mal beantwortet wurde. Ich interessiere mich nicht für den Ruf ... Ich lese gerade diese Seite, weil ich es genieße und mir helfen, mein Wissen zu verbessern. Aber ich glaube wirklich, dass ich hier keine negative Stimme verdiene. –
Hören Sie StackOverflow Podcat # 53, beantworten Jeff und Joel ein Listener-Frage über einfache und leicht zu durchsuchende Fragen, indem wir sagen, dass wir ALLE Fragen wollen, damit wir ein nützliches Wissen von den Grundlagen bis zum Experten Thema entwickeln können. –