Download source files - 7 Kb
Download demo project - 28 Kb

Introduction
Now you can use Norm Almond's excellent CLabel class in your ATL/WTL projects.
The Class is still called CLabeland it retains a majority of the original code.
Just follow these simple instructions.
- Create a WTL Project
- Design the dialog and add the Static Controls
- Add the ATLLabel.h header file to your project
- Any static controls that need enhancing, give each control a unique ID within the dialog editor.
- Assign a
CLabel to each static control.
- Subclass each member controls (CLabel) to each ID using the
SubclassWindow method.
- In
OnInitDialog uses the CLabelmethods to change the appearance of the control.
CLabel m_ctlGradient;
m_ctlGradient.SubclassWindow(GetDlgItem(IDC_GRADIENT));
m_ctlGradient.SetBkColor(RGB(255,255,255),RGB(0,0,255), CLabel::Gradient);
See Norm Almond's original CLabel article for more details.
http://www.codeproject.com/staticctrl/clabel.asp
| You must Sign In to use this message board. |
|
| | Msgs 1 to 7 of 7 (Total in Forum: 7) (Refresh) | FirstPrevNext |
|
 |
|
|
 |
|
 |
Oups forgot to install WTL. Got it from (http://www.codeproject.com/wtl/WTL4MFC1.asp)
Why are you still using CWindow in the class is this not supposed to be ATL only? (I'm new to ATL sorry for the stupid questions ) Chris
|
| Sign In·View Thread·PermaLink | |
|
|
|
 |
|
|
 |
|
|
 |
|
 |
Rashid:
Great job on the port! You've saved me a LOT of time! 
One suggestion. This Label control will not work correctly if you create it, rather than Subclassing it in a dialog. (I happen to need to create it from scratch in a CWindow.)
Anyway, I've modified your code somewhat to enable that functionality, here are the relevant parts:
First of all, I think you need this in the very front of the class:
DECLARE_WND_SUPERCLASS("WTLStatic", CStatic::GetWndClassName())
Second, I modified your message map as follows:
BEGIN_MSG_MAP_EX(CLabel) MESSAGE_HANDLER(WM_PAINT, OnPaint) MESSAGE_HANDLER(WM_TIMER, OnTimer) MESSAGE_HANDLER(WM_SYSCOLORCHANGE, OnSysColorChange) MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown) MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor) MSG_WM_CREATE(OnCreate) MSG_WM_ERASEBKGND(OnEraseBkgnd) END_MSG_MAP()
This uses the WTL message crackers (note the last two messages). The corresponding functions are:
//======================================================================= // Function name : OnCreate // Description : Called when this label is created, rather than subclassed // Return type : LRESULT // Argument : CREATESTRUCT. Not used. //======================================================================= LRESULT OnCreate(LPCREATESTRUCT) { this->Init(); SetMsgHandled(FALSE); return 0; }
//======================================================================= // Function name : OnEraseBkgnd // Description : Called when the system tried to erase background. Not doing anything here // eliminates flicker when resizing or moving // Return type : LRESULT // Argument : HDC to use. Not used. //======================================================================= LRESULT OnEraseBkgnd(HDC) { return 0; // do nothing here! }
Sorry for the poor formatting, I think this message box isn't very conducive to entering code.
Finally, the Init function has to be modified as follows:
if((lstrcmpi(lpszBuffer, CStatic::GetWndClassName()) == 0) || (lstrcmpi(lpszBuffer, "WTLStatic") == 0))
notice the addition of this WTLStatic check, instead of only the static.
Oh, and the font handling has to be changed a bit, like this:
if(font.m_hFont != NULL) { font.GetLogFont(&m_lf); m_hFont = ::CreateFontIndirect(&m_lf); } else { font.CreatePointFont(100, "Tahoma"); font.GetLogFont(&m_lf); m_hFont = font.m_hFont; }
I used Tahoma as default here, because I was too lazy to remember how to get the default system font. Substitute whatever in there....
Anyway, hope this helps someone who's in the same pickle as I was.
Thanks again for the good work! -- Eugene
---------------------------------------- ----I said my name wasn't important ---------------------------SlartiBartFast
|
| Sign In·View Thread·PermaLink | 4.00/5 (3 votes) |
|
|
|
 |
|
|
 |
|
 |
I want to use CLabel in SmartPhone, I think something need to change, SmartPhone 2002 support ATL/WTL.
Thanks.
|
| Sign In·View Thread·PermaLink | |
|
|
|
 |
|
|
General
News
Question
Answer
Joke
Rant
Admin