sdk上工具提示控件使用

sdk下工具提示控件使用
看了很多例子很多都是对话框程序,要么就是MFC的难道不能再SDK下用,什么都没问题就是没有提示框

引入的文件
#include <commctrl.h> //INITCOMMONCONTROLSEX和InitCommonControlsEx的声明
#pragma comment(lib, "comctl32") //InitCommonControlsEx的实现
#pragma comment(linker, "/subsystem:windows")

消息处理

LRESULT WINAPI WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
{
  static HWND hwndTT;
  static TCHAR* pszTip = TEXT(
  "This is a message! "); //工具提示的文字.这里的回车换行符只有在情况3才起作用
  switch( message )
  {
  case WM_CREATE:
  {
   
  INITCOMMONCONTROLSEX iccex; //InitCommonControlsEx的参数
  TOOLINFO ti; //真正的工具提示
  RECT rect; //只有鼠标在这个矩形内,
  //工具提示才会显示
  UINT uId = 0; //每个工具提示控件可以有多个工具提示
  //这个标识每个提示的id
  LPTSTR lpszTttext = pszTip; //工具提示的文字

  iccex.dwICC = ICC_WIN95_CLASSES; //指明要注册的控件窗口类
  iccex.dwSize = sizeof(iccex);
  InitCommonControlsEx(&iccex); //注册控件窗口类

  hwndTT = CreateWindowEx( //创建工具提示窗口
  WS_EX_TOPMOST,
  TOOLTIPS_CLASS, //内部定义的窗口类的名字
  NULL, //其他参数基本同CreateWindow
  WS_POPUP | TTS_ALWAYSTIP |TTS_NOPREFIX,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  hwnd,
  NULL,
  ((LPCREATESTRUCT)lParam)->hInstance,
  NULL);

  SetWindowPos(
  hwndTT,
  HWND_TOPMOST,
  0, 0, 0, 0,
  SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

  GetClientRect(hwnd, &rect);

  ti.cbSize = sizeof(ti);
  ti.uFlags = TTF_TRACK | TTF_ABSOLUTE; //情况2
  ti.hwnd = hwnd; //指明我们工具提示是对哪个窗口的提示
  ti.hinst = ((LPCREATESTRUCT)lParam)->hInstance;
  ti.uId = uId;
  ti.lpszText = lpszTttext;
  ti.rect.left = rect.left;  
  ti.rect.top = rect.top;
  ti.rect.right = rect.right;
  ti.rect.bottom = rect.bottom;

  SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
  SendMessage(hwndTT,TTM_TRACKACTIVATE,(WPARAM)TRUE,(LPARAM)&ti);//情况2
  SendMessage(hwndTT, TTM_SETMAXTIPWIDTH, 0, 300);//情况3

  return 0;
  }
  case WM_MOUSEMOVE: //整下WM_MOUSEMOVE是情况2的
  {
  POINT pt;
  GetCursorPos(&pt);
   
  SendMessage(hwndTT,  
  TTM_TRACKPOSITION,
  0,
  (LPARAM)MAKELPARAM(pt.x+15, 
  pt.y+15));
  return 0;
  }
  case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
  }
  return DefWindowProc( hwnd,message,wParam,lParam );