We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you a podcast all about Citrix Workspace, moving to the cloud, and analytics & intelligence. Episode 2 coming soon!Listen Now

x

SetWindowText or painting problem !

mike_marquet
mike_marquet asked
on
Medium Priority
669 Views
Last Modified: 2013-11-20
I have created a derived CEdit control who displays a tooltip control to show how much character can still be displayed to reach the GetLimitText value.

Therefore, I have created a tooltip from scratch using CreateWindow all is working fine until I wanted to set the background color of my tooltip
to an other color that the default STATIC color (gray).

Tooltip is created like this :

     m_hToolTipWnd = CreateWindowEx(0, "STATIC", "", WS_BORDER | WS_POPUP | SS_CENTER | SS_CENTERIMAGE, 0, 0, 10, 10, m_hWnd, NULL, hInstance, 0);

To change the background color, I have added :

     LONG nRet = SetWindowLong(m_hToolTipWnd, GWL_WNDPROC, (LONG)(LRESULT)ToolTipWndProc);

     LRESULT CALLBACK CEditWithLimitToolTip::ToolTipWndProc(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
      {
       switch(uiMsg)
        {
         case WM_ERASEBKGND :
                              {
                               CDC *pDC = CDC::FromHandle( (HDC)wParam );
                         
                               CRect rect;
                         
                               ::GetClientRect(hWnd, &rect);
                         
                               pDC->FillSolidRect(&rect, GetSysColor(COLOR_INFOBK));

                               return TRUE;
                              }
        }

       return ::DefWindowProc(hWnd, uiMsg, wParam, lParam);
      }

The background is correctly painted but the text is no more painted also if I call SetWindowText with a new string

P.S. : I have the same problem if I use RegisterClassEx and use the Atom value instead of "STATIC"
Comment
Watch Question

Freelance programmer / Consultant
CERTIFIED EXPERT
Commented:
This might be a silly question but why not use a 'normal' tooltip control with a callback for the text to be displayed?

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Author

Commented:
Because I want to set the position of the tooltip myself and not at the cursor position.
AndyAinscowFreelance programmer / Consultant
CERTIFIED EXPERT

Commented:
You could do that with the normal windows functions (MoveWindow or SetWindowPos)

Author

Commented:
If I use the CToolTipCtrl instead, I have the problem that the mouse pointer must be over the edit control for the tooltip to be displayed and the mouse pointer can NOT be over it. How can I force the CToolTipCtrl to be displayed without mouse pointer over edit control ?
mahesh1402IT Professional
Top Expert 2005
Commented:
>>Because I want to set the position of the tooltip myself and not at the cursor position.

Send a TTM_TRACKPOSITION message  which sets the coordinates of ToolTip ..

SendMessage (hwndTT, TTM_TRACKPOSITION, 0, (LPARAM) (DWORD) MAKELONG (X, Y)); // X & Y position of tooltip

For more see : Display ToolTip in any place on the screen : http://www.codeproject.com/miscctrl/tooltipzen.asp

-MAHESH

Author

Commented:
To mahesh1402 :

I have used the flag TTF_TRACK when creating the tooltip control but when I use the TTM_TRACKPOSITION message, the tooltip is always under the cursor postion and not at specified position.

I'm using Microsoft Visual Studio .NET 2003 and use the CToolTipCtrl MFC Class instead of the Win32 API functions.

Full code can be provided !
AndyAinscowFreelance programmer / Consultant
CERTIFIED EXPERT

Commented:
As a tooltip is a CWnd based window you can use the normal MoveWindow or SetWindowPos functions to try to position it where you want.

Author

Commented:
It's the same using MoveWindow or SetWindowPos.

Seems to be that the TTF_TRACK flag has no effect !
AndyAinscowFreelance programmer / Consultant
CERTIFIED EXPERT

Commented:
Do I understand correctly that you want the 'tip' to be displayed even when the mouse isn't over the edit box ?

Author

Commented:
Yes, the tip must be displayed ALSO when the mouse is not over the control for which the tip is registered.

Author

Commented:
It's now working.

I have used the win32 API instead of the MFC CToolTipCtrl class.

Thanks to all for help.
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.