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 );
看了很多例子很多都是对话框程序,要么就是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 );