I forgot to select the write font into the dc before calling GetTextExtent.
AliR.
Oops the attachements didn't get attached.
/////////////////////////////////////////////////////////////
//AutoWidthButton.h
#pragma once
// CAutoWidthButton
class CAutoWidthButton : public CButton
{
DECLARE_DYNAMIC(CAutoWidthButton)
public:
CAutoWidthButton();
virtual ~CAutoWidthButton();
protected:
afx_msg LRESULT OnSetText(WPARAM wParam,LPARAM lParam);
DECLARE_MESSAGE_MAP()
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void PreSubclassWindow();
private:
void ResizeButton();
};
/////////////////////////////////////////////////////////////
// AutoWidthButton.cpp : implementation file
//
#include "stdafx.h"
#include "DynamicButtonWidth.h"
#include "AutoWidthButton.h"
#include ".\autowidthbutton.h"
// CAutoWidthButton
IMPLEMENT_DYNAMIC(CAutoWidthButton, CButton)
CAutoWidthButton::CAutoWidthButton()
{
}
CAutoWidthButton::~CAutoWidthButton()
{
}
BEGIN_MESSAGE_MAP(CAutoWidthButton, CButton)
ON_MESSAGE(WM_SETTEXT,OnSetText)
END_MESSAGE_MAP()
// CAutoWidthButton message handlers
BOOL CAutoWidthButton::PreCreateWindow(CREATESTRUCT& cs)
{
if (CButton::PreCreateWindow(cs))
{
ResizeButton();
return TRUE;
}
return FALSE;
}
void CAutoWidthButton::PreSubclassWindow()
{
CButton::PreSubclassWindow();
ResizeButton();
}
LRESULT CAutoWidthButton::OnSetText(WPARAM wParam,LPARAM lParam)
{
LRESULT Result = Default();
ResizeButton();
return Result;
}
void CAutoWidthButton::ResizeButton()
{
CDC *pDC = GetDC();
CString Text;
GetWindowText(Text);
CRect Rect;
GetWindowRect(&Rect);
CSize Size = pDC->GetTextExtent(Text);
SetWindowPos(NULL,0,0,Size.cx +
10,Rect.Height(),SWP_NOMOVE|SWP_NOZORDER);
ReleaseDC(pDC);
}
AliR.
"AliR" <AliR@online.nospam> wrote in message
news:444e6f11$0$14896$a8266bb1@reader.corenews.com...
Try this
AliR.
"Eric Margheim" <NOSPAM***eric@prism-grp.com***NOSPAM> wrote in message
news:u$EUmbIaGHA.4292@TK2MSFTNGP04.phx.gbl...
I'd like to dynamically change the size of my CButton derived control
based
upon the text/bitmap size. So if the application calls