यहां कक्षा कि CEdit विरासत और ऊर्ध्वाधर संरेखण गूगल करने योग्य सवाल पूछ अत्यधिक प्रोत्साहित किया जाता अनुमति देता है
/// 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();
}
स्रोत
2009-05-15 12:10:42
वास्तव में, है। हम चाहते हैं कि स्टैक ओवरफ्लो प्रोग्रामिंग के "विकिपीडिया" के सभी प्रोग्रामिंग ज्ञान की व्यापक और गहरी रिपोजिटरी बन जाए। –
मैंने नहीं कहा है कि वह इस पृष्ठ में अपना प्रश्न पोस्ट नहीं कर सकता है। यहां तक कि मुझे लगता है कि मैंने उसे अपनी समस्या का समाधान करने के लिए एक अच्छा संकेत दिया है। लेकिन मुझे सच में लगता है कि एक प्रश्न पूछने में कोई बात नहीं है जो पहले से ही सौ बार जवाब दे चुका है। मुझे प्रतिष्ठा की परवाह नहीं है ... मैंने बस इस साइट को पढ़ा क्योंकि मैं इसका आनंद लेता हूं और अपना ज्ञान सुधारने में मेरी सहायता करता हूं। लेकिन मुझे सच में लगता है कि मैं यहां एक नकारात्मक वोट के लायक नहीं हूं। –
स्टैक ओवरव्लो पॉडकैट # 53 को सुनें, जेफ और जोएल एक श्रोता क्यूसेटियन का जवाब देते हैं कि हम सभी प्रश्न पूछना चाहते हैं, इसलिए हम मूल प्रश्नों से विशेषज्ञ विषय वस्तु तक ज्ञान का एक उपयोगी शरीर विकसित कर सकते हैं। –