3D look edit box in tool bar
Dong Chen -- d_chen@ix.netcom.com
Wednesday, January 15, 1997
Environment: VC++ 4.2b, Win95, WinNT 4.0
I have a MDI application where I have a tool bar using the CToolBar derived
class. I am trying to put several buttons and an edit box on it. Everything
works except that I can't get the 3D look of the edit box. If I replace the
edit box with a combo box, the 3D look is there. Although I can make the
height of combo box to only one row to simulate the edit box, I don't think
this is the right way to it. Besides, I like to set the edit box as
read-only somethimes.
Here is my code segment.
class CMainToolBar : public CToolBar
{
//......
CEdit m_editSelected;
afx_msg int OnCreate (LPCREATESTRUCT);
DECLARE_MESSAGE_MAP ()
}
int CMainToolBar::OnCreate (LPCREATESTRUCT lpcs)
{
//......
if (CToolBar::OnCreate (lpcs) == -1)
return -1;
//......
if( !LoadBitmap(IDB_MAINBTNS) )
return -1;
// nMainButtons is an array holds the IDs, in position 13 is a ID_SEPARATOR
SetButtons(nMainButtons, sizeof(nMainButtons)/sizeof(UINT));
//...
// cxChar is the average width determined for a single character
CRect rect;
SetButtonInfo(13, IDC_EDIT_SELECTED, TBBS_SEPARATOR, cxChar*15);
GetItemRect (13, &rect);
if (!m_editSelected.Create (WS_CHILD | WS_VISIBLE | WS_BORDER,
rect, this, IDC_EDIT_SELECTED));
}
class CMainFrame : public CMDIFrameWnd
{
//......
CMainToolBar m_wndMainToolBar;
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//......
// create the mainframe toolbar
if (!m_wndMainToolBar.Create (this, WS_CHILD | WS_VISIBLE | CBRS_TOP |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
return -1;
}
Thanks.
--
Dong
d_chen@ix.netcom.com
Greg D. Tighe -- gdt@eng.aisinc.com
Friday, January 17, 1997
[Mini-digest: 4 responses]
>
> Environment: VC++ 4.2b, Win95, WinNT 4.0
>
> I have a MDI application where I have a tool bar using the CToolBar derived
> class. I am trying to put several buttons and an edit box on it. Everything
> works except that I can't get the 3D look of the edit box
-----From: "Virendra, Prasad"
In CMainToolBar, add message map OnCtlColor() for WM_CTLCOLOR.
Inside OnCtlColor, Draw a 3D frame for edit controls.
HBRUSH CMainToolBar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CToolBar::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if (nCtlColor==CTLCOLOR_EDIT)
{
CRect rect;
pWnd.GetWindowRect(&rect);
ScreenClient(&Rect);
rect.InflateRect(1,1);
DrawFrame3D(&rect);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
void CMainToolbar::DrawFrame3D(const CRect *pRect)
{
CDC *pDC=GetDC();
pDC->PatBlt(pRect->left,pRect->top,pRect->right-pRect->left,1,BLACKNESS);
pDC->PatBlt(pRect->left,pRect->top,1,pRect->bottom-pRect->top,BLACKNESS);
pDC->PatBlt(pRect->left,pRect->bottom,pRect->right-pRect->left,1,WHITENES
S);
pDC->PatBlt(pRect->right,pRect->top,1,pRect->bottom-pRect->top,WHITENESS)
;
ReleaseDC(pDC);
}
--Viren
___ _______
__ | / /___(_)_____________ _______
__ | / / __ / __ ___/_ _ \__ __ \
__ |/ / _ / _ / / __/_ / / /
_____/ /_/ /_/ \___/ /_/ /_/
Virendra Prasad
GE Fanuc Automation North America, Inc.
1 Columbia Circle,
Albany, New York-12203-5189.
Phone: (518) 464-4573/ 8*687-4573
Fax: (518) 464-4613 / 8*687-4613
----------
From: owner-mfc-l[SMTP:owner-mfc-l@majordomo.netcom.com]
Sent: Wednesday, January 15, 1997 7:45 PM
To: mfc-l
Subject: 3D look edit box in tool bar
Environment: VC++ 4.2b, Win95, WinNT 4.0
I have a MDI application where I have a tool bar using the CToolBar
derived
class. I am trying to put several buttons and an edit box on it.
Everything
works except that I can't get the 3D look of the edit box. If I replace
the
edit box with a combo box, the 3D look is there. Although I can make the
height of combo box to only one row to simulate the edit box, I don't
think
this is the right way to it. Besides, I like to set the edit box as
read-only somethimes.
Here is my code segment.
class CMainToolBar : public CToolBar
{
//......
CEdit m_editSelected;
afx_msg int OnCreate (LPCREATESTRUCT);
DECLARE_MESSAGE_MAP ()
}
int CMainToolBar::OnCreate (LPCREATESTRUCT lpcs)
{
//......
if (CToolBar::OnCreate (lpcs) == -1)
return -1;
//......
if( !LoadBitmap(IDB_MAINBTNS) )
return -1;
// nMainButtons is an array holds the IDs, in position 13 is a
ID_SEPARATOR
SetButtons(nMainButtons, sizeof(nMainButtons)/sizeof(UINT));
//...
// cxChar is the average width determined for a single character
CRect rect;
SetButtonInfo(13, IDC_EDIT_SELECTED, TBBS_SEPARATOR, cxChar*15);
GetItemRect (13, &rect);
if (!m_editSelected.Create (WS_CHILD | WS_VISIBLE | WS_BORDER,
rect, this, IDC_EDIT_SELECTED));
}
class CMainFrame : public CMDIFrameWnd
{
//......
CMainToolBar m_wndMainToolBar;
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//......
// create the mainframe toolbar
if (!m_wndMainToolBar.Create (this, WS_CHILD | WS_VISIBLE | CBRS_TOP |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
return -1;
}
Thanks.
--
Dong
d_chen@ix.netcom.com
-----From: Rob Mensching
At 07:45 PM 1/15/97 -0600, you wrote:
>Environment: VC++ 4.2b, Win95, WinNT 4.0
>
>I have a MDI application where I have a tool bar using the CToolBar derived
>class. I am trying to put several buttons and an edit box on it. Everything
>works except that I can't get the 3D look of the edit box. If I replace the
--< snip >---
>Here is my code segment.
--< snip >---
>int CMainToolBar::OnCreate (LPCREATESTRUCT lpcs)
>{
> //......
> if (CToolBar::OnCreate (lpcs) == -1)
> return -1;
> //......
> if( !LoadBitmap(IDB_MAINBTNS) )
> return -1;
> // nMainButtons is an array holds the IDs, in position 13 is a ID_SEPARATOR
> SetButtons(nMainButtons, sizeof(nMainButtons)/sizeof(UINT));
> //...
> // cxChar is the average width determined for a single character
> CRect rect;
> SetButtonInfo(13, IDC_EDIT_SELECTED, TBBS_SEPARATOR, cxChar*15);
> GetItemRect (13, &rect);
>
> if (!m_editSelected.Create (WS_CHILD | WS_VISIBLE | WS_BORDER,
> rect, this, IDC_EDIT_SELECTED));
...Right here is your problem. To create a 3D-CEdit control you have to use
.CreateEx() with the WS_EX_CLIENTEDGE (I believe that's the flag). Look up
.CreateEx() in the on-line help to be sure about the syntax.
...Also, Microsoft's Knowledge Base online has an article that shows you
EXACTLY what you want. You can do a search for "3D" and come up with it I
believe.
l8r,
Rob Mensching
.- - - - - - - - - - - - - - - - - - - - - -.
.- -' _/_/_/_/_/ _/_/_/ _/_/_/_/ _/_/_/_/_/ ` - - - - - - - -.
| _/ _/ _/ _/ _/ _/_/_/_/ _/ _/ |
| _/ _/ _/_/_/ _/ _/ _/ _/ |
| _/ _/ _/ _/ _/_/_/ _/_/ |
| _/ _/ _/ _/ _/ _/ _/ _/ |
| _/_/_/_/_/ _/_/_/ _/_/_/_/ _/ _/_/_/_/ _/ _/ |
`- -. _ .- - - - - - - - - - - - -._.- - - - -. E n t e r p r i s e .'
| Rob "IceMan" Mensching `.ICETek R&D`- - - - - -. _ .- -'
| iceman@umr.edu `. Suite 569, TJ Hall |
`. Computer Science Undergrad `. Rolla, MO 65401 |
`. University of Missouri - Rolla`. (573) 341-9589 |
`- - - - - - - - - - - - - - - -'`- - - - - - - - -'
-----From: Roger Onslow/Newcastle/Computer Systems Australia/AU
>I have a MDI application where I have a tool bar using the CToolBar derived
>class. I am trying to put several buttons and an edit box on it. Everything
>works except that I can't get the 3D look of the edit box. If I replace the
>edit box with a combo box, the 3D look is there. Although I can make the
>height of combo box to only one row to simulate the edit box, I don't think
>this is the right way to it. Besides, I like to set the edit box as
>read-only somethimes.
[snip]
I had a similar requirement - however, I decided on a combo box instead (not
because of 3D) because it allowed me to keep a history of last-n entries so the
user could pick a recently used entry and do it agin without re-typing. Of
course ,you can always disable the Combo box so the user cannot eter into it
(similar to making edit box read-only). I thikn you may find that this sort of
interface works as well as if not better than just a bare entry box. It is
faily easy to have a Combo box which automatically maintains a history buffer
(removing duplicates if you like, or maybe sorting alphabetically or by MRU)
Hope this helps
============================================================
Roger Onslow
Software Development Manager - Quisine Division
Computer Systems Australia
------------------------------------------------------------
Ph: +61 49 675266
Fax: +61 49 675554
Personal mailto:Roger_Onslow@compsys.com.au
Quisine info mailto:Quisine@compsys.com.au
Visit us at http://www.compsys.com.au/Quisine.html
============================================================
Quisine - Designing for the Future
============================================================
Dulepov Dmitry -- dima@ssm6000.samsung.ru
Monday, January 20, 1997
[Mini-digest: 2 responses]
[Mailer: "Groupware E-Mail". Version 1.02.055]
> [From: Dong Chen
>
>I have a MDI application where I have a tool bar using the CToolBar derived
>class. I am trying to put several buttons and an edit box on it. Everything
>works except that I can't get the 3D look of the edit box. If I replace the
>edit box with a combo box, the 3D look is there. Although I can make the
>height of combo box to only one row to simulate the edit box, I don't think
>this is the right way to it. Besides, I like to set the edit box as
>read-only somethimes.
>
>Here is my code segment.
>
Use WS_EX_CLIENTEDGE window style in your code. Replace
> if (!m_editSelected.Create (WS_CHILD | WS_VISIBLE | WS_BORDER,
> rect, this, IDC_EDIT_SELECTED));
with
if (!m_editSelected.Create (WS_CHILD | WS_VISIBLE | WS_BORDER | WS_EX_CLIENTEDGE,
rect, this, IDC_EDIT_SELECTED));
Dmitry A. Dulepov
Samsung Electronics Co., Ltd.
Russian Research Center
Phone: +7 (095) 213-9207
Fax: +7 (095) 213-9196
E-mail: dima@src.samsung.ru
====================================
-----From: PRosen
> if (!m_editSelected.Create (WS_CHILD | WS_VISIBLE | WS_BORDER,
> rect, this, IDC_EDIT_SELECTED));
I had a similiar problem which I fixed with the following:
if (!m_editSelected.CreateEx(WS_EX_OVERLAPPEDWINDOW, _T("EDIT"), NULL,
WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, rect.left, rect.top,
rect.Width(), rect.Height(), GetSafeHwnd(), HMENU(IDC_EDIT_SELECTED)))
| Вернуться в корень Архива
|